美文网首页程序员技术文
设计模式系列之八外观模式

设计模式系列之八外观模式

作者: 梦中人在梦中 | 来源:发表于2016-12-17 16:57 被阅读64次

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

下面通过一个图来说明外观模式的使用,此图来自于《Head First设计模式》一书。

外观模式

从上图中可以看到,通过一个统一的Facade来调用复杂的子系统的类。

按我的理解,外观模式实际上就是抽取一些公共的业务逻辑封装起来,以统一的方法来调用。使代码结构更加清晰,易于维护,避免流水代码。

举一个简单的例子,下班回家三件事:开门、开灯、开电视。上班出门要干三件事:关电视、关灯、关门。

流水线似的写法

public class Door {
    //开门
    public void open(){

    }
    //关门
    public void close(){

    }
}
public class Light {
    //开灯
    public void on(){

    }
    //关灯
    public void off(){

    }
}
public class TV {
    //开电视
    public void on(){

    }
    //关电视
    public void off(){

    }
}
public class TestOld {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Light light = new Light();
        Door door   = new Door();
        TV tv       = new TV();
        //回家的业务逻辑
        door.open();
        light.on();
        tv.on();
        //出门的业务逻辑
        tv.off();
        light.off();
        door.close();
    }
}

使用外观模式进行封装

//外观模式的实现
public class Facade {
    TV tv;
    Light light;
    Door door;
    public Facade(Door door,Light light,TV tv){
        this.tv = tv;
        this.light = light;
        this.door = door;
    }
    //封装回家的业务逻辑
    public void goHome(){
        door.open();
        light.on();
        tv.on();
    }
    //封装出门的业务逻辑
    public void goOut(){
        tv.off();
        light.off();
        door.close();
    }
}
public class TestNew {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Light light = new Light();
        Door door   = new Door();
        TV tv       = new TV();
        Facade facade = new Facade(door,light,tv);
        /* 1.对于后期的运维人员,只需要知道这两个方法要干的事情即可,而不需要点开看里面的具体实现逻辑
         * 2.如果是流水线的写法,则需要完完整整的把所有逻辑从头看到尾
         * 3.这样的写法让代码结构更清晰
         * 4.如果业务逻辑有变更,只需要修改对应的封装即可,而不需要去修改散落着各处的代码
         * */
        //回家逻辑
        facade.goHome();
        //出门逻辑
        facade.goOut();
    }
}

上一篇:<a href="http://muchstudy.com/2016/12/14/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E7%B3%BB%E5%88%97%E4%B9%8B%E4%B8%83%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F/">设计模式系列之七适配器模式</a>

相关文章

网友评论

    本文标题:设计模式系列之八外观模式

    本文链接:https://www.haomeiwen.com/subject/wkzomttx.html