您的位置:首页 > 编程语言

大话设计模式,让你的代码更完美7---外观模式

2017-05-11 13:52 218 查看
外观模式:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,该接口使得这一子系统更加容易使用。

这一模式是最最最常用到的和见到的设计模式。

需求:股民投资购买股票、期货、国债等等

菜鸟代码:

//股票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买入");
}
}
//国债1
class NationalDebt1
{
//卖国债
public void Sell()
{
Console.WriteLine(" 国债1卖出");
}

//买国债
public void Buy()
{
Console.WriteLine(" 国债1买入");
}
}
主函数:

static void Main(string[] args)
{

Stock1 gu1 = new Stock1();
Stock2 gu2 = new Stock2();
Stock3 gu3 = new Stock3();
NationalDebt1 nd1 = new NationalDebt1();
gu1.Buy();
gu2.Buy();
nd1.Buy();

gu1.Sell();
gu2.Sell();
nd1.Sell();
Console.Read();
}
}
老鸟代码:
class Fund
{
Stock1 gu1;
Stock2 gu2;
Stock3 gu3;
NationalDebt1 nd1;
Realty1 rt1;

public Fund()
{
gu1 = new Stock1();
gu2 = new Stock2();
nd1 = new NationalDebt1();
}

public void BuyFund()
{
gu1.Buy();
gu2.Buy();
nd1.Buy();
}

public void SellFund()
{
gu1.Sell();
gu2.Sell();
nd1.Sell();
}
}
主函数:

static void Main(string[] args)
{
Fund jijin = new Fund();
jijin.BuyFund();
jijin.SellFund();
Console.Read();

}


对于菜鸟来言,所有的行为都需要自己(主函数)去操作,买股票,卖股票,买期货,买期货等等。。。。

对于老鸟来言,既然都要操作完全可以进行包装一下,将各个投资都封装到Fund中,然后统一进行买卖操作,在这里股票投资可以用到之前的克隆哦,

也可以用到代理proxy(让基金管理人管理),也可以用到工厂模式。

暂且不提上述的操作,相对客户端来言,我不需要知道谁做的,怎么做的,我只需要看到你买卖就OK

所以相对于外观类fund类而言,他需要了解所有子系统(股票、期货)的方法和属性,然后进行组合,以备客户端调用。

结构图对比:





总结:在设计初期,要有意识的将不同的两个层分离(三层架构),在层与层之间建立外观模式,降低之间耦合性。

因为开发阶段子系统(买卖股票/期货)往往不断的进行重构演化而更加复杂,使用外观模式可以减少两者间依赖。

比如:主函数是A系统,股票买卖是C系统,期货买卖是D系统,如果之间互联,A,C,D系统的任意一方变更都会导致另一方代码的大量修改,

使用外观模式Facade则可以使各系统之间清晰交互,如图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息