外观模式(Facde):属于结构型模式,又称作门面模式。为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
class SubSystemOne { public void MethodOne() { Console.WriteLine("子系统方法一"); } } class SubSystemTwo { public void MethodTwo() { Console.WriteLine("子系统方法二"); } } class SubSystemThree { public void MethodThree() { Console.WriteLine("子系统方法三"); } } class SubSystemFour { public void MethodFour() { Console.WriteLine("子系统方法四"); } }
class Facde { SubSystemOne one; SubSystemTwo two; SubSystemThree three; SubSystemFour four; public Facade() { one =new SubSystemOne(); two=new SubSystemTwo(); three=new SubSystemThree(); four=new SubSystemFour(); } public void MethodA() { Console.WriteLine("\n方法组A()--- "); one.MethodOne(); two.MethodTwo(); three.MethodThree(); four.MethodFour(); } public void MethodB() { Console.WriteLine("\n方法组B()--- "); three.MethodThree(); four.MethodFour(); } }
static void Main(string[] args) { Facde facade =new Facde(); facade.MethodA(); facade.MethodB(); Console.Read(); }
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(); } }
//股票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买入"); } } //国债 class NationalDebt1 { //卖国债 public void Sell() { Console.WriteLine("国债卖出"); } //买股票 public void Buy() { Console.WriteLine("国债买入"); } } //房地产1 class Realty1 { //卖股票 public void Sell() { Console.WriteLine("房地产1卖出"); } //买股票 public void Buy() { Console.WriteLine("房地产1买入"); } }
static void Main(string[] args) { Fund jijin = new Fund(); //基金购买 jijin.BuyFund(); //基金赎回 Console.Read(); }
这样客户就不需要直接与股票打交道 了,而是与专业基金经理打交道,降低了客户与股票的耦合度。客户只需要关注基金的涨幅即可,而不需要观众N多的股票。
a) 为一个复杂子系统提供一个简单接口.
b) 提高子系统的独立性.
c) 在层次化结构中,可以使用Facade模式定义系统中每一层的入口。