外观模式

Posted colinzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外观模式相关的知识,希望对你有一定的参考价值。

模式定义

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

示例

家庭影院看电影涉及到灯,DVD还有屏幕等对象,每个对象中都提供不同的操作该对象的方法。如果使用子对象去实现看电影的操作这样涉及到的对象很多,而且和子对象完全耦合在一起了。所以需要使用外观模式进行子对象的封装处理,我们调用就调用外观模式中提供的统一方法,实现和子系统中的解耦操作。


/**
 * DVD
 *
 * @author Colin
 * @create 2018-05-10
 **/
public class DvdPlayer {
    public void on(){
        System.out.println("打开DVD");
    }

    public void off(){
        System.out.println("关闭DVD");
    }
}


/**
 * 灯具
 *
 * @author Colin
 * @create 2018-05-10
 **/
public class Light {

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

    public void off(){
        System.out.println("关灯");
    }
}

/**
 * 屏幕
 *
 * @author Colin
 * @create 2018-05-10
 **/
public class Screen {

    public void on(){
        System.out.println("打开屏幕");

    }

    public void off(){
        System.out.println("关闭屏幕");
    }
}


/**
 * 家庭影院
 *
 * @author Colin
 * @create 2018-05-10
 **/
public class HomeMovieFacade {

    private DvdPlayer dvdPlayer;
    private Light light;
    private Screen screen;

    public HomeMovieFacade(DvdPlayer dvdPlayer,Light light,Screen screen){
        this.dvdPlayer=dvdPlayer;
        this.light=light;
        this.screen=screen;
    }

    public void watchMovie(){

        light.off();
        dvdPlayer.on();
        screen.on();
    }
}

总结

  • 外观模式将客户从复杂的子系统中解耦出来
  • 实现一个外观需要将子系统组合进外观中,然后将工作委托给子系统执行

    涉及原则

  • 最少知识原则,不要让太多的类耦合在一起,免得修改其中一部分会影响到其他部分。

以上是关于外观模式的主要内容,如果未能解决你的问题,请参考以下文章

外观模式

设计模式之外观模式

java设计模式-外观模式

2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用

外观模式(Facade Pattern)

设计模式:外观(Facade)模式