适配器模式-Adapter
将一个不兼容接口的对象包装起来,变成兼容的对象
外观/门面模式-Facade
将一群对象包装起来,以简化接口
当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式
外观将客户从一个复杂的子系统中解耦
扫描二维码关注公众号,回复:
293505 查看本文章
实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行
可以为一个子系统实现一个以上的外观
装饰模式-Decorator
将一个对象包装起来以增加新的行为和责任
===============================================================
适配器模式示例
让火鸡变鸭子,以兼容现有接口的参数类型
鸭子的接口
package adapter.duck; public interface Duck { public void quack(); public void fly(); }
具体的鸭子
package adapter.duck; public class MallardDuck implements Duck { @Override public void quack() { System.out.println("Quack"); } @Override public 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 { @Override public void gobble() { System.out.println("Gobble"); } @Override public 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; } /** * 委托被组合的对象完成任务 */ @Override public void quack() { turkey.gobble(); } @Override public 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适配器