设计模式(8)---适配器模式
适配器模式 Adapter(结构型模式)
1.概述
假如只有一个3孔插座,和一个只能插进2孔的插头,可以选择去买一个插排,这个插排就可以看成适配器。
适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
其中分为类适配器和对象适配器,这里只介绍对象适配器。
2.结构图
3.代码
1 /* 2 * 标准接口 3 */ 4 public interface Target { 5 public void request(); 6 }
1 public class TargetImpl implements Target { 2 3 @Override 4 public void request() { 5 System.out.println("具有 普通功能..."); 6 7 } 8 9 }
1 /* 2 * 需要转换的接口 3 */ 4 public interface Adaptee { 5 public void specificRequest(); 6 }
1 public class AdapteeImpl implements Adaptee { 2 3 @Override 4 public void specificRequest() { 5 System.out.println("具有 特殊功能..."); 6 7 } 8 9 }
1 // 适配器类,直接关联被适配类,同时实现标准接口 2 public class Adapter implements Target { 3 4 private Adaptee adaptee; 5 6 // 可以通过构造函数传入具体需要适配的被适配类对象 7 public Adapter (Adaptee adaptee) { 8 this.adaptee = adaptee; 9 } 10 11 @Override 12 public void request() { 13 // 这里是使用委托的方式完成特殊功能 14 this.adaptee.specificRequest(); 15 16 } 17 18 }
1 public class Test { 2 3 public static void main(String[] args) { 4 //具有 普通功能... 5 Target a = new TargetImpl() ; 6 a.request(); 7 8 //具有 特殊功能... 9 a = new Adapter(new AdapteeImpl()) ; 10 a.request(); 11 } 12 13 }
4.适用场景
两个类所做的事情相同或相似,但是具有不同接口的时候。
使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
适配器模式是一种亡羊补牢的做法,如果事先统一好接口,可以避免。