java设计模式之外观模式
2017-02-04 21:46
519 查看
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
想要使用外观模式,我们创建了一个接口简化而统一的类,用来包装子系统中一个或多个复杂的类。外观模式相当直接,很容易理解,这方面和许多其他的模式不太一样。但这并不会降低它的威力:外观模式允许我们让客户和子系统之间避免紧耦合。
外观模式也可以帮我们遵守一个新的面向对象原则:最少知识原则。
最少知识原则告诉我们要减少对象之间的交互,只留下几个“密友”,这个原则希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。
类图:
Facade类其实相当于A、B、C模块的外观界面,有了这个Facade类,那么客户端就不需要亲自调用子系统中的A、B、C模块了,也不需要知道系统内部的实现细节,甚至都不需要知道A、B、C模块的存在,客户端只需要跟Facade类交互就好了,从而更好地实现了客户端和子系统中A、B、C模块的解耦,让客户端更容易地使用系统。
利用外观模式实现控制家里电器设备的开关,当在家时打开电视,打开灯,打开空调。当离开家时关闭电视,关闭灯,关闭空调。
类图:
TV类代码实现:
Light类代码实现:
AirConditioner类代码实现:
Façade类代码实现:
Client类代码实现:
运行结果:
想要使用外观模式,我们创建了一个接口简化而统一的类,用来包装子系统中一个或多个复杂的类。外观模式相当直接,很容易理解,这方面和许多其他的模式不太一样。但这并不会降低它的威力:外观模式允许我们让客户和子系统之间避免紧耦合。
外观模式也可以帮我们遵守一个新的面向对象原则:最少知识原则。
最少知识原则告诉我们要减少对象之间的交互,只留下几个“密友”,这个原则希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。
类图:
Facade类其实相当于A、B、C模块的外观界面,有了这个Facade类,那么客户端就不需要亲自调用子系统中的A、B、C模块了,也不需要知道系统内部的实现细节,甚至都不需要知道A、B、C模块的存在,客户端只需要跟Facade类交互就好了,从而更好地实现了客户端和子系统中A、B、C模块的解耦,让客户端更容易地使用系统。
利用外观模式实现控制家里电器设备的开关,当在家时打开电视,打开灯,打开空调。当离开家时关闭电视,关闭灯,关闭空调。
类图:
TV类代码实现:
public class TV { public void on(){ System.out.println("打开电视"); } public void off(){ System.out.println("关闭电视"); } }
Light类代码实现:
public class Light { public void on(){ System.out.println("打开电灯"); } public void off(){ System.out.println("关闭电灯"); } }
AirConditioner类代码实现:
public class AirConditioner { public void on(){ System.out.println("打开空调"); } public void off(){ System.out.println("关闭空调"); } }
Façade类代码实现:
public class Facade { TV tv; Light light; AirConditioner airConditioner; public Facade(TV tv,Light light,AirConditioner airConditioner){ this.tv = tv; this.light = light; this.airConditioner = airConditioner; } public void atHome(){ tv.on(); light.on(); airConditioner.on(); } public void leaveHome(){ tv.off(); light.off(); airConditioner.off(); } }
Client类代码实现:
public class Client { public static void main(String[]args){ TV tv = new TV(); Light light = new Light(); AirConditioner airConditioner = new AirConditioner(); Facade facade = new Facade(tv, light, airConditioner); //在家时 System.out.println("------at home-------"); facade.atHome(); //离家时 System.out.println("------leave home-------"); facade.leaveHome(); } }
运行结果:
------at home------- 打开电视 打开电灯 打开空调 ------leave home------- 关闭电视 关闭电灯 关闭空调
相关文章推荐
- Java设计模式(5) -- 外观
- java软件体系结构设计模式----外观
- JAVA设计模式(22) —外观(Facade)模式
- 【Java设计模式】之外观模式
- JAVA设计模式十八:--Facade(外观模式或门面模式)
- Java设计模式之外观模式
- java设计模式-外观模式(Facade)
- Java设计模式 结构模式-外观模式(Facade)
- JAVA设计模式之外观模式
- Java设计模式---外观模式
- Java设计模式(五)Facade(外观),Composite(组合),Decorator(油漆工)
- java 设计模式学习笔记七 facade外观模式
- JAVA设计模式十九--Facade(外观模式)
- Java设计模式之适配器模式和外观模式
- Java设计模式之外观模式研究
- Java设计模式之外观模式
- java设计模式之外观模式Facade
- JAVA设计模式——外观模式
- Java设计模式---外观模式
- Java设计模式十七:外观模式(Facade)