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

    一.概念:

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

    应用场景#
    解决易用性问题,可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。
    解决性能问题,通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高 App 客户端的响应速度。API 聚合就是属于这种,也是属于外观模式的应用
    解决事务问题,通过门面模式可以方便的使得原本多个操作可以在一个事务内完成,如果中间某一个环节操作失败,可以回滚事务,撤销变更。

    二:

    Facade: 外观类,知道哪些子系统类负责处理请求,将请求代理给对应的子系统对象

    SubSystem Classes,实现子系统中的功能,处理 Facade 指派的任务,和 Facade 没有关联关系,没有继承,也不会引用 Facade

    public class SubSystem1 {
        public void MethodA()
        {
            System.out.println("MethodA in SubSystem1");
        }
        public void MethodB()
        {
            System.out.println("MethodB in SubSystem1");
        }
    }
    
    public class SubSystem2 {
        public void MethodA()
        {
            System.out.println("MethodA in SubSystem2");
        }
    
        public void MethodB()
        {
            System.out.println("MethodB in SubSystem2");
        }
    }
    
    public class SubSystem3 {
        public void MethodA()
        {
            System.out.println("MethodA in SubSystem3");
        }
    
        public void MethodB()
        {
            System.out.println("MethodB in SubSystem3");
        }
    }
    
    public class Facade {
        private  SubSystem1 _subSystem1 = new SubSystem1();
        private  SubSystem2 _subSystem2 = new SubSystem2();
        private  SubSystem3 _subSystem3 = new SubSystem3();
    
        public void MethodA()
        {
            _subSystem1.MethodA();
            _subSystem2.MethodA();
            _subSystem3.MethodA();
            
        }
    
        public void MethodB()
        {
            _subSystem1.MethodB();
            _subSystem2.MethodB();
            _subSystem3.MethodB();
            
        }
    
    }

    测试:

    1 public class main {
    2     public static void main(String arges[]) {
    3         Facade facade=new Facade();
    4         facade.MethodA();
    5         facade.MethodB();
    6         
    7     }

    MethodA in SubSystem1
    MethodA in SubSystem2
    MethodA in SubSystem3
    MethodB in SubSystem1
    MethodB in SubSystem2
    MethodB in SubSystem3

  • 相关阅读:
    Educational Codeforces Round 3 B
    Educational Codeforces Round 3 A
    BestCoder Round #66 1002
    Codeforces Round #335 (Div. 2) B
    BestCoder Round #66 1001
    Codeforces Round #335 (Div. 2) C
    Linux加载DTS设备节点的过程(以高通8974平台为例)
    高通APQ8074 spi 接口配置
    摩托罗拉SE4500 德州仪器TI Omap37xx/AM3715/DM3730/AM3530 wince6.0/Windows Mobile 6.5平台 二维软解调试记录及相关解释
    摩托罗拉SE4500 三星 S3C6410 Wince6.0平台软解码调试记录以及驱动相关问题解释
  • 原文地址:https://www.cnblogs.com/HYV587/p/13407984.html
Copyright © 2011-2022 走看看