设计模式之适配器模式&外观模式

来源:互联网 发布:知豆电动汽车电池质保 编辑:程序博客网 时间:2024/05/21 11:20

OO适配器将一个接口转换为另一个接口,以符合客户的需求。


Duck和Turkey之间的关系。。。

public interface Duck {public void quack();public void fly();}

public class MallardDuck implements Duck{public void quack(){System.out.println("Quack");}public void fly(){System.out.println("im flying");}}

public interface Turkey {public void gobble();public void fly();}

public class WildTurkey implements Turkey{public void gobble(){System.out.println("Gobble gooble");}public void fly(){System.out.println("im flying a short distance");}}

public class TurkeyAdapter implements Duck{Turkey turkey;public TurkeyAdapter(Turkey turkey){this.turkey=turkey;}public void quack(){turkey.gobble();}public void fly(){for(int i=0;i<5;i++)turkey.fly();}}

测试:

public class DuckTestDrive {public static void main(String[]args){MallardDuck duck=new MallardDuck();WildTurkey turkey=new WildTurkey();Duck turkeyAdapter=new TurkeyAdapter(turkey);System.out.println("The turkey says...");turkey.gobble();turkey.fly();System.out.println("\nThe duck says...");testDuck(duck);System.out.println("\nThe turkeyAdapter says...");testDuck(turkeyAdapter);}static void testDuck(Duck duck){duck.quack();duck.fly();}}

result:

The turkey says...Gobble goobleim flying a short distanceThe duck says...Quackim flyingThe turkeyAdapter says...Gobble goobleim flying a short distanceim flying a short distanceim flying a short distanceim flying a short distanceim flying a short distance

适配器让原本接口不兼容的类可以合作无间。


以上是对象的适配器,还有类的适配器

比如旧世界的枚举器Enumeration适配到新世界的迭代器Iterator,编写一个EnumerationIterator适配器


public class EnumerationIterator implements Iterator{Enumeration enum;public EnumerationIterator(Enumeration enum ){this.enum=enum;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn enum.hasMoreElement();}@Overridepublic Object next() {// TODO Auto-generated method stubreturn enum.nextElement();}@Overridepublic void remove() {// TODO Auto-generated method stubthrow new UnsupportedOperationException();}}

类似的还有一种模式,外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更加容易使用。

比如家庭影院系统就很适合。

Facade并没有封装子系统的类,只是提供简化的接口,所以你可以直接使用子系统的类。也允许你将客户实现从任何子系统中解耦。


外观和适配器可以包装很多类,但是前者的意图是简化接口,而后者是将接口转换成不同接口


涉及到一个设计原则:最少知识原则。也就是不要让太多的类耦合在一起。


0 0