设计模式(十三)外观模式

设计模式概述见:
http://blog.csdn.net/chijiandi/article/details/78839305

外观模式的基本概念

外观模式为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更加容易使用。
意思就是当存在很多子系统的接口时可以使用一个高层的接口对他们进行整合。外边模式在没有学习设计模式之前可能也已经有过使用的经验,可以说是一个非常常见的设计模式。

什么时候使用外观模式

1.在设计初就考虑使用外观模式对各个模块进行分层架构,使复杂的系统提供简单的接口,减少了系统的使用难度。
2.系统结构逐渐复杂时可用外观模式进行一个简单的整合进行维护。
3.老系统的代码比较臃肿时,可用外观模式进行维护,也能较清晰的整理出需要的模块。

外观模式怎么用

因为个人最近对小米的米家较为感兴趣,米家的使用就是一种外观模式的使用,比如我们要睡觉,需要关灯,关电脑,关电视机等等之类,如果按正常的Java流程,我们需要对灯、电脑、电视机分别进行调用他们特定的方法,而外观模式提供了一个总控开关,我们只需要知道这个总控开关的方法即完成所有控件的调用。
这种方式哪怕没学过外观模式日常开发中肯定也会经常碰到,对底层接口进行组合调用,这就是外观模式了。

这边我没有使用接口来规范底层接口的规范,因为在特定维护的情况下,子系统并不一定非要实现相同的接口才能调用外观模式。
事实上我这里的例子都是开与关是需要使用接口的

第一步:创建灯、电脑、电视机的类

/**
 * @author :cjd
 * @Description: 灯
 * @create 2018-06-13 10:10
 **/
public class Lamp {
    public void open(){
        System.out.println("开灯了");
    }
    public void close(){
        System.out.println("关灯了");
    }
}
/**
 * @author :cjd
 * @Description: 电脑
 * @create 2018-06-13 10:12
 **/
public class Computer {
    public void open() {
        System.out.println("开电脑了");
    }

    public void close() {
        System.out.println("关电脑了");
    }
}
/**
 * @author :cjd
 * @Description: 电视
 * @create 2018-06-13 10:13
 **/
public class Television {
    public void open(){
        System.out.println("开电视了");
    }
    public void close(){
        System.out.println("关电视了");
    }
}

第二步:创建总控开关

/**
 * @author :cjd
 * @Description: 总控开关
 * @create 2018-06-13 10:14
 **/
public class MasterSwitch {
    private Computer computer;
    private Lamp lamp;
    private Television television;

    public MasterSwitch(Computer computer, Lamp lamp, Television television) {
        this.computer = computer;
        this.lamp = lamp;
        this.television = television;
    }

    public void open() {
        computer.open();
        lamp.open();
        television.open();
    }

    public void close() {
        computer.close();
        lamp.close();
        television.close();
    }
}

总控开关需要知道子系统的属性和方法,而客户值需要知道总控开关的方法。

第三步:客户端进行调用

public class Main {
    public static void main(String[] args) {
        MasterSwitch masterSwitch = new MasterSwitch(new Computer(), new Lamp(), new Television());
        masterSwitch.close();
    }
}

猜你喜欢

转载自blog.csdn.net/chijiandi/article/details/80675152