Java设计模式之包装模式
有时候一个对象的方法可能不是我们想要的功能,我们希望能将这个方法覆写。而对于覆写,我们最直白的感觉就是通过子类继承的方式,但是有时候对于使用web开发而言,我们能知道获取对象的实现接口,而真正对象是属于哪个类我们并不知道,例如Connection接口,HttpServletResponse接口这样的,我们并不知道第三方Jar包或者别的框架具体的实现类,那么我们只能通过已知的接口方式来增强或改写某个对象的方法。
通常增强某个对象方法的方式有三种:
⑴ 使用子类继承某个实现类;
⑵ 使用包装设计模式;
⑶ 使用动态代理。
本篇主要讲解包装设计模式,但要知道动态代理是最佳的解决方法。
包装设计模式主要有如下五个步骤:
① 自定义一个类,实现与目标对象(被增强对象)相同的接口。
② 在自定义的类中定义一个成员变量,来记住(指向)目标对象。
③ 定义一个构造函数,用来接收目标对象。
④ 覆盖想增强或改写的方法。
⑤ 对于其他不想增强或改写的方法,使用刚才记住目标对象的成员变量来一一调用目标对象的方法即可。
以数据库连接的Connection接口为例,我们在数据库连接池中给其他方法的Connection对象必须不能是数据库直接提供的Connection对象,因为其close方法会将连接直接销毁,而我们应该返回的是调用close方法能将连接重新放回池子中的Connection对象,所以我们使用一个包装类来封装数据库提供的Connection对象,覆写其close方法,对于其他方法,则直接使用原来的对象去调用,代码如下:
class MyConnection implements Connection{ //包装设计模式的类
private Connection conn;
public MyConnection(Connection conn) { //接收目标对象
this.conn = conn;
}
@Override
public void close() throws SQLException {
connectionList.addFirst(this.conn); //调用close方法时只是将连接重新返回池中,而不会销毁
}
@Override
public Statement createStatement() throws SQLException {
this.conn.createStatement(); //对于不增强的方法则调用目标对象的方法即可,在MyConnection包装类中其他方法都是这样的
return null;
}
。。。 //以下省略Connection接口中覆写的其他方法,对于不想增强的方法都如上(createStatement方法)所示
} // MyConnection包装类完成
Java设计模式之包装模式的更多相关文章
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- java设计模式6--适配器模式(Adapter )
本文地址:http://www.cnblogs.com/archimedes/p/java-adapter-pattern.html,转载请注明源地址. 适配器模式(别名:包装器) 将一个类的接口转换 ...
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- 折腾Java设计模式之备忘录模式
原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...
- 折腾Java设计模式之状态模式
原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...
- 折腾Java设计模式之模板方法模式
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
- 折腾Java设计模式之访问者模式
博客原文地址:折腾Java设计模式之访问者模式 访问者模式 Represent an operation to be performed on the elements of an object st ...
随机推荐
- VR全景智慧城市,平台属于每个有创业梦想的人
如果你还在人生十字路口迷茫,如果你还想你的人生有所成就,让你的人生有不一样的精彩,就来全景智慧城市平台共同打造属于自己的不同凡响的精彩人生吧! 抓住这个机遇,你就走在了 VR时代的前沿,时势造就英雄, ...
- SSO框架介绍前篇
SSO全程是single sign on,即单点登录,是一种统一认证和授权机制. 单点登录,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其 ...
- 搭建arm交叉工具链
1.将arm-linux-gcc-4.4.3压缩包,拷到home/armtoolchain下,进行压缩. 2.压缩命令:tar -xzvf arm-linux-gcc-4.4.3.tgz,解压后得到了 ...
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...
- MyBatis介绍
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于配 ...
- Navicat连接报错:cannot load OCI DLL,126
32位系统下报错:cannot load OCI DLL,126 解决方法:navicat 菜单中 -工具->选项->OCI 选择oracle安装目录下bin里面的oci.dll 在win ...
- Why you should QC your reads AND your assembly?
鲤鱼基因组:http://www.ntv.cn/a/20140923/52953.shtml 关于鲤鱼基因组的测定,数据质量控制遭到质疑. Why you should QC your reads ...
- H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持
H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持 1,H.264格式 网络表示层NAL,如图H.264流由一帧一帧的NALU组成: SPS:序列参数集,作用于一系列连续的编码 ...
- 一篇文章让你搞懂 SSL 证书
关于结婚这件事 那天和同事讨论到底什么才算是真正的「结婚」?这种话题本来是极其不应该存在的.传统意义的领个证书,办个婚礼.吃吃喝喝,但随着社会各族人民身心发展进化,原本那些繁琐流程简直是反人类,貌似现 ...
- memcache常用命令
一.memcached的基本命令(安装.卸载.启动.配置相关): -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起m ...