java设计模式之外观模式

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

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

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

类图:
这里写图片描述
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-------
关闭电视
关闭电灯
关闭空调
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值