外观模式:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。是我脑子笨还是什么原因,看定义总是会被绕进去,还好有外观的结构图还有例子比较容易理解。
上代码:
代码中股票、国债、实体产权是具体的子系统,外观模式为他们提供一个Fund外观类——界面、接口,该类了解所有子系统的方法和属性,因此能够将客户的请求传递给适当的子系统。
class Program
{
//客户端,用户不需要了解股票等具体子类
//买了基金之后不需要关心集体操作
//由基金类将客户请求代理给适当的子系统对象
static void Main(string[] args)
{
Fund jj = new Fund();
jj.BuyFundd();
jj.SellFund();
Console.Read();
}
}
#region 具体子类
//子类中无父类的信息,没有引用父类
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 NationalDebt1
{
public void Sell()
{
Console.WriteLine("国债3卖出");
}
public void Buy()
{
Console.WriteLine("国债3买入");
}
}
class Realty1
{
public void Sell()
{
Console.WriteLine("舍弃工厂");
}
public void Buy()
{
Console.WriteLine("拥有工厂");
}
}
#endregion
/// <summary>
/// 基金类,需要了解所有股票、国债
/// 的方法、属性
/// </summary>
class Fund
{
Stock1 ST1;
Stock2 ST2;
NationalDebt1 ND;
Realty1 RY;
public Fund ()
{
ST1 = new Stock1();
ST2 = new Stock2();
ND = new NationalDebt1();
RY = new Realty1();
}
public void BuyFundd()
{
ST1.Buy();
ST2.Buy();
ND.Buy();
RY.Buy();
}
public void SellFund()
{
ST1.Sell();
ST2.Sell();
ND.Sell();
RY.Sell();
}
}
应用场合:
1、设计初期,有意识将不同的两个层分离,层与层间建立外观Facade,为复制子系统提供简单接口,降低耦合度。
2、开发阶段,新增、修改内容增加子系统的复杂度,增加外观Facade提供简单接口,减少相互间的依赖。
3、维护遗留的大型含有重要功能的系统时,为新系统增加一个外观Facade类,为遗留代码提供清晰的接口,让新系统与Facade交互,Facade与遗留代码交互。
结构图:
一张图胜过千言万语。
thanks for your time。