大话设计模式之外观模式总结-java实现

注:示例来自《大话设计模式》

现有股民炒股票的代码如下

股票1类

package Test11;

//股票1
public class Stock1 {

    //卖股票
    public void Sell()
    {
        System.out.println(" 股票1卖出");
    }

    //买股票
    public void Buy()
    {
        System.out.println(" 股票1买入");
    }

}

股票2类

package Test11;

//股票2
public class Stock2 {

    //卖股票
    public void Sell()
    {
        System.out.println(" 股票2卖出");
    }

    //买股票
    public void Buy()
    {
        System.out.println(" 股票2买入");
    }

}

股票3类

package Test11;

//股票3
public class Stock3 {

    //卖股票
    public void Sell()
    {
        System.out.println(" 股票3卖出");
    }

    //买股票
    public void Buy()
    {
        System.out.println(" 股票3买入");
    }

}

国债1类

package Test11;

//国债1
public class NationalDebt1 {

    //卖国债
    public void Sell()
    {
        System.out.println(" 国债1卖出");
    }

    //买国债
    public void Buy()
    {
        System.out.println(" 国债1买入");
    }

}

房地产1类

package Test11;

//房地产1
public class Realty1 {

    //卖房地产
    public void Sell()
    {
        System.out.println(" 房产1卖出");
    }

    //买房地产
    public void Buy()
    {
        System.out.println(" 房产1买入");
    }

}

客户端代码

package Test11;

public class Program {

    public static void main(String[] args) {

        Stock1 gu1 = new Stock1();
        Stock2 gu2 = new Stock2();
        Stock3 gu3 = new Stock3();
        NationalDebt1 nd1 = new NationalDebt1();
        Realty1 rt1 = new Realty1();

        gu1.Buy();
        gu2.Buy();
        gu3.Buy();
        nd1.Buy();
        rt1.Buy();

        gu1.Sell();
        gu2.Sell();
        gu3.Sell();
        nd1.Sell();
        rt1.Sell();

    }

}

上面的写法 用户需要了解股票 国债 房产情况 需要参与这些项目的具体买和卖 耦合性很高

下面我们增加一个基金类 它需要了解所有的股票或其他投资方式的方法或属性 进行组合 以备外界调用 代码如下

基金类

package Test11;

public class Fund {

    Stock1 gu1;
    Stock2 gu2;
    Stock3 gu3;
    NationalDebt1 nd1;
    Realty1 rt1;

    public Fund()
    {
        gu1 = new Stock1();
        gu2 = new Stock2();
        gu3 = new Stock3();
        nd1 = new NationalDebt1();
        rt1 = new Realty1();
    }

    public void BuyFund()
    {
        gu1.Buy();
        gu2.Buy();
        gu3.Buy();
        nd1.Buy();
        rt1.Buy();
    }

    public void SellFund()
    {
        gu1.Sell();
        gu2.Sell();
        gu3.Sell();
        nd1.Sell();
        rt1.Sell();
    }

}

客户端代码

package Test11;

public class Program {

    public static void main(String[] args) {

        Fund jijin = new Fund();

        jijin.BuyFund();
        jijin.SellFund();

    }

}

此时用户不需要了解股票 甚至可以对股票一无所知 买了基金就回家睡觉 一段时间后再赎回就可以大把数钱 参与股票的具体买卖都由基金公司完成 客户端代码非常简捷明了 这样的写法 基本就是外观模式的基本代码结构了

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

猜你喜欢

转载自blog.csdn.net/qq_26814945/article/details/82348376
今日推荐