在什么情况下使用适配器设计模式?
1. 系统需要使用现有的类,而此类的借口不符合系统的需要
2. 想要建立一个可以复用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
3. 在设计里,需要改变多个已有的子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器类,而这不太实际。
适配器模式结构上分为两种。一个是类的适配器模式结构,另外一个是对象的适配器模式结构。
类的适配器结构.主要是使适配器类继承自源类而同时实现目标角色的接口的类。 这个有一个弊端是,如果要更改源类的一个或者多个方法,就只好先做一个源类的子类,然后在子类中覆盖父类的方法,改变行为,然后再让适配器类(Adaptee)继承,从而实现适配。
先看类的适配器模式代码:
目标角色(Target),这里使用一个接口来说明:
package com.longweir.adapter;
public interface Target {
//这个方法在源类中有定义
public void sampleOperation1();
//这个方法在源类中没有定义
public void sampleOperation2();
}
源角色类(Adaptee)
package com.longweir.adapter;
public class Adaptee {
public void sampleOperation1()
{
//Todo something
}
}
这里我们需要将Adaptee和接口Target衔接起来,所以我们需要使用一个适配器类来实现这样的工作
Adapter:
package com.longweir.adapter;
public class Adapter extends Adaptee implements Target {
//sampleOperation1已经在父类中有了实现
public void sampleOperation2(){
//TODO something here.
}
}
这样一来,我们就很好的将源角色的API和目标角色的API衔接在一起,进行了适配.
但是,当如果我们的源类和源的子类都同时要适配时,则此方法不可行。这时,我们可以考虑将源目标角色作为一个成员属性而委派到适配类中,并调用该成员的相关方法。 这个就是对象的适配器模式结构
以上代码不变 我们只改Adapter类即可。
package com.longweir.adapter;
public class Adapter implements Target {
//源角色作为一个属性成员
private Adaptee adaptee;
//Constructor with the parameter
public Adapter(Adaptee adaptee){
super();
this.adaptee=adaptee;
}
//使用成员属性的方法实现接口方法
public void sampleOperation1(){
adaptee.sampleOperation1();
}
public void sampleOperation2(){
//todo something herer
}
}
先这样了,这个例子是拷贝的阎宏的书上的例子,下篇再谢谢关于缺省适配器的例子以及JAVA中使用适配器模式的说明
分享到:
相关推荐
适配器模式的Java实现版本,包含类适配器模式和对象适配器模式的实现,同时也包含两者的UML类图
java设计模式【之】适配器模式【源码】【场景:水和容器】 * 适配器模式,类似(亡羊补牢) * 已经存在的类(功能已经开发完成了),与新需求的功能相似,但是略有差异 * 当已经存在的方法无法满足现有需求,需要...
C#设计模式之适配器模式应用实例
设计模式之适配器模式Java版 设计模式之适配器模式Java版 设计模式之适配器模式Java版 设计模式之适配器模式Java版
[刚刚上传的demo运行有问题,重新传了个新的],这个的一个iOS的适配器模式的实例代码,目前就是一个简单的demo,后期还会更新适配器在 MVC,MVP,MVVM中的使用,demo对应着简书:https://www.jianshu.com/p/e2ebcf19098f,...
实验7 适配器模式、外观模式与模板方法模式---Java设计模式
动态代理模式 适配器模式 实现,都可以运行,有一部分注解
设计模式之适配器模式,通过实际例子讲述适配器模式的使用,原理和特点
适配器模式代码demo 适配器模式代码demo 适配器模式代码demo
适配器模式 设计模式 Adapter 还请各位大S指教
设计模式-适配器模式(讲解及其实现代码)
设计模式--适配器模式java例子
设计模式C++学习之适配器模式(Adapter)
实验七:适配器模式.rar实验七:适配器模式.rar
设计模式的适配器模式的例子,希望对大家有用
设计模式系列之适配器模式,分别以Java,Android,IOS进行讨论