zoukankan      html  css  js  c++  java
  • 设计模式之外观模式(九)

    设计模式之外观模式

    一、引言

      当一个复杂的系统由多个复杂的子系统构成,然后客户端调用会调用多个子系统。这时,客户端会和多个子系统耦合在一起,当子系统需要扩展或者改变时,客户端也要随之改变,我们可以使用外观模式将客户端和子系统进行解耦。

    二、介绍 

    意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

    主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

    何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。

    如何解决:客户端不与系统耦合,外观类与系统耦合。

    关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

    应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。

    优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

    缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

    使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

    注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口。

    三、图解 

     

     

     

    四、代码展示

     代码简介: 复杂的电脑系统包括三个子系统:CPU系统,风扇系统,显示器系统。 每次用户去使用电脑的时候不可能让用户单独去打开CPU的开关,风扇的开关和显示器的开关,我们使用外观模式,提供了一个更高级的接口,即Computer类型,computer中有这三个子系统,用户只需打开电脑的开关运行电脑就可以了。

    namespace Facade
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Console.WriteLine("Hello World!");
    
                Computer c = new Computer();
                c.StartWork();
            }
        }
    }
    主程序
    namespace Facade
    {
        public class Computer
        {
            public CPU cpu = new CPU();
            public FengShan fengShan = new FengShan();
            public Display display = new Display();
    
            public void StartWork() {
    
                if (cpu.StartWork())
                {
                    if (fengShan.StartWork())
                    {
                        if (display.StartWork())
                        {
                            Console.WriteLine("电脑开始工作。。。");
                            Console.ReadKey();
                        }
                        else
                        {
                            Console.WriteLine("显示器启动失败");
                        }
                    }
                    else
                    {
                        Console.WriteLine("风扇启动失败");
                    }
                }
                else
                {
                    Console.WriteLine("CPU启动失败");
                }
            }
        }
    }
    Computer
    namespace Facade
    {
        public  class CPU
        {
            public bool StartWork() {
                Console.WriteLine("Cpu开始工作。。。");
                return true;
            }
        }
    }
    CPU
    namespace Facade
    {
        public class FengShan
        {
            public bool StartWork()
            {
                Console.WriteLine("风扇开始工作。。。");
                return true;
            }
        }
    }
    FengShan
    namespace Facade
    {
        public class Display
        {
            public bool StartWork()
            {
                Console.WriteLine("显示器开始工作。。。");
                return true;
            }
        }
    }
    Display

    运行结果:

  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/zkhbalance/p/9426016.html
Copyright © 2011-2022 走看看