zoukankan      html  css  js  c++  java
  • 学习设计模式之外观模式

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

    类结构图
    在这里插入图片描述
    Facade
    外观类,知道哪些子系统类负责处理请求,将 Client的请求代理给适当的子系统对象。
    子系统角色
    实现具体的功能类,处理 Facade 对象指派的任务,该类中没有 Facade 的任何信息及引用。

    代码实现——举个栗子
    以炒股为例,一般散户的结构是一个人自己管理股票显得很复杂很累。如果找一个证券基金公司来管理那么就会方便的多,门面类就相当于这个证卷公司。
    在这里插入图片描述

    public class Stock1 {
        public void sell() {
            System.out.println("股票1卖出...");
        }
    
        public void buy() {
            System.out.println("股票1买入...");
        }
    }
    
    public class Stock2 {
        public void sell() {
            System.out.println("股票2卖出...");
        }
    
        public void buy() {
            System.out.println("股票2买入...");
        }
    }
    
    public class Stock3 {
        public void sell() {
            System.out.println("股票3卖出...");
        }
    
        public void buy() {
            System.out.println("股票3买入...");
        }
    }
    
    /**
     * 证券基金管理类
     */
    public class Fund {
        private Stock1 stock1;
        private Stock2 stock2;
        private Stock3 stock3;
    
        public Fund() {
            this.stock1 = new Stock1();
            this.stock2 = new Stock2();
            this.stock3 = new Stock3();
        }
    
        public void sellFund() {
            this.stock1.sell();
            this.stock2.sell();
            this.stock3.sell();
        }
    
        public void buyFund() {
            this.stock1.buy();
            this.stock2.buy();
            this.stock3.buy();
        }
    }
    

    客户端实现

    public class Client {
        public static void main(String[] args) {
            Fund f = new Fund();
            f.buyFund();
            f.sellFund();
        }
    }
    

    什么时候使用?

    1. 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
    2. 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
      在这里插入图片描述
    3. 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

    优点

    1. 实现了子系统与客户端之间的松耦合关系。
    2. 客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

    缺点

    1. 违背开闭原则 增加新的子系统可能需要修改外观类或客户端,违背了“开闭原则”。
    2. 外观类膨胀 外观类接口膨胀。由于子系统的接口都有外观类统一暴露,使得外观类的API接口过多。
    勿在浮沙筑高台 ——个人浅见,难免有误导之处,麻烦请指出。
  • 相关阅读:
    [转]基于S2SH框架的项目—antlr-2.7.2.jar包冲突问题
    输入法那没有小键盘的图标解决方法
    Chrome百度不显示中文字体
    转:数据库范式(1NF 2NF 3NF BCNF)
    转:海明纠错码
    奇阶魔方阵
    字符串的模式匹配
    红黑树
    排序算法总结
    关于面试总结9-接口测试面试题
  • 原文地址:https://www.cnblogs.com/liufeichn/p/11961648.html
Copyright © 2011-2022 走看看