zoukankan      html  css  js  c++  java
  • [设计模式]外观模式

    1. 定义

      为子系统中的一组接口提供了一个统一的界面,Facade模式定义了一个高层接口,这个接口使这个子系统接口更容易使用。

    2. 类图

       

    3. 示例
      

    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月9日 下午11:44:03
     */
    public interface Stock {
        /**
         * 卖出股票
         */
        void sell();
        
        /**
         * 买入股票
         */
        void buy();
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月9日 下午11:44:59
     */
    public class StockA implements Stock{
    
        @Override
        public void sell() {
            // TODO Auto-generated method stub
            System.out.println("卖出A股票");
        }
    
        @Override
        public void buy() {
            // TODO Auto-generated method stub
            System.out.println("买入A股票");
        }
    
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月9日 下午11:46:01
     */
    public class StockB implements Stock{
    
        @Override
        public void sell() {
            // TODO Auto-generated method stub
            System.out.println("卖出B股票");
        }
    
        @Override
        public void buy() {
            // TODO Auto-generated method stub
            System.out.println("买入B股票");
        }
    
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月9日 下午11:47:21
     */
    public class StockC implements Stock{
    
        @Override
        public void sell() {
            // TODO Auto-generated method stub
            System.out.println("卖出C股票");
        }
    
        @Override
        public void buy() {
            // TODO Auto-generated method stub
            System.out.println("买入C股票");
        }
    
    }
    
    package com.jerry.designpattern;
    /**
     * 外观类
     * 基金管理对应的股票
     * @author Jerry
     * @date 2015年1月9日 下午11:48:58
     */
    public class Fund {
        private Stock stockA;
        private Stock stockB;
        private Stock stockC;
        
        public Fund() {
            stockA = new StockA();
            stockB = new StockB();
            stockC = new StockC();
        }
        
        public void sell() {
            stockA.sell();
            stockB.sell();
            stockC.sell();
        }
        
        public void buy() {
            stockA.buy();
            stockB.buy();
            stockC.buy();
        }
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月9日 下午11:51:34
     */
    public class Client {
        public static void main(String[] args) {
            Fund fund = new Fund();
            fund.buy();
            fund.sell();
        }
    }

    4. 外观模式目的

      外观模式的目的不是给子系统增加的新功能接口,而是为了外部系统减少与子系统多个模块之间的交互,松散耦合,从而使外部系统更简单地使用子系统。

    5. 外观模式的优缺点

      外观模式的优点有

      a. 松散耦合

         b. 简单易用

         c. 更好的划分访问的层次

         外观模式的缺点是过多或者不合理的Facade也容易让人产生疑惑,到底是调Facade接口好,还是直接调用模块好。

      

  • 相关阅读:
    从架构演进的角度聊聊Spring Cloud都做了些什么?
    Spring Cloud在国内中小型公司能用起来吗?
    中小型互联网公司微服务实践-经验和教训
    springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
    springcloud(十一):服务网关Zuul高级篇
    springcloud(十):服务网关zuul初级篇
    springcloud(九):配置中心和消息总线(配置中心终结版)
    [讨论]C++编译/编辑器对OIer的必要功能
    [题解]How Many Tables HDU
    [干货]文件输入输出实例&Ptask的编写
  • 原文地址:https://www.cnblogs.com/jerry19890622/p/4212060.html
Copyright © 2011-2022 走看看