设计模式-适配器模式

来源:互联网 发布:手机拍摄软件 编辑:程序博客网 时间:2024/06/07 02:22

适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

作用:

透明:通过适配器,客户端可以调用同一接口。

重用:复用现存的类

低耦合:将目标类与适配者类解耦,通过引用一个适配器类重用现有的适配者类,而无需修改源代码(开闭原则:对修改关闭,对扩充开放)

结构:



情景:

顾客到了一家餐厅,对服务员说,我要喝牛奶。但是餐厅中却没有牛奶供应,只有果汁,所以服务员就对顾客说,能不能换成果汁呢?所以,顾客喝了果汁。

上例中,牛奶就是顾客要的东西,也就是目标Target,是具体的或抽象的类,也可以是接口

果汁是餐厅现有供应的,也就是需要适配的类Adaptee。

服务员在其中沟通解决,相当于适配器Adapter,将原接口转换成目标接口。

上代码

/** * 定义牛奶接口,餐厅没有的 */public interface Milk {public void drinkMilk();}

/** * 需要适配的类 */public class Juice {public void drinkJuice(){System.out.println("喝橘汁");}}

方式一:

/** * 实现Milk接口 * 将橘汁成为参数,直接更换 */public class JuiceAdapter implements Milk {private Juice juice ;public JuiceAdapter(Juice juice) {this.juice = juice;}@Overridepublic void drinkMilk() {System.out.println("通过沟通,将牛奶换成juice");juice.drinkJuice();}}

方式二

/** * 采用继承方法的  */public class JuiceAdapterExtends extends Juice implements Milk {@Overridepublic void drinkMilk() {//实现接口this.drinkJuice();//继承超类方法}}

测试:

public class Waiter {private Milk milk;public Waiter(Milk milk) {this.milk = milk;}//服务public void serve(){milk.drinkMilk();}public static void main(String[] args) {Juice juice = new Juice();Milk milk = new JuiceAdapter(juice);Waiter waiter = new Waiter(milk);waiter.serve();System.out.println("============================");milk = new JuiceAdapterExtends();//创建牛奶waiter = new Waiter(milk);waiter.serve();}}

运行结果:

通过沟通,将牛奶换成juice
喝橘汁
============================
喝橘汁


0 0
原创粉丝点击