zoukankan      html  css  js  c++  java
  • 结构型模式之外观模式

     
    一.定义
      外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。
     
    二、模式结构成员构成

    • Facade: 外观角色

    • SubSystem:子系统角色

    三.代码示例
     1 /**
     2  * SubSystem
     3  * 内部子系统角色
     4  */
     5 public class CPU {
     6     public void freeze() {
     7     }
     8 
     9     public void jump(long position) {
    10     }
    11 
    12     public void execute() {
    13     }
    14 }
    15 
    16 /**
    17  * SubSystem
    18  * 内部子系统
    19  */
    20 public class Memory {
    21     public void load(long position, byte[] data) {
    22 
    23     }
    24 }
    25 
    26 /**
    27  * SubSystem
    28  * 内部子系统角色
    29  */
    30 public class HardDrive {
    31     public byte[] read(long lba, int size) {
    32         return null;
    33     }
    34 }
    35 
    36 /**
    37  * Facade
    38  * 外观角色角色
    39  */
    40 public class Computer {
    41 
    42     //统一管理内部子系统
    43     private CPU cpu = new CPU();
    44     private HardDrive hardDrive = new HardDrive();
    45     private Memory memory = new Memory();
    46 
    47     long BOOT_ADDRESS;
    48     long BOOT_SECTOR;
    49     int SECTOR_SIZE;
    50 
    51     public void startComputer() {
    52         cpu.freeze();
    53         memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
    54         cpu.jump(BOOT_ADDRESS);
    55         cpu.execute();
    56     }
    57 }
    58 
    59 /**
    60  * client
    61  */
    62 public class Client {
    63     public static void main(String[] args) {
    64         Computer facade = new Computer();
    65         facade.startComputer();
    66     }
    67 }
    View Code
     
    四.优点和缺点分析
    优点:
    >对客户屏蔽了内部子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。
    >实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。
    >只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类
     
    缺点:
    >在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。
     
    五.应用场景
    >当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。
    >通过引入外观模式,将客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。
    >在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。
     
  • 相关阅读:
    Mybaits的10种通用的写法
    你清楚这几个Spring常用注解吗?
    面试时如何介绍自己
    Spring加载加密的配置文件
    MySQL主从复制
    CentOS7安装和配置MySQL
    Druid监控页面配置与使用
    Shiro配置URL过滤
    基于注解的Dubbo服务配置
    Java中常用的加密算法小结
  • 原文地址:https://www.cnblogs.com/756623607-zhang/p/9227030.html
Copyright © 2011-2022 走看看