首页 > 其他分享 >Day10-设计模式之外观模式

Day10-设计模式之外观模式

时间:2023-07-05 21:22:49浏览次数:41  
标签:外观 void 模式 子系统 Day10 println 设计模式 public

设计模式之外观模式

一、引例

当我们现在想要在家通过投影仪看电影,其过程包括关灯,关闭窗帘,打开投影仪,这些家居都是独立的,就会有灯光开关、窗帘开关、投影仪开关。我们需要一步一步的去打开这些开关。如果用代码来实现,就可将灯光,窗帘等都看成一个对象,然后用Client端依次去调用这些对象的开关。

image-20230508211335135

然而,如果我们想直接看电影,这些操作过程我们都可以不需要,我们只需要一个小爱同学音箱,就可以把这些控制都集中再一个控制器上,我们想要看电影,只需要对小爱同学说进入观影模式就好了。所以之前的其他遥控器我们都可以不用关心了,我们只需要关注小爱同学就够了。这个时候我们就可以使用外观模式。

一、外观模式定义

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

外观模式可以理解为转换一群接口,客户只要调用这一个接口而不用调用多个接口才能达到目的,也不需关心这个子系统的内部细节。就是解决多个复杂接口带来的使用困难,起到简化用户操作的作用。

二、类图

image-20230507211704047

三、角色职责

外观角色(Facade):提供一个外观接口,对外,它提供一个易于客户端访问的接口,对内,它可以访问子系统中的所有功能。
子系统角色(SubSystem):子系统在整个系统中可以是一个或多个模块,每个模块都有若干类组成,这些类可能相互之间有着比较复杂的关系。
客户端(Client):外观接口调用测试者。

四、代码实现

灯光(子系统角色 SubSystem)

package day10_facade;

public class Light {
    private static Light light = new Light();

    public static Light getInstance() {
        return light;
    }

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

    public void turnOff() {
        System.out.println("关闭灯光...");
    }
}

窗帘(子系统角色 SubSystem)

package day10_facade;

public class Curtain {
    private static Curtain curtain = new Curtain();

    public static Curtain getInstance() {
        return curtain;
    }

    public void turnOn() {
        System.out.println("打开窗帘...");
    }

    public void turnOff() {
        System.out.println("关闭窗帘...");
    }
}

投影仪(子系统角色 SubSystem)

package day10_facade;

public class Screen {
    private static Screen screen = new Screen();

    public static Screen getInstance() {
        return screen;
    }

    public void turnOn() {
        System.out.println("打开投影仪...");
    }

    public void turnOff() {
        System.out.println("关闭投影仪...");
    }
}

小爱同学(外观角色 Facade)

package day10_facade;

public class XiaoaiClassmate {
    // 定义子系统对象
    private Light light;
    private Screen screen;
    private Curtain curtain;

    // 通过构造器根据单例模式获得子系统对象
    public XiaoaiClassmate() {
        this.light = Light.getInstance();
        this.screen = Screen.getInstance();
        this.curtain = Curtain.getInstance();
    }

    public void ready() {
        System.out.println("进入观影模式!");
        light.turnOff();
        curtain.turnOff();
        screen.turnOn();
    }

    public void exit() {
        System.out.println("退出观影模式!");
        light.turnOn();
        curtain.turnOn();
        screen.turnOff();
    }
}

测试类

package day10_facade;

public class FacadeTest {
    public static void main(String[] args) {
        XiaoaiClassmate xiaoaiClassmate = new XiaoaiClassmate();
        xiaoaiClassmate.ready();
        xiaoaiClassmate.exit();
    }
}

五、外观模式的应用场景

  1. 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问

六、总结

外观模式对客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展。对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。当系统需要进行分层设计时,可以考虑外观模式帮我们更好的划分访问的层次。

标签:外观,void,模式,子系统,Day10,println,设计模式,public
From: https://www.cnblogs.com/coolsheep/p/17529818.html

相关文章

  • Day11-设计模式之享元模式
    设计模式之享元模式一、意图在面向对象系统的设计和实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为每个字母创建一个对象的话,系统可......
  • Day13-设计模式之命令模式
    设计模式之命令模式一、引例我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。这些智能家电来自不同的厂家,我们不想对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电。要实现一个app控制所......
  • Day12-设计模式之备忘录模式
    设计模式之备忘录模式一、引例案例引入游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。传统的设计方案传统的方式的问题分析一个对象,就对应一个保存对象状态......
  • JAVA设计模式之建造者模式
    设计模式设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、......
  • DDD领域设计模式
    微服务设计为什么要选择DDD?其实最近几年微服务架构的思想越来越普及,很多企业已经或者尝试从单体架构向微服务架构转型。微服务也成为很多中大型企业实施中台战略的不二之选。但是在微服务实施过程中有很多问题,单体应用到底应该如何去拆分微服务?边界到底怎么划分?微服务这个微字到......
  • 画出创建型设计模式的类图
    工厂方法FactoryMethod抽象工厂AbstractFactory单例模式Singleton建造者模式Builder原型模式Prototype......
  • JAVA设计模式之工厂模式
    设计模式设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、......
  • 画出结构型设计模式的类图
    装饰器模式Decorator适配器模式Adapter桥接模式Bridge组合模式Composite代理模式Proxy静态代理JDK动态代理享元模式Flyweight外观模式Facade ......
  • 设计模式 - 观察者模式以及存在的问题
    观察者模式其实可以称之为发布订阅模型的,因为里面有一个Observable 和一个Observer ,我这个Observable为可以观察到的意思,意思就是对外可见的,所以可以称之为发布者(publisher),其他的Observer可以称之为订阅者(subscriber),是对外不可见的.1.JDK的观察者模式 jav......
  • 设计模式之观察者模式
    定义定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式的UML类图及说明如上图(图片来源于《head_first设计模式》)所示,观察者的uml中主要有以下类1.主题Subject(接口)Subject对象带有绑定观察者到Client对象和从Cl......