15 结构型模式-外观模式

1 外观模式介绍


2 外观模式原理


java 复制代码
public class SubSystemA {

    public void methodA(){
        //业务代码
    }
}
java 复制代码
public class SubSystemB {

    public void methodB(){

    }
}
java 复制代码
public class SubSystemC {

    public void methodC(){

    }
}
java 复制代码
public class Facade {

    private SubSystemA obj1 = new SubSystemA();
    private SubSystemB obj2 = new SubSystemB();
    private SubSystemC obj3 = new SubSystemC();

    public void method(){

        obj1.methodA();
        obj2.methodB();
        obj3.methodC();
    }

}
java 复制代码
public class Client {

    public static void main(String[] args) {

        Facade facade = new Facade();
        facade.method();
    }
}
3 外观模式应用实例
智能家电控制

通过智能音箱来控制室内的 灯、电视、空调.本来每个设备都需要进行独立的开关操作,现在通过智能音箱完成对这几个设备的统一控制.

java 复制代码
/**
 * 电灯类
 **/
public class Light {

    public void on(){
        System.out.println("打开灯......");
    }

    public void off(){
        System.out.println("关闭灯......");
    }
}
java 复制代码
/**
 * 电灯类
 **/
public class TV {

    public void on(){
        System.out.println("打开电视......");
    }

    public void off(){
        System.out.println("关闭电视......");
    }
}
java 复制代码
/**
 * 空调类
 **/
public class AirCondition {

    public void on(){
        System.out.println("打开空调......");
    }

    public void off(){
        System.out.println("关闭空调......");
    }
}
java 复制代码
/**
 * 智能音箱外观类
 **/
public class SmartAppliancesFacade {

    private Light light;

    private TV tv;

    private AirCondition airCondition;

    public SmartAppliancesFacade() {
        this.light =new Light();
        this.tv = new TV();
        this.airCondition = new AirCondition();
    }

    public void say(String message){
        if(message.contains("打开")){
            on();
        }else if(message.contains("关闭")){
            off();
        }else{
            System.out.println("对不起没有听清楚您说什么! 请重新再说一遍");
        }

    }


    //起床后 语音开启 电灯 电视 空调
    private void on() {
        System.out.println("起床了!");
        light.on();
        tv.on();
        airCondition.on();
    }

    //睡觉前 语音关闭 电灯 电视 空调
    private void off() {
        System.out.println("睡觉了!");
        light.off();
        tv.off();
        airCondition.off();
    }
}
java 复制代码
public class Client {

    public static void main(String[] args) {

        //创建外观对象
        SmartAppliancesFacade facade = new SmartAppliancesFacade();

        facade.say("打开家电");
        facade.say("关闭家电");
    }
}

4 外观模式总结


外观模式缺点:

  1. 不能很好的控制客户端直接使用子系统类,如果客户端访问子系统类做太多的限制则减少了可变性和灵活性.
  2. 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则.
相关推荐
合方圆~小文7 天前
【传统枪机现代枪机的功能需求】
人工智能·功能测试·接口隔离原则·零售·外观模式
JINGWHALE110 天前
设计模式 结构型 外观模式(Facade Pattern)与 常见技术框架应用 解析
前端·人工智能·后端·设计模式·性能优化·系统架构·外观模式
玉带湖水位记录员10 天前
外观模式——C++实现
c++·外观模式
诸葛悠闲12 天前
设计模式——外观模式
设计模式·外观模式
玉面小君12 天前
C# 设计模式(结构型模式):外观模式
设计模式·c#·外观模式
犬余17 天前
设计模式之外观模式:从电脑组装到系统架构的简化之道
设计模式·外观模式
捕鲸叉22 天前
C++软件设计模式之外观(Facade)模式
c++·设计模式·外观模式
重生之绝世牛码23 天前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
越甲八千24 天前
重拾设计模式-外观模式和适配器模式的异同
设计模式·适配器模式·外观模式
越甲八千24 天前
重拾设计模式--外观模式
c++·设计模式·外观模式