尚硅谷设计模式学习(11)---[外观模式(facade)](代码片段)

小智RE0 小智RE0     2023-01-07     567

关键词:

🚀🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式

❤❤❤感谢尚硅谷❤❤❤

🕐🕑🕒最近开始计划学习一下设计模式了,加油!!!



📢情景引入

组建一个家庭影院:
DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的
功能,其过程为:

  • 直接用遥控器:统筹各设备开关
  • 开爆米花机
  • 放下屏幕
  • 开投影仪
  • 开音响
  • 开DVD,选dvd
  • 去拿爆米花
  • 调暗灯光
  • 播放
  • 观影结束后,关闭各种设备

传统思路,直接让 客户端 依赖(使用) 所有的设备对象;
这样的设计会使得客户端比较混乱,一时间难以兼顾维护多个设备.

要是給设备和客户端之间 “加一层”;
让中间这一层去管理设备;客户端只要和中间这层的对接即可;


🌈外观模式

也叫做 过程模式 ;
为子系统中的一组接口提供一个一致的界面;让客户端去调用这个界面即可

外观模式降低了客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展

系统需要进行分层设计时,可以考虑使用Facade模式

DVD播放器MyDVD

//DVD播放器
public class MyDVD 

    //单例模式之 饿汉式;
    private static MyDVD myDVD=new MyDVD();

    private MyDVD()

    

    public static MyDVD getInstance()
        return myDVD;
    

    //DVD的操作方法;
    public  void open()
        System.out.println("DVD开机");
    

    public void close()
        System.out.println("DVD关机");
    

    public void pause()
        System.out.println("DVD暂停");
    

    public void option()
        System.out.println("DVD使用操作");
    


爆米花设备Popcorn

//爆米花设备;
public class Popcorn 
    //用单例模式之 饿汉式;
    private Popcorn()

    

    private static Popcorn popcorn = new Popcorn();

    public static Popcorn getInstance()
        return popcorn;
    

    //爆米花设备操作;
    public void openPop()
        System.out.println("爆米花设备开机");
    

    public  void closePop()
        System.out.println("爆米花设备关机");
    

    public void pop()
        System.out.println("取爆米花");
    


灯光Lamplight

//灯光设备;
public class Lamplight 
    //使用单例模式之饿汉式;
    private Lamplight()

    

    private static Lamplight lamplight = new Lamplight();

    public static Lamplight getInstance()
        return lamplight;
    

    //管理灯光;
    public void openLamp()
        System.out.println("开灯");
    

    public void closeLamp()
        System.out.println("关灯");
    

管理多个设备的Facade

//外观类;
public class Facade 
    //管理多个设备;

    private MyDVD myDVD;
    private Popcorn popcorn;
    private Lamplight lamplight;

    public Facade() 
        super();
        this.myDVD = myDVD.getInstance();
        this.popcorn = popcorn.getInstance();
        this.lamplight = lamplight.getInstance();
    

    //观影前准备;
    public  void ready()
        //开 DVD,爆米花机,灯光;
        myDVD.open();
        popcorn.openPop();
        lamplight.openLamp();
        System.out.println("------");
    

    //观影中管理;
    public void  proceed()
        //取爆米花;管理DVD;
        popcorn.pop();
        myDVD.option();
        System.out.println("------");
    

    //观影后管理;
    public void finish()
        //关 DVD,爆米花机,灯光;
        myDVD.close();
        popcorn.closePop();
        lamplight.closeLamp();
    


模拟客户端Client

//模拟客户端;
public class Client 
    public static void main(String[] args) 

        //只管理 外观类;
        Facade facade = new Facade();
        facade.ready();
        facade.proceed();
        facade.finish();
    

测试执行

DVD开机
爆米花设备开机
开灯
------
取爆米花
DVD使用操作
------
DVD关机
爆米花设备关机
关灯

外观模式在Mybatis上的应用

Configuration

newMetaObject(Object object)

从这个forObject 方法 键入转到MetaObject;

在看看这个MetaObject类的构造方法;
诶,好像刚才案例中的, 管理其他设备的 Facade外观类.


