今天学习了外观模式,感觉收获颇大,所以赶紧做个总结,为大家分享一下!

当提到“外观”两个字的时候,脑海中想象到的是一个东西的表面,内部构造是看不到的,那么这个外观模式跟现实生活中是差不多的,个人认为的。简单的来说就是客户端访问代码的时候直接访问的是一个中间者,至于中间者的背后是什么样的,不必知道,但是得到的效果是一样的,只是有一个中间者来和客户交流。

好处:增加外观,可以提供一个简单的接口,减少类与类之间的依赖。如下图:

外观模式_实例化

左部分是客户直接跟类沟通,右边是客户跟一个中间者沟通,这样从表面上看起来是非常清晰和详细的。

就比如股票和基金一样,把股票归为基金的一种,直接购买基金的层面会多一些。所以基金可以在这里充当一个中间者。

首先得把基金下面的小类列出来

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

从主函数看减少而代码的冗余,而且比较清晰,想要达到的目的也不会少