zoukankan      html  css  js  c++  java
  • 外观模式(10)

    本篇博文,我们来说一下外观模式。

    一、案例

    我们大家都买过股票吗?即使没有买过股票的,也大体知道炒股是什么回事,说白了就是股票的买卖。

    下面我们用简单的控制台应用程序来模拟一下股票买卖的场景。代码如下:

     1     //股票1
     2     class Stock1
     3     {
     4         public void Sall()
     5         {
     6             Console.WriteLine("股票1卖出");
     7         }
     8 
     9         public void Buy()
    10         {
    11             Console.WriteLine("股票1买入");
    12         }
    13     }
    14     //股票2
    15     class Stock2
    16     {
    17         public void Sall()
    18         {
    19             Console.WriteLine("股票2卖出");
    20         }
    21 
    22         public void Buy()
    23         {
    24             Console.WriteLine("股票2买入");
    25         }
    26 
    27     }
    28     //股票3
    29     class Stock3
    30     {
    31         public void Sall()
    32         {
    33             Console.WriteLine("股票3卖出");
    34         }
    35 
    36         public void Buy()
    37         {
    38             Console.WriteLine("股票3买入");
    39         }
    40     }
    41     //国债1
    42     class NationalDebt1
    43     {
    44         public void Sall()
    45         {
    46             Console.WriteLine("国债1卖出");
    47         }
    48 
    49         public void Buy()
    50         {
    51             Console.WriteLine("国债1买入");
    52         }
    53     }
    54     //房地产1
    55     class Realty1
    56     {
    57         public void Sall()
    58         {
    59             Console.WriteLine("房地产1卖出");
    60         }
    61 
    62         public void Buy()
    63         {
    64             Console.WriteLine("房地产1买入");
    65         }
    66     }

    客户端:

     1         public static void Main()
     2         {
     3             Stock1 gu1 = new Stock1();
     4             Stock2 gu2 = new Stock2();
     5             Stock3 gu3 = new Stock3();
     6             NationalDebt1 nd1 = new NationalDebt1();
     7             Realty1 rt1 = new Realty1();
     8 
     9             gu1.Buy();
    10             gu2.Buy();
    11             gu3.Buy();
    12             nd1.Buy();
    13             rt1.Buy();
    14 
    15             gu1.Sall();
    16             gu2.Sall();
    17             gu3.Sall();
    18             nd1.Sall();
    19             rt1.Sall();
    20             Console.Read();
    21         }

    二、演绎

    嗯,然而,对于不了解股票的朋友来说,面对这么多支股票,他们也不知道改如何买卖这些股票,所以,他们通常会选择购买基金,基金相对股票风险小一些。基金是什么呢?(怎么说呢,我比较笨一些,不知道怎么解释,大家可以百度一下 基金和股票的区别,哈哈)。

    基金包含多只股票,好,下面我们来改写一下这个案例,我们现在不买卖股票了,我们现在来买卖基金。

    好,我们新加一个基金类

     1     /// <summary>
     2     /// 基金类
     3     /// </summary>
     4     class Fund
     5     {
     6         private Stock1 gu1;
     7         private Stock2 gu2;
     8         private Stock3 gu3;
     9         private NationalDebt1 nd1;
    10         private Realty1 rt1;
    11 
    12         public Fund()
    13         {
    14             gu1 = new Stock1();
    15             gu2 = new Stock2();
    16             gu3 = new Stock3();
    17             nd1 = new NationalDebt1();
    18             rt1 = new Realty1();
    19         }
    20 
    21         public void BuyFund()
    22         {
    23             gu1.Buy();
    24             gu2.Buy();
    25             gu3.Buy();
    26             nd1.Buy();
    27             rt1.Buy();
    28         }
    29 
    30         public void SellFund()
    31         {
    32             gu1.Sall();
    33             gu2.Sall();
    34             gu3.Sall();
    35             nd1.Sall();
    36             rt1.Sall();
    37         }
    38     }

    那么,客户端这么写了:

     1         public static void Main()
     2         {
     3             //此时,用户不需要了解股票,甚至可以对股票一无所知,买完基金回家睡觉,
     4             //过一段时间,再赎回就可以大把数钱玩了。
     5             Fund jijin = new Fund();
     6             //购买基金
     7             jijin.BuyFund();
     8             //基金赎回
     9             jijin.SellFund();
    10             Console.Read();
    11         }

    以上这种写法,就差不多是外观模式的基本代码了。好,下面我们来正式给大家说一下什么是外观模式。

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

    下面我们来正式写一下外观模式的代码:

     有很多的子系统:

     1     class SubSystemOne
     2     {
     3         public void MethodOne()
     4         {
     5             Console.WriteLine("子系统中的方法1");
     6         }
     7     }
     8 
     9     class SubSystemTwo
    10     {
    11         public void MethodTwo()
    12         {
    13             Console.WriteLine("子系统中的方法2");
    14         }
    15     }
    16 
    17     class SubSystemThree
    18     {
    19         public void MethodThree()
    20         {
    21             Console.WriteLine("子系统中的方法3");
    22         }
    23     }
    24 
    25     class SubSystemFour
    26     {
    27         public void MethodFour()
    28         {
    29             Console.WriteLine("子系统中的方法4");
    30         }
    31     }

    有一个外观类

     1     class Facade
     2     {
     3         private SubSystemOne one;
     4         private SubSystemTwo two;
     5         private SubSystemThree three;
     6         private SubSystemFour four;
     7 
     8         public Facade()
     9         {
    10             one = new SubSystemOne();
    11             two = new SubSystemTwo();
    12             three = new SubSystemThree();
    13             four = new SubSystemFour();
    14         }
    15 
    16         public void MethodA()
    17         {
    18             Console.WriteLine("
    方法组A()--------");
    19             one.MethodOne();
    20             two.MethodTwo();
    21             four.MethodFour();
    22         }
    23 
    24         public void MethodB()
    25         {
    26             Console.WriteLine("
    方法组B()---------");
    27             two.MethodTwo();
    28             three.MethodThree();
    29         }
    30     }

    客户端调用:

    1         public static void Main()
    2         {
    3             Facade facade = new Facade();
    4             facade.MethodA();
    5             facade.MethodB();
    6             Console.ReadKey();
    7         }

    以上,便是外观模式的代码了。

    外观模式很好的体现了依赖倒转原则和迪米特法则,所以,外观模式是一种非常常用的设计模式。

    ok,小伙伴们慢慢体会一下吧。今天就到这里了。下篇博文,我们讲解 建造者模式


    本系列将持续更新,喜欢的小伙伴可以点一下关注和推荐,谢谢大家的支持。

  • 相关阅读:
    判断UpLoader是否安装了Flash
    事务
    AMQP
    分布式领域CAP理论
    查看数据库所有表的所有字段
    拼分页方法
    Website English Comments
    SQL语句执行时间测试
    一般处理程序返回json
    MVC Action返回Json
  • 原文地址:https://www.cnblogs.com/xiaomowang/p/6306485.html
Copyright © 2011-2022 走看看