外观模式【结构型】

外观模式是一种结构型模式,外观模式又叫做门面模式,是为了给一个复杂的子系统提供一个更加容易被访问的统一接口。在该模式下有个对外的统一接口,使用者不需要了解接口内部的详细情况,只需要调用统一接口来实现自己的目的即可。

举例:现在智能语音家居使用广泛,我们可以使用智能家居帮我们开窗帘、开空调、开灯等等。当到了晚上时,我们就像睡觉了,这个时候我们告诉智能家居说:“我要睡觉了”,这时智能家居就会做很多事情,帮我们关闭窗帘、关闭电视机、将空调温度调到刚刚好等等一系列最有助于睡眠的状态。

我们实际上是不需要知道具体要做什么,只需要告诉它我要睡觉了,它就自动帮我们做完了。这就是外观模式的体现。

这样子能够大大的降低程序的复杂程度,提高了程序的可维护性。

外观模式是迪米特法则的典型应用。

外观模式主要有两种角色:

  1. 外观角色:为多个子系统提供一个统一的接口。比如只能家具。

  2. 子系统角色:实现系统的部分功能,可以供外观角色调用。比如电视机、灯等等。

代码实现:

1、创建子角色,空调、电视机和点灯,每个角色中提供了一些针对该对象进行操作的方法。

/**
 * 空调
 */
public class AirCondition {
​
    public void on(){
        System.out.println("打开空调");
    }
​
    public void off(){
        System.out.println("关闭空调");
    }
​
    public void sleep(){
        System.out.println("将空调温度调整到 26 摄氏度,睡觉模式");
    }
}
​
​
/**
 * 电灯
 */
public class Light {
​
    public void on(){
        System.out.println("打开电灯");
    }
​
    public void off(){
        System.out.println("关闭电灯");
    }
​
    public void sleep(){
        System.out.println("打开蓝色灯光,适合睡觉");
    }
}
​
​
/**
 * 电视机
 */
public class TV {
​
    public void on(){
        System.out.println("打开电视机");
    }
​
    public void off(){
        System.out.println("关闭电视机");
    }
}

2、创建外观角色,智能家居【小爱同学】,需要管理家电,所以需要将家电聚合到智能家居中,并提供睡觉模式方法。

public class XiaoaiTongxue {
​
    private TV tv;
​
    private Light light;
​
    private AirCondition airCondition;
​
    public XiaoaiTongxue() {
        tv = new TV();
        light = new Light();
        airCondition = new AirCondition();
    }
​
    public void sleep(){
        System.out.println("主人要休息了");
        tv.off();
        airCondition.sleep();
        light.sleep();
        System.out.println("主人,环境已经调到睡觉模式,晚安");
    }
}

3、测试

public static void main(String[] args) {
    XiaoaiTongxue xiaoai = new XiaoaiTongxue();
    xiaoai.sleep();
}
​
//测试结果
主人要休息了
关闭电视机
将空调温度调整到 26 摄氏度,睡觉模式
打开蓝色灯光,适合睡觉
主人,环境已经调到睡觉模式,晚安
​
Process finished with exit code 0

好处:

  • 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。

  • 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。

坏处:不符合开闭原则,修改很麻烦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值