今天学习了外观模式,感觉收获颇大,所以赶紧做个总结,为大家分享一下!
当提到“外观”两个字的时候,脑海中想象到的是一个东西的表面,内部构造是看不到的,那么这个外观模式跟现实生活中是差不多的,个人认为的。简单的来说就是客户端访问代码的时候直接访问的是一个中间者,至于中间者的背后是什么样的,不必知道,但是得到的效果是一样的,只是有一个中间者来和客户交流。
好处:增加外观,可以提供一个简单的接口,减少类与类之间的依赖。如下图:
左部分是客户直接跟类沟通,右边是客户跟一个中间者沟通,这样从表面上看起来是非常清晰和详细的。
就比如股票和基金一样,把股票归为基金的一种,直接购买基金的层面会多一些。所以基金可以在这里充当一个中间者。
首先得把基金下面的小类列出来
class Stock1 { //卖股票 public void Sell() { Console.WriteLine("股票1卖出"); } //买股票 public void Buy() { Console.WriteLine("股票1买入"); } } class Stock2 { public void Sell() { Console.WriteLine("股票2卖出"); } public void buy() { Console.WriteLine("股票2买入"); } } class Stock3 { public void Sell() { Console.WriteLine("股票3卖出"); } public void buy() { Console.WriteLine("股票2买入"); } } //国债1 class NationalDebt1 { public void Sell() { Console.WriteLine("国债1卖出"); } public void Buy() { Console.WriteLine("国债1买入"); } } class Realty1 { public void Sell() { Console.WriteLine("房地产1卖出"); } public void Buy() { Console.WriteLine("房地产1买入"); } }
然后再有一个中间者“基金类”,然后基金可以买卖,这就增加了买卖两者方法,在基金类种要把所有的股票等类型,放到基金中
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 ButFund() { gu1.Buy(); gu2.buy(); gu3.buy(); nd1.Buy(); rt1.Buy(); } public void SellFund() { gu1.Sell(); gu2.Sell(); gu3.Sell(); nd1.Sell(); rt1.Sell(); } }
在主函数中直接实例化基金即可
static void Main(string[] args) { Fund jijin = new Fund(); //基金购买 jijin.ButFund(); //基金赎回 jijin.SellFund(); Console.Read(); }
从主函数看减少而代码的冗余,而且比较清晰,想要达到的目的也不会少