-
外观模式的目的在于如何简化接口,可以将多个类的复杂的一切隐藏在背后,值显露一个干净美观的外观。
-
所谓的外观模式就是提供一个统一的接口,用来访问子系统中的一群接口。
-
外观模式定义了一个高级接口,让子系统更容易使用,
-
外观模式的UML图
-
外观模式的代码实现
-
创建3个子部件
/** * 子系统角色:空调 */ public class Air { public void open(){ System.out.println("开空调"); } public void shutDown(){ System.out.println("关空调"); } }
/** * 子系统角色:灯 */ public class Light { public void open(){ System.out.println("开灯"); } public void shutDown(){ System.out.println("关灯"); } }
/** * 子系统角色:电视 */ public class Tv { public void open(){ System.out.println("开电视"); } public void shutDown(){ System.out.println("关电视"); } }
-
创建外观类
/** * 包装了子部件,隐藏了子部件 */ public class Facade { private Air air; private Tv tv; private Light light; public Facade(Air air, Tv tv, Light light) { this.air = air; this.tv = tv; this.light = light; } //一键打开 public void allOpen(){ air.open(); tv.open(); light.open(); } public void allDown(){ air.shutDown(); tv.shutDown(); light.shutDown(); } }
-
创建测试类
public class Test { public static void main(String[] args) { Air air = new Air(); Tv tv = new Tv(); Light light = new Light(); Facade facade = new Facade(air, tv, light); facade.allOpen(); facade.allDown(); } }
-
-
外观模式的优点
- 使客户对系统的使用变简单了,减少了与子系统的关联对象,实现了子系统与客户之间的松耦合关系。
- 只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类
- 降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程
-
外观模式的缺点
- 不能很好的限制客户使用子系统类,如果对客户访问子系统做太多的限制会减少系统的可变性和灵活性
- 在不映入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户类端的源代码,违背了”开闭原则“
-
外观模式的使用场景
- 当要为一个复杂子系统提供一个简单接口时可以使用外观模式
- 客户端与多个子系统之间存在很大的依赖性,引入外观模式将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。
设计模式--外观模式
最新推荐文章于 2024-09-19 20:16:02 发布