设计模式GOF23——适配器模式
2016-08-02 13:22
330 查看
适配器模式(adapter)是结构性模式的一种。结构型模式的核心作用是从程序的结构上实现低耦合,从而可以扩大整体的类结构,用来解决更大的问题。
经常用于旧系统的改造升级。
在java.io.InputStreamReader(InputStream)和java.io.OutputStreamWriter(OutputStream)用到
需要适配的类(adaptee):需要适配的类,或者配置类。
适配器(adapter):通过包装一个合适的对象,把原接口转换成目标接口。
其实适配器不止可以用上述的继承方式,也可以用下面的组合的方式
继承的方式使用时代码少一点,但是Java只能但继承,组合的方式虽然对了一个对象的创建,但是让程序的扩展性会变得更好了。
模式的使用场景
将一个类的接口换成客户需要的另外一个接口,Adapter模式使得原本不兼容不能在一起工作的那些类可以在一起工作。经常用于旧系统的改造升级。
在java.io.InputStreamReader(InputStream)和java.io.OutputStreamWriter(OutputStream)用到
模式中的角色
目标接口(Target):客户期待的接口。目标可以是具体的也可以是抽象的类,也可以是接口。需要适配的类(adaptee):需要适配的类,或者配置类。
适配器(adapter):通过包装一个合适的对象,把原接口转换成目标接口。
模式的实现
//被适配的类 public class Adaptee { //被适配的方法 public void request(){ //被适配的类的操作 } } //修改后的接口 public interface Target { //修改后接口的方法 void handleReq(); } //适配器类 public class Adapter extends Adaptee implements Target{ //适配器的适配方法,这里是用继承的方式实现的 public void handleReq() { super.request(); } } //使用类 public class Client { //使用类调用适配器的方法 public void test1(Target t){ t.handleReq(); } //具体使用(继承方式的使用) public static void main(String[] args) { Client c = new Client(); Target t = new Adapter(); c.test1(t); } }
其实适配器不止可以用上述的继承方式,也可以用下面的组合的方式
//适配器类 public class Adapter implements Target{ private Adaptee adaptee; //适配器的适配方法,这里是用组合的方式实现的 public void handleReq() { adaptee.request(); } public Adapter(Adaptee a){ super(); this.adaptee = a; } } //使用类 public class Client { //使用类调用适配器的方法 public void test1(Target t){ t.handleReq(); } //具体使用(组合方式的使用) public static void main(String[] args) { Client c = new Client(); Adaptee a = new Adaptee(); Target t = new Adapter(a); c.test1(t); } }
继承的方式使用时代码少一点,但是Java只能但继承,组合的方式虽然对了一个对象的创建,但是让程序的扩展性会变得更好了。
相关文章推荐
- 设计模式GOF23——桥接模式
- 设计模式GOF23——访问者模式
- 设计模式GOF23——迭代器模式
- 【GOF23设计模式】适配器模式
- 设计模式GOF23——单例模式
- 设计模式GOF23——外观模式
- 设计模式GOF23——享元模式
- 设计模式GOF23——克隆模式
- 设计模式GOF23——代理模式
- 【GOF23设计模式】_适配器模式、对象适配器、类适配器、开发中场景JAVA235
- 设计模式GOF23——组合模式
- 设计模式GOF23——装饰模式
- gof23 适配器模式
- 设计模式(23)-----命令模式
- 【GOF23设计模式】工厂模式
- 【GOF23设计模式】模板方法模式
- [GoF23] java中的Proxy模式(二)
- GOF23的一些总结(二十一(下))
- 小伙的java之旅——GOF23-单例模式
- GOF23设计模式之外观模式不使用外观模式的实现