外观模式(Facade)
定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
举例:新股民在没有足够了解证劵知识的情况下去做股票,很容易亏钱,毕竟其不具备股票的相关知识。然而,如果股民将资金交由专业的经理人进行管理,那就不需要参与股票的具体买和卖,完全由基金公司完成即可。
投资基金代码如下:
namespace _12._3_投资基金代码
{
//具体股票、国债、房产类
//股票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买入");
}
}
//基金类如下
//基金类,它需要了解所有的股票或其他投资方式的方法或属性,进行组合,以备外界调用。
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();
}
}
//客户端如下
//此时用户不需要了解股票,甚至可以对股票一无所知,买了基金就回家睡觉,一段时间后再赎回就可以大把数钱。参与股票的具体买卖都由基金公司完成。
class Program
{
static void Main(string[] args)
{
Fund jijin = new Fund();
//基金购买
jijin.BuyFund();
//基金赎回
jijin.SellFund();
Console.Read();
}
}
}
外观模式优点和缺点:
优点:
(1) 它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。
(2) 它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可。
(3) 一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。
缺点:
(1) 不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活 性。
(2) 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则。