• 11【结构型】浅谈 外观模式 理解与使用~


    外观模式

    外观模式,用于隐藏系统的复杂性,并且向客户端提供一个可以操作访问系统的接口,来隐藏系统的复杂性。

    举个例子:


    好比系统就是我们手里面的一台电脑,我们都知道,电脑内部很复杂,但是我们操作的时候,就好比只需要摁一下开机按钮,电脑就会启动起来,

    我们无需关注电脑是如何启动起来的。这就好比一个复杂的系统,通过一个电源键的操作,使得整个复杂的过程变得简化。客户端只需要关注这个简化的

    接口(电源键)即可操作复杂系统。

    用途:降低复杂系统的内部复杂联系,整个系统只需要提供一个简便的方法即可(电源键启动方法)

    关键:要处理好客户端和复杂系统之间的一层层的调用关系。好比首先要启动CPU,然后再给内存供电,最后读取硬盘数据 这种顺序要处理好!!

    优点:减少系统依赖性、提高整个系统的灵活性、

    使用:一个复杂的模块为子系统提供访问模块

    代码理解:

    这里建立一个模型:电脑的模型,我们来模拟一个电脑的启动和关闭过程,按下电源键:CPU供电,然后给内存供电,最后读取硬盘数据,显示开机画面等

    断电后,依次关闭以上开启的内容

    电脑最基本的两个方法,启动和关闭方法。

    public interface Computer {
        //启动方法
        void start();
        //结束方法
        void end();
    }

    这里分别建立三个类来实现电脑的接口,有CPU/内存/硬盘 这里只是举例一个CPU的启动和关闭过程,其他的就不一一举例

    public class CPU implements Computer {
    
        @Override
        public void start() {
            System.out.println("CPU供电完成");
        }
    
        @Override
        public void end() {
            System.out.println("CPU断电关闭");
        }
    }

    这里提供的一个客户端,就好比一个电源按钮,实例化一个电源键,创建好需要的对象信息,按下电源键执行open方法,按照顺序构建

    public class Face {
        
        //实例化后的CPU 内存与硬盘
        private Computer cpu;
    
        private Computer memory;
    
        private Computer hdd;
    
        //开机构建
        public Face(){
    
            //创建CPU/内存/硬盘
            cpu = new CPU();
            memory = new Memory();
            hdd = new HDD();
        }
    
        //启动电脑
        public void open(){
    
            cpu.start();
            memory.start();
            hdd.start();
        }
        //关闭电脑
        public void close(){
            cpu.end();
            memory.end();
            hdd.end();
        }
    }

    //进行一个简单的测试

        public static void main(String[] args) {
            
            //创建客户端,实例化电源按钮
            Face face = new Face();
            //电源按钮启动
            face.open();
            System.out.println("----------------------");
            face.close();
        }

    效果展示:

    这里就简单的模拟一个电脑启动的方式来理解这个外观模式的使用:

    最好的理解方法就是参考生活中的常识去理解,这样才更加深刻理解,更好的学会去使用它;

    参考:https://www.runoob.com/design-pattern/facade-pattern.html

    码云:https://gitee.com/mrc1999/23GOF

  • 相关阅读:
    DFS染色解决区域分块问题UVALive 6663
    栈之逆波兰
    线段树总结
    区间合并问题
    线段树的开闭区间问题
    离散化
    线段树的学习过程
    BFS的小结
    状态数组哪家强
    卡特兰数。
  • 原文地址:https://www.cnblogs.com/ChromeT/p/11735396.html
Copyright © 2020-2023  润新知