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类交互,提高复用性
    • 不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。 要以让系统有层次,利于维护为目的。
  • 相关阅读:
    截取UIImagePickerController的拍照事件
    Xcode报错:run custom shell script '[cp] copy pods resource
    XCode报错:Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1
    Mac环境下实现alias的重命名命令(永久生效)
    Swift 3.0在集合类数据结构上的一些新变化
    iOS几种简单有效的数组排序方法
    二分法查找、快速排序思想与实现
    iOS10 相册权限
    ios应用版本号设置规则
    iOS白名单设置
  • 原文地址:https://www.cnblogs.com/heliusKing/p/11966899.html
Copyright © 2011-2022 走看看