外观模式-Facade

来源:互联网 发布:换头型软件 编辑:程序博客网 时间:2024/06/10 07:07

  • 前言
  • UML
  • 题目
  • 源码下载地址
  • 代码
    • 基础的类
    • 外观类
    • 客户端测试
  • 运行结果


前言

Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易为使用。


UML

这里写图片描述


题目

请使用外观模式(Facade)模拟基金公司代买股票(Stock)、国债(NationalDebt)、房地产(Realty)的实例股票有两种,分别为高风险高收益股票和低风险低收益股票;股票、基金、国债都有2个方法:买入(buy)和卖出(sell)买入和卖出都用输出语句表示即可。(比如房地产的buy函数就输出:房地产买入;房地产的sell函数就输出:房地产卖出)基金公司为用户定制两种金融方案,分别是:一、高风险方案:包含高风险买入(BuyHighRiskFund)和高风险卖出(SellHighRiskFund)两方法调用的是高风险高收益股票和房地产对应的买,卖函数。一、低风险方案:包含低风险买入(BuyLowRiskFund)和低风险卖出(SellLowRiskFund)两方法。调用的是低风险低收益股票和国债对应的买,卖函数。

源码下载地址

GitHub:https://github.com/YEN-GitHub/PatternDemo/tree/master/src/StructuralPattern/FacadePattern


代码

基础的类

package StructuralPattern.FacadePattern.demo1;/** * Created by yangenneng on 2017-05-17 10:43 * Abstract:股票接口 */public interface Stock {    public void buy() ;    public void sell() ;}
package StructuralPattern.FacadePattern.demo1;/** * Created by yangenneng on 2017-05-17 10:46 * Abstract:高风险股票 */public class HighStock implements Stock{    @Override    public void buy() {        System.out.println("购买高风险股票");    }    @Override    public void sell() {        System.out.println("卖出高风险股票");    }}
package StructuralPattern.FacadePattern.demo1;/** * Created by yangenneng on 2017-05-17 10:46 * Abstract:高风险股票 */public class LowStock implements Stock{    @Override    public void buy() {        System.out.println("购买低风险股票");    }    @Override    public void sell() {        System.out.println("卖出低风险股票");    }}
package StructuralPattern.FacadePattern.demo1;/** * Created by yangenneng on 2017-05-17 10:48 * Abstract:国债 */public class NationalDebt  {    public void buy() {        System.out.println("购买国债");    }    public void sell() {        System.out.println("卖出国债");    }}
package StructuralPattern.FacadePattern.demo1;/** * Created by yangenneng on 2017-05-17 10:49 * Abstract:房地产 */public class Realty {    public void buy() {        System.out.println("购买房地产");    }    public void sell() {        System.out.println("卖出房地产");    }}

外观类

package StructuralPattern.FacadePattern.demo1;/** * Created by yangenneng on 2017-05-17 10:59 * Abstract:方案接口 */public interface Scheme {    public void buyFund();  //购买股票    public void sellFund(); //卖出股票}
package StructuralPattern.FacadePattern.demo1;import java.awt.image.ImageConsumer;/** * Created by yangenneng on 2017-05-17 10:53 * Abstract:高风险方案 */public class HighRiskFund implements Scheme {    protected Stock stock=new HighStock(); //高风险股票    private Realty realty=new Realty();  //房地产    @Override    public void buyFund() {        System.out.println("---------------购买高风险方案---------------");        stock.buy();        realty.buy();    }    @Override    public void sellFund() {        System.out.println("---------------卖出高风险方案---------------");        stock.sell();        realty.sell();    }}
package StructuralPattern.FacadePattern.demo1;/** * Created by yangenneng on 2017-05-17 10:57 * Abstract:低风险方案 */public class LowRiskFund implements Scheme {    protected Stock stock=new LowStock();  //低风险股票    protected NationalDebt nationalDebt=new NationalDebt();//国债    @Override    public void buyFund() {        System.out.println("---------------购买低风险方案---------------");        stock.buy();        nationalDebt.buy();    }    @Override    public void sellFund() {        System.out.println("---------------卖出低风险方案---------------");        stock.sell();        nationalDebt.sell();    }}

客户端测试

package StructuralPattern.FacadePattern.demo1;/** * Created by yangenneng on 2017-05-17 10:58 * Abstract:客户端测试代码 */public class Client {    public static void main(String[] args) {        Scheme scheme1=new HighRiskFund();        scheme1.buyFund();        scheme1.sellFund();        Scheme scheme2=new LowRiskFund();        scheme2.buyFund();        scheme2.sellFund();    }}

运行结果

这里写图片描述