当前位置: 代码迷 >> 综合 >> HeadFirst(七)Adapter 适配器设计模式
  详细解决方案

HeadFirst(七)Adapter 适配器设计模式

热度:23   发布时间:2024-01-10 04:43:08.0

 

适配器模式-Adapter

将一个不兼容接口的对象包装起来,变成兼容的对象

 

 

 

 

 

外观/门面模式-Facade

将一群对象包装起来,以简化接口

当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式

外观将客户从一个复杂的子系统中解耦

实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行

可以为一个子系统实现一个以上的外观

 

装饰模式-Decorator

将一个对象包装起来以增加新的行为和责任

 

 

===============================================================

 

适配器模式示例

让火鸡变鸭子,以兼容现有接口的参数类型

 


 
 

鸭子的接口

package adapter.duck;public interface Duck {public void quack();public void fly();
}

 

具体的鸭子

package adapter.duck;public class MallardDuck implements Duck {@Overridepublic void quack() {System.out.println("Quack");}@Overridepublic void fly() {System.out.println("I'm flying");}}

 

火鸡的接口

package adapter.turkey;public interface Turkey {public void gobble();public void fly();
}

 

具体的火鸡

package adapter.turkey;public class WildTurkey implements Turkey {@Overridepublic void gobble() {System.out.println("Gobble");}@Overridepublic void fly() {System.out.println("I'm flying a short distance");}}

 

将火鸡伪装成鸭子

package adapter.turkey;import adapter.duck.Duck;/*** 适配器* 内部将火鸡伪装为鸭子*/
public class TurkeyAdapter implements Duck {//被适配者Turkey turkey;public TurkeyAdapter(Turkey turkey) {this.turkey = turkey;}/*** 委托被组合的对象完成任务*/@Overridepublic void quack() {turkey.gobble();}@Overridepublic void fly() {for(int i=0;i<5;i++) {//火鸡需要连续飞行5次才能抵上鸭子飞行一次turkey.fly();}}}

 

测试:让火鸡也兼容以鸭子类型作为参数的接口

package test;import adapter.duck.Duck;
import adapter.duck.MallardDuck;
import adapter.turkey.Turkey;
import adapter.turkey.TurkeyAdapter;
import adapter.turkey.WildTurkey;public class AdapterTest {public static void main(String[] args) {Duck duck = new MallardDuck();Turkey turkey = new WildTurkey();Duck turkeyAdapter = new TurkeyAdapter(turkey);System.out.println("The Turkey says:");turkey.gobble();turkey.fly();System.out.println("\nThe Duck syas:");testDuck(duck);System.out.println("\nThe TurkeyAdapter syas:");testDuck(turkeyAdapter);//通过适配器,让火鸡变为鸭子去了}private static void testDuck(Duck duck) {duck.quack();duck.fly();}
}

 

 

===============================================================

 

Enumeration适配器



 

 

 

  相关解决方案