学习设计模式——外观模式

文章参考于《设计模式的艺术之道》——刘伟

定义:外部与一个子系统的通信通过一个统一的外观角色进行。就相当于是你想上网,走去网吧,你不需要自带鼠标键盘,和网线,主机等,你只要交钱就可以享受上网啦,至于组装其他的不需要你管。

所以,外部模式就相当于是一个服务类,整合了你想要的东西,方便你的调用,而不需要一个一个的去调用,减低用户的使用成本。

这里写图片描述

Facade : 客户调用的外观类,它知道子系统的功能和责任,将客户请求委派到相应的子系统,让子系统对象处理。

SubSystem : 子系统,实现外观类指派的任务。注意,外观角色对于子系统来说,知识另外一个客户端,子系统中没有外观类的引用。

简单代码样例

//客户端,直接调用外观类,而不需要调用整个变身过程的所有函数。
class Main{
    public static void main(String[] args){
        ShapeShift xmx = new ShapeShift();
        xmx.transform();
    }
}
//外观类
class ShapeShift{
    private Music music;
    private Dance dance;
    private Cloth cloth;
    //巴啦啦小魔仙变身
    public ShapeShift(){
        music = new Music();  //音乐起
        dance = new Dance();  //跳舞
        cloth = new Cloth();  //变装
    }

    public void transform(){
        music.musicUp();
        dance.dance();
        cloth.changeCloth();
    }
}

class Music {
    public void musicUp() {
        System.out.println("背景音乐起");
    }
}

class Dance {
    public void dance(){
        System.out.println("跳舞...");
    }
}

class Cloth {
    public void changeCloth(){
        System.out.println("换装");
    }
}

适用场景

1、构建有层次结构的子系统,用外观类来为每个子系统提供每一层的入口,层之间不联系,通过外观类通信,减少子系统之间的依懒性。
2、客户端和多个子系统存在很大的依赖性,引入外观类将客户端与子系统解耦。
3、为一系列的复杂的子系统提供简单的入口时。

注意:子系统可以是一个类,一个功能模块,一个完整的小系统

猜你喜欢

转载自blog.csdn.net/ycjlxdlb/article/details/80097197
今日推荐