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

    外观模式真是比单例模式还要简单了,毕竟单例还有八种写法

    简介

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

    实例探究

    假设一台电脑,它包含了 CPU(处理器),Memory(内存) ,Disk(硬盘)这几个部件,若想要启动电脑,则先后必须启动 CPU、Memory、Disk。关闭也是如此。

    但是实际上我们在电脑开/关机时根本不需要去操作这些组件,因为电脑已经帮我们都处理好了,并隐藏了这些东西。

    这些组件好比子系统角色,而电脑就是一个外观角色。


    SubSystem 子系统角色

    public class CPU {   
        public void startup(){  
            System.out.println("cpu startup!");  
        }  
        public void shutdown(){  
            System.out.println("cpu shutdown!");  
        }  
    }
     
    public class Memory {    
        public void startup(){  
            System.out.println("memory startup!");  
        }  
        public void shutdown(){  
            System.out.println("memory shutdown!");  
        }  
    } 
     
    public class Disk {  
        public void startup(){  
            System.out.println("disk startup!");  
        }  
        public void shutdown(){  
            System.out.println("disk shutdown!");  
        }  
    }
    

    Facade 外观角色

    public class Computer {  
        private CPU cpu;  
        private Memory memory;  
        private Disk disk;  
     
        public Computer(){  
            cpu = new CPU();  
            memory = new Memory();  
            disk = new Disk();  
        }  
     
        public void startup(){  
            System.out.println("start the computer!");  
            cpu.startup();  
            memory.startup();  
            disk.startup();  
            System.out.println("start computer finished!");  
        }  
     
        public void shutdown(){  
            System.out.println("begin to close the computer!");  
            cpu.shutdown();  
            memory.shutdown();  
            disk.shutdown();  
            System.out.println("computer closed!");  
        }  
    }
    

    具体调用如下:

    Computer computer = new Computer();  
    computer.startup();  
    computer.shutdown();
    

    小结:

    • 外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复 杂性
    • 外观模式对客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展
    • 通过合理的使用外观模式,可以帮我们更好的划分访问的层次
    • 当系统需要进行分层设计时,可以考虑使用Facade模式
    • 在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时 可以考虑为新系统开发一个Facade类,来提供遗留系统的比较清晰简单的接口, 让新系统与Facade类交互,提高复用性
    • 不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。 要以让系统有层次,利于维护为目的。
  • 相关阅读:
    Vagrant 扩大磁盘根目录
    阿里云 轻量应用服务器 vnc 远程桌面连接
    图片加水印C#源代码
    Asp.net网站Pdf加水印C#源代码
    [FAQ] uni-app 如何让页面不展示返回箭头图标
    [PHP] composer, PHP Fatal error: Allowed memory size of xx bytes exhausted
    [FE] uni-app 导航栏开发指南
    [FE] uni-app 动态改变 navigationBarTitleText 导航标题
    [FE] yarn, npm 切换镜像源
    [FAQ] Phpstorm 代码提示功能失效问题
  • 原文地址:https://www.cnblogs.com/heliusKing/p/11966899.html
Copyright © 2011-2022 走看看