文档章节

包装设计模式

o
 onedotdot
发布于 2017/08/12 14:53
字数 670
阅读 5
收藏 0

有时候一个对象的方法可能不是我们想要的功能,我们希望能将这个方法覆写。而对于覆写,我们最直白的感觉就是通过子类继承的方式,但是有时候对于使用web开发而言,我们能知道获取对象的实现接口,而真正对象是属于哪个类我们并不知道,例如Connection接口,HttpServletResponse接口这样的,我们并不知道第三方Jar包或者别的框架具体的实现类,那么我们只能通过已知的接口方式来增强或改写某个对象的方法。

  通常增强某个对象方法的方式有三种:

  ⑴ 使用子类继承某个实现类;

  ⑵ 使用包装设计模式;

  ⑶ 使用动态代理。

  本篇主要讲解包装设计模式,但要知道动态代理是最佳的解决方法。

 

包装设计模式主要有如下五个步骤:

  ① 自定义一个类,实现与目标对象(被增强对象)相同的接口。

  ② 在自定义的类中定义一个成员变量,来记住(指向)目标对象。

  ③ 定义一个构造函数,用来接收目标对象。

  ④ 覆盖想增强或改写的方法。

  ⑤ 对于其他不想增强或改写的方法,使用刚才记住目标对象的成员变量来一一调用目标对象的方法即可。

 

  以数据库连接的Connection接口为例,我们在数据库连接池中给其他方法的Connection对象必须不能是数据库直接提供的Connection对象,因为其close方法会将连接直接销毁,而我们应该返回的是调用close方法能将连接重新放回池子中的Connection对象,所以我们使用一个包装类来封装数据库提供的Connection对象,覆写其close方法,对于其他方法,则直接使用原来的对象去调用,代码如下:

复制代码

1 class MyConnection implements Connection{  //包装设计模式的类
 2         private Connection conn;
 3         public MyConnection(Connection conn) {  //接收目标对象
 4             this.conn = conn;
 5         }
 6         
 7         @Override
 8         public void close() throws SQLException {
 9             connectionList.addFirst(this.conn);  //调用close方法时只是将连接重新返回池中,而不会销毁
10     }
11 
12 @Override
13         public Statement createStatement() throws SQLException {
14             this.conn.createStatement();  //对于不增强的方法则调用目标对象的方法即可,在MyConnection包装类中其他方法都是这样的
15             return null;
16     }
17     。。。  //以下省略Connection接口中覆写的其他方法,对于不想增强的方法都如上(createStatement方法)所示
18 }    // MyConnection包装类完成

本文转载自:http://www.cnblogs.com/fjdingsd/p/5273058.html

共有 人打赏支持
o
粉丝 7
博文 352
码字总数 14350
作品 0
朝阳

暂无文章

OSChina 周日乱弹 —— 小心着凉 @红薯

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:5.33起,其声呜呜然,如怨如慕,如泣如诉。余音袅袅,不绝如缕。分享Arch Enemy的单曲《Bridge Of Destiny (2009)》 《Bridge Of...

小小编辑
36分钟前
57
2
what f,,

anlve
今天
2
0
初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
11
0
现场看路演了!

HiBlock
昨天
21
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部