java设计模式之外观模式

    xiaoxiao2021-03-26  21

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

    想要使用外观模式,我们创建了一个接口简化而统一的类,用来包装子系统中一个或多个复杂的类。外观模式相当直接,很容易理解,这方面和许多其他的模式不太一样。但这并不会降低它的威力:外观模式允许我们让客户和子系统之间避免紧耦合。

    外观模式也可以帮我们遵守一个新的面向对象原则:最少知识原则。 最少知识原则告诉我们要减少对象之间的交互,只留下几个“密友”,这个原则希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。

    类图: 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------- 关闭电视 关闭电灯 关闭空调
    转载请注明原文地址: https://ju.6miu.com/read-659132.html

    最新回复(0)