尚硅谷设计模式学习---[设计模式七大原则](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!目录1.单一职责原则(SingleResponsibilityPrinciple)2.接口隔离原则(InterfaceSegregationPrinciple)3.依赖倒置原则(DependenceInversionPri... 查看详情

尚硅谷设计模式学习(23)---[策略模式(strategypattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!ml情景引入策略模式情景引入关于鸭子的问题鸭子有各种种类==>比如野鸭、北京鸭、水鸭,玩具鸭,冲鸭;…鸭... 查看详情

尚硅谷设计模式学习---[装饰者模式](代码片段)

...#x1f680;🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤🕒🕑🕐最近开始计划学习一下设计模式了,加油!!!目录📢情景引入⚡装饰者模式装饰者模式在Io中的应用📢情景引入... 查看详情

尚硅谷设计模式学习(17)---[迭代器模式(iteratorpattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!ml情景引入迭代器模式ArrayList集合中应用的迭代器模式情景引入这次的案例就是之前学习组合模式用到的案例=... 查看详情

尚硅谷设计模式学习---[单例模式](代码片段)

...#x1f680;🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤🛴🛴🛴最近开始计划学习一下设计模式了,加油!!!目录单例模式🛴1.饿汉式(静态常量版)🛴2.饿汉式(静态代码块版)&#x... 查看详情

尚硅谷设计模式学习---[桥接模式(bridge)](代码片段)

...#x1f680;🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤👀最近开始计划学习一下设计模式了,加油!!!目录📢情景引入⚡桥接模式桥接模式在JDBC中的应用📢情景引入现在市面上有各... 查看详情

尚硅谷设计模式学习(24)---[职责链模式(chainofresponsibilitypattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!ml情景引入职责链模式情景引入首先看一个案例学校OA系统的采购审批项目:需求是1采购员采购教学器材2如果... 查看详情

尚硅谷设计模式学习(10)---[组合模式(compositepattern)](代码片段)

...#x1f680;🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤🕐🕑🕒最近开始计划学习一下设计模式了,加油!!!目录📢情景引入🌈组合模式组合模式在HashMap中的应用📢情景... 查看详情

尚硅谷设计模式学习---[简单工厂模式,工厂方法模式,抽象工厂模式](代码片段)

...#x1f680;🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤🛴🛴🛴最近开始计划学习一下设计模式了,加油!!!目录🚗简单工厂模式🚗工厂方法模式🚗抽象工厂模式🚗... 查看详情

尚硅谷设计模式学习---[建造者模式(builderpattern)](代码片段)

...#x1f680;🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤🛴🛴🛴最近开始计划学习一下设计模式了,加油!!!目录📢情景引入🏡建造者模式使用建造者模式的jdk案例📢情... 查看详情

尚硅谷设计模式学习---[uml类图](代码片段)

...#x1f680;🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤🛴🛴🛴最近开始计划学习一下设计模式了,加油!!!目录UML类图类和类之间的依赖关系(Dependence)类与类之间的泛化关系(继承)(Ge... 查看详情

尚硅谷设计模式学习(22)---[状态模式(statepattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!状态模式来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为一一对应,状态之间... 查看详情

尚硅谷设计模式学习(14)---[模板方法模式(templatemethodpattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!目录模板方法模式模板方法模式中的钩子方法先看一个流程化豆浆的制作问题制作豆浆的流程选材—>添加配料—... 查看详情

尚硅谷设计模式学习(16)---[访问者模式(visitorpattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!由一个案例引入;在一个表演结束后,由男观众与女观众分别对参赛选手打分;通过;不通过;待定;若是按这种传统模式... 查看详情

尚硅谷设计模式学习(12)---[享元模式(flyweightpattern)](代码片段)

...#x1f680;🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤🕐🕑🕒最近开始计划学习一下设计模式了,加油!!!目录📢情景引入🌈享元模式享元模式在Integer中的应用📢情景... 查看详情

尚硅谷设计模式学习(15)---[命令模式(commandpattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!先看一个案例买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,只要在手机上安装app就可以控制对这些... 查看详情

尚硅谷设计模式学习(21)---[解释器模式(interpreterpattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!解释器模式给定语言(表达式),定义它的表示,并定义解释器,使用该解释器来解释语言中的句子(表达... 查看详情

尚硅谷设计模式学习(18)---[观察者模式(observerpattern)](代码片段)

尚硅谷传送门==>B站尚硅谷Java设计模式❤❤❤感谢尚硅谷❤❤❤最近开始计划学习一下设计模式了,加油!!!ml情景引入观察者模式情景引入天气预报项目需求:1气象站可以将每天测量到的温度,湿度,气压等等以公... 查看详情