前言
前面我们学习了创建型设计模式,其中有5中,个人感觉比较重要的是工厂方法模式、单例模式、原型模式。接下来我将分享的是结构型模式!
1.1、适配器模式概述
适配器模式(Adapter)属于结构型设计模式,它的作用如同它的名字一样,用于转换接口。像我们的手机、电脑的电源适配器一样,适配器模式可以使彼此不兼容的代码间优雅地协作。
适配器模式将某个类的接口转换成客户端(用户)期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
1)角色及职责
目标接口: Target,即我们想用适配器转换过去的新的目标接口。
被适配者: Adaptee,适配器应用的对象。
适配器: Adapter,转换接口的类
2)适用场景
大多数情况下适配器模式会用在这两个场景下:
系统中历史遗留的代码与新的代码之间的兼容处理,用于将旧的接口转换为新的接口,使得新的代码与旧的代码能够愉快地玩耍。
有两个或者多个系统或者模块存在不兼容的接口,用于将各个模块或系统间互不兼容的接口转换为通用的接口,使得它们愉快地合作。
1.2、类的适配器模式
核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,通过Adapter类,将Source的功能扩展到Targetable里。
public class Source { public void method1() { System.out.println("this is original method!"); } } public interface Targetable { /* 与原类中的方法相同 */ public void method1(); /* 新的方法 */ public void method2(); } //类Source和接口Targetable因为不兼容,导致不能在一起工作 //适配器Adapter则可以在不改变源代码的基础上解决这个问题 //这样Targetable接口的实现类Adapter的对象即使Targetable类型,也能访问到Source中的方法 public class Adapter extends Source implements Targetable { public void method2() { System.out.println("this is the targetable method!"); } } //测试类 这样Targetable接口的实现类就具有了Source类的功能。 public class AdapterTest { public static void main(String[] args) { Targetable target = new Adapter(); target.method1(); target.method2(); } }