[设计模式]外观模式

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接口好,还是直接调用模块好。

  

原文地址:https://www.cnblogs.com/jerry19890622/p/4212060.html