设计模式之 适配器模式
来源:互联网 发布:c语言代码大全下载 编辑:程序博客网 时间:2024/06/09 23:32
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。
主要分为三种:
1.类的适配器模式
2.对象的适配器模式
3.接口的适配器模式
1.类的适配器模式
核心思想就是:
有一个Source类,拥有一个方法,有一个目标接口Targetable,
通过Adapter类,将Source的功能扩展到Targetable里。
其实是扩展到Targetable的实现类Adapter里,Targetable只是一个接口!
打个不恰当的比方:
两个国家,AB国类似于英格兰,苏格兰等
A国女王管理A国,有一个管理方法methodA,
B国男王也想管理A国,有一个虚拟的方法methodA,以为没有权利所以是虚拟的嘛!
那B国国王怎样能管理A国呢,就是跟A女王生一个孩子Adapter,就间接管理到了A国。
上代码:
public class KingA {public void ManageStateA(){System.out.println("Manage State A");}}
public interface KingB {public void ManageStateA();}
public class Adapter extends KingA implements KingB {}
测试代码:
public static void main(String[] args) {KingB mKingB = new Adapter();mKingB.ManageStateA();}
打印结果
Manage State A
是不是KingB 管理到了A国?
2.对象的适配器模式
如果B国国王娶不到A国女王怎么办?
如果B国国王的儿子一直努力努力,南征北战当上大帝国皇帝(类似于英国女王, AB国类似于英格兰,苏格兰等)
那A国这也就是B国国王的儿子管辖下的一个元素而已,这样子B国国王也能管理到A国!但是得通过A国国王的传达!不能直接下命令
假设这个儿子叫Wrapper吧!
public class Wrapper implements KingB {private KingA mKingA;public Wrapper(KingA mKingA){this.mKingA = mKingA;}@Overridepublic void ManageStateA() {mKingA.ManageStateA();}}
测试代码:
public static void main(String[] args) {KingA mKingA = new KingA();KingB mKingB = new Wrapper(mKingA);mKingB.ManageStateA();}
3.接口的适配器模式
接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。
public interface Sourceable { public void methodA(); public void methodB(); }
实现虚拟类:
public abstract class Wrapper implements Sourceable{ public void methodA(){} public void methodB(){} }
public class SourceSubA extends Wrapper { public void methodA(){ System.out.println("the sourceable interface's first SubA!"); } }
public class SourceSubB extends Wrapper { public void methodB(){ System.out.println("the sourceable interface's second SubB!"); } }
测试代码:
public static void main(String[] args) { Sourceable sourceA = new SourceSubA(); Sourceable sourceB = new SourceSubB(); sourceA.methodA(); sourceB.methodB(); sourceA.methodA(); sourceB.methodB(); }
测试输出:
the sourceable interface's first Sub1!
the sourceable interface's second Sub2!
达到了我们的效果!
讲了这么多,总结一下三种适配器模式的应用场景:
类的适配器模式: 当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
对象的适配器模式: 当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
接口的适配器模式: 当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式 之 适配器
- 设计模式 之 适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式 之 适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之--适配器模式.
- 在windows下打出tar.gz的尝试
- SQL
- struts
- 第八周训练5三色球问题
- web入门(tomcat+http)
- 设计模式之 适配器模式
- 建造者模式(Builder)
- 使用VS2015调试Android的C++动态链接库
- window操作
- 王小草【深度学习】笔记第三弹--神经网络细节与训练注意点
- jQuery UI Autocomplete 的 focus 事件 改变获得焦点项的样式
- swap扩展内存
- 我的sublime配置
- c语言malloc()动态分配二维数组