适配器模式
2016-07-20 08:58
239 查看
概念适配器模式能让原本互相接口不能匹配的类变得能够一起工作。也就是说,适配器将一个类的接口变成客户端所期望的另外一个接口。适配器模式有两种类型:类的适配器模式和对象的适配器模式。一、类的适配器模式类图:也就是说:适配器Adapter将被适配的对象的接口转换成客户端需要的Target所规定的接口。通过适配器,客户端可以将Adaptee类当作一个Target来与之协同工作。代码如下:
// 已存在的、具有特殊功能、但不符合我们既有的标准接口的类 class Adaptee { public void specificRequest() { System.out.println("被适配类具有 特殊功能..."); } }
// 目标接口,或称为标准接口 interface Target { public void request(); }
// 具体目标类,只提供普通功能 class ConcreteTarget implements Target { public void request() { System.out.println("普通类 具有 普通功能..."); } }// 适配器类,继承了被适配类,同时实现标准接口class Adapter extends Adaptee implements Target{public void request() {super.specificRequest();}}
// 测试类 public class Client { public static void main(String[] args) { // 使用普通功能类 Target concreteTarget = new ConcreteTarget(); concreteTarget.request(); // 使用特殊功能类,即适配类 Target adapter = new Adapter(); adapter.request(); } }测试结果:普通类 具有 普通功能...被适配类具有 特殊功能...二、对象的适配器模式
类图:
这种适配器模式中,适配器类Adapter和源Adaptee之间的关系不再是集成关系,而是一种委托的关系。Adapter往往持有一个Adaptee的引用
代码:
// 适配器类,直接关联被适配类,同时实现标准接口class Adapter implements Target{// 直接关联被适配类private Adaptee adaptee;// 可以通过构造函数传入具体需要适配的被适配类对象public Adapter (Adaptee adaptee) {this.adaptee = adaptee;}public void request() {// 这里是使用委托的方式完成特殊功能this.adaptee.specificRequest();}}// 测试类public class Client {public static void main(String[] args) {// 使用普通功能类Target concreteTarget = new ConcreteTarget();concreteTarget.request();// 使用特殊功能类,即适配类,// 需要先创建一个被适配类的对象作为参数Target adapter = new Adapter(new Adaptee());adapter.request();}}适配器模式的使用前提:1.接口中规定了所有要实现的方法2.但一个要实现此接口的具体类,只用到了其中的几个方法,而其它的方法都是没有用的。实现方法
1.用一个抽象类实现已有的接口,并实现接口中所规定的所有方法,这些方法的实现可以都是“平庸”实现----空方法;但此类中的方法是具体的方法,而不是抽象方法,否则的话,在具体的子类中仍要实现所有的方法,这就失去了适配器本来的作用。2.原本要实现接口的子类,只实现1中的抽象类即可,并在其内部实现时,只对其感兴趣的方法进行实现。
相关文章推荐
- 小技巧:电脑键盘上我不知道的秘密(快捷键+组合)
- Tomcat配置外置路径
- PHP简单日历实现方法
- 【iOS学习笔记 16-7-20】mac os 10.11.4下cocoapod不能正常使用问题
- 选择排序
- http://www.cnblogs.com/xdp-gacl/p/3902537.html
- Ubuntu 16.04上安装 Swift 3.0及问题解答
- C#中压缩/解压缩7-zip文件的方法
- Web开发中需要了解的东西
- 能够提高开发效率的Eclipse实用操作
- linux下安装tuxedo
- Nodejs从有门道无门菜鸟起飞必看教程
- lintcode add-two-numbers 链表求和
- [Cloud Computing]Mechanisms: Public Key Infrastructure
- 用Quartz处理定时执行的任务
- WebService
- python学习——异步IO
- SQLI-LAB 的 实战记录(Less 21 - Less 30)
- Opencv MAT类
- P12文件解析