外观就是门面,所以外观模式也叫作门面模式,当看到书上的门面模式的时候我就想家了,想念家里的门,家里的人儿们。
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。看完定义就来看看我理解的外观模式吧,大话书上是以客户买股票和买基金进而买股票对比的,下面看一下客户直接买股票的结构图:
看到这个图我们是不是想到了我们自己,我们就是客户,下面的股票就是各类物品,我们想要啥就根据自己的意愿去买,无需考虑太多,如果有人要求我们班集体每个人都去买,如果我们不懂得省力,而非得要自己尽心尽力看一个个买,我们是不是很费劲,费时间的呢,如果我们安排一部分人组成一个小组去购买特定类的物品,那样我们买的东西没有那么多的属性和特点,是不是就更加容易了呢,这个和客户买基金,托管基金去买股票是一样的道理,因为我们最终的目的很简单,就是赚“Money”。下面来看一下买基金的结构图,和我们自己直接买股票对比一下:
看出大的区别了吗,这就教会了我们要懂得分析和分配。通过一个统一的途径达到一样的目的,省时省力。
还有一个例子,开头时候小编说过想念家里的门了,无缘无故小编是不会思念家乡的,在这里当然是有寓意的啦。一般咱们家里都有大门、小门。就算没有大门,城市里一般都有好几个屋,然后有总门,有防盗门。这里的股票、国债、房地产等等就相当于小门,而基金就相当于咱们家的大门(防盗门),我们就是那个客户,如果咱们有事外出需要锁门,我们最应该先锁住的就是咱家的防盗门,这是最关键的,如果没有什么特殊情况小门就没有锁住的必要了,除非那个小门里有保险箱,哈哈。到此咱们就大概了解了外观模式了。下面跟着小编来看一下外观模式的代码模式吧:
子系统类的代码,此处是有几个子系统类就写几个子系统的类就OK了。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">//子系统类
class SubsystemOne
{
public void MethodOne()
{
Console.writeline("子系统方法一");
}
}
class SubsystemTwo
{
public void MethodTwo()
{
Console.writeline("子系统方法二");
}
}
class SubsystemThree
{
public void Methodthree()
{
Console.writeline("子系统方法三");
}
}</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">//外观类
class Facade
{
SubSystemOne one;
SubSystemTwo two;
SubSystemThree three;
public Facade()
{
one=new SubsystemOne();
two=new SubsystemTwo();
three=new SubsystemThree();
}
pubblic void MethodA() //了解子系统的方法和属性,进行组合,即大门是正常锁还是反锁
{
Console.Writeline("\n方法组A()---");
one.MethodOne();
two.MethodTwo();
}
pubblic void MethodB()
{
Console.Writeline("\n方法组B()---");
two.MethodTwo();
three.MethodThree();
}
}</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">//客户端
static void Main(string[] args)
{
Facade facade=new Facade();
//有了外观模式,客户端就不用知道三个子系统类的存在,即锁住大门,别人不知道我家里有几个小门,但是开开大门,小门就一目了然
facade.MethodA();
facade.MethodB();
Console.Read;
}</span></span>
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)