外观模式

1. 牛市股票还会亏钱

A: 投资者买股票,做不好的原因和软件开放当中有什么类似?而投资者买基金,基金经理人用这些钱去做投资,然后大家获利,这其实体现什么?
B: 由于众多投资者对众多股票的联系太多,反而不利于操作,这在软件中称为耦合度过高。而有了基金以后,用户只和基金打交道,关系基金的上涨和下跌就可以,实际是基金经理人和股票打交道。

2. 股民炒股票

外观模式

class Program
{
    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();

        Console.Read();

    }
}

//股票1
class Stock1
{
    //卖股票
    public void Sell()
    {
        Console.WriteLine(" 股票1卖出");
    }

    //买股票
    public void Buy()
    {
        Console.WriteLine(" 股票1买入");
    }
}

//股票2
class Stock2
{
    //卖股票
    public void Sell()
    {
        Console.WriteLine(" 股票2卖出");
    }

    //买股票
    public void Buy()
    {
        Console.WriteLine(" 股票2买入");
    }
}

//股票3
class Stock3
{
    //卖股票
    public void Sell()
    {
        Console.WriteLine(" 股票3卖出");
    }

    //买股票
    public void Buy()
    {
        Console.WriteLine(" 股票3买入");
    }
}

//国债1
class NationalDebt1
{
    //卖国债
    public void Sell()
    {
        Console.WriteLine(" 国债1卖出");
    }

    //买国债
    public void Buy()
    {
        Console.WriteLine(" 国债1买入");
    }
}

//房地产1
class Realty1
{
    //卖房地产
    public void Sell()
    {
        Console.WriteLine(" 房产1卖出");
    }

    //买房地产
    public void Buy()
    {
        Console.WriteLine(" 房产1买入");
    }
}

3. 投资基金代码

外观模式

class Program
{
    static void Main(string[] args)
    {

        Fund jijin = new Fund();

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

        Console.Read();

    }
}

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();
    }

}

//股票1
class Stock1
{
    //卖股票
    public void Sell()
    {
        Console.WriteLine(" 股票1卖出");
    }

    //买股票
    public void Buy()
    {
        Console.WriteLine(" 股票1买入");
    }
}

//股票2
class Stock2
{
    //卖股票
    public void Sell()
    {
        Console.WriteLine(" 股票2卖出");
    }

    //买股票
    public void Buy()
    {
        Console.WriteLine(" 股票2买入");
    }
}

//股票3
class Stock3
{
    //卖股票
    public void Sell()
    {
        Console.WriteLine(" 股票3卖出");
    }

    //买股票
    public void Buy()
    {
        Console.WriteLine(" 股票3买入");
    }
}

//国债1
class NationalDebt1
{
    //卖国债
    public void Sell()
    {
        Console.WriteLine(" 国债1卖出");
    }

    //买国债
    public void Buy()
    {
        Console.WriteLine(" 国债1买入");
    }
}

//房地产1
class Realty1
{
    //卖房地产
    public void Sell()
    {
        Console.WriteLine(" 房产1卖出");
    }

    //买房地产
    public void Buy()
    {
        Console.WriteLine(" 房产1买入");
    }
}

4. 外观模式

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

外观模式

class Program
{
    static void Main(string[] args)
    {
        Facade facade = new Facade();

        facade.MethodA();
        facade.MethodB();

        Console.Read();

    }
}

class SubSystemOne
{
    public void MethodOne()
    {
        Console.WriteLine(" 子系统方法一");
    }
}

class SubSystemTwo
{
    public void MethodTwo()
    {
        Console.WriteLine(" 子系统方法二");
    }
}

class SubSystemThree
{
    public void MethodThree()
    {
        Console.WriteLine(" 子系统方法三");
    }
}

class SubSystemFour
{
    public void MethodFour()
    {
        Console.WriteLine(" 子系统方法四");
    }
}

class Facade
{
    SubSystemOne one;
    SubSystemTwo two;
    SubSystemThree three;
    SubSystemFour four;

    public Facade()
    {
        one = new SubSystemOne();
        two = new SubSystemTwo();
        three = new SubSystemThree();
        four = new SubSystemFour();
    }

    public void MethodA()
    {
        Console.WriteLine("\n方法组A() ---- ");
        one.MethodOne();
        two.MethodTwo();
        four.MethodFour();
    }

    public void MethodB()
    {
        Console.WriteLine("\n方法组B() ---- ");
        two.MethodTwo();
        three.MethodThree();
    }
}

5. 何时使用外观模式

  • 首先:在设计初期阶段,应该要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层,业务逻辑层和表示层的层与层之间建立外观模式,这样可以为复杂的子系统提供一个简单的接口,使得耦合性大大降低。
  • 其次:在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用它们的用户程序带来了使用上的困难,增加外观模式可以提供一个简单的接口,减少它们的依赖。
  • 第三:在维护一个遗留的大型系统时,肯能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开放必须要依赖它。此时用外观模式也是非常适合的。你可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

外观模式

相关推荐