收藏 分享(赏)

12 设计模式教学课件.ppt

上传人:kpmy5893 文档编号:5434295 上传时间:2019-03-03 格式:PPT 页数:21 大小:95.50KB
下载 相关 举报
12 设计模式教学课件.ppt_第1页
第1页 / 共21页
12 设计模式教学课件.ppt_第2页
第2页 / 共21页
12 设计模式教学课件.ppt_第3页
第3页 / 共21页
12 设计模式教学课件.ppt_第4页
第4页 / 共21页
12 设计模式教学课件.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、外观(门面)模式,Facade Pattern,外观(Facade)模式,外部与一个子系统的通信必须通过一个统一的外观(Facade)对象进行,这就是外观模式。 基金股票 医院的例子 家庭影院 其他,如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。 可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,家庭影院:看DVD,打开爆米花机 将灯光调暗 放下屏幕 打开投影机 将投影机的输入切换到DVD 将

2、投影机设置到宽屏模式 打开功放 将功放输入设置为DVD 将功放设置为环绕立体声 将功放音量调到中 打开DVD播放器 开始播放DVD,外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的外观(Facade)对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。 就如同医院的接待员一样,外观模式的外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。,基金代码,class Stock1/卖股票public void Sell()Console.WriteLine(“ 股票1卖出“);/买股票public void Buy(

3、)Console.WriteLine(“ 股票1买入“);,/股票2class Stock2/代码类似Stock1class Stock3/代码类似Stock1class NationalDebt1/代码类似Stock1class Realty1/代码类似Stock1,class FundStock1 gu1;Stock2 gu2;Stock3 gu3;NationalDebt1 nd1;Realty1 rt1;public Fund()gu1 = new Stock1();gu2 = new Stock2();gu3 = new Stock3();nd1 = new NationalDebt

4、1();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 Programstatic void Main(string args)Fund jijin = new Fund();jijin.BuyFund();jijin.SellFund();Console.Read();,外观模式的结构,外观模

5、式没有一个一般化的类图描述,下图演示了一个外观模式的示意性对象图:,外观(Facade)角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。子系统(subsystem)角色:可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。,一个系统可以有几个外观类,【GOF】的书中指出:在外观模式中,通常只需要一个外观类,并且此外观类只有一个实例,换

6、言之它是一个单例类。当然这并不意味着在整个系统里只能有一个外观类,而仅仅是说对每一个子系统只有一个外观类。或者说,如果一个系统有好几个子系统的话,每一个子系统有一个外观类,整个系统可以有数个外观类。,在什么情况下使用外观模式,为一个复杂子系统提供一个简单接口时:子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。 Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。 当客户程序与抽象类的

7、实现部分之间存在着很大的依赖性时,引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。,在层次化结构中,可以使用Facade模式定义系统中每一层的入口点,如果子系统之间是相互依赖的,则可以让他们仅通过Facade进行通信,从而简化他们之间的依赖关系。 希望包装或隐藏原有系统:Facade可以把原有系统作为自己的私有成员。原有系统与Facade类联系在一起,但使用Facade类的客户无法看到原有的系统。 维护一个遗留的大型系统。 跟踪对系统的使用-强迫所有客户通过Facade使用原有系统。,Facade模式优点,屏蔽了外部客户端和系统内部模块的交互 Faca

8、de的功能可以被多个客户端调用,可以实现复用(功能的共享) 对使用Facade的人员来说,Facade大大的节省了他们的学习成本,本质,封装交互、简化调用,一个例子,我们考察一个保安系统的例子,以说明外观模式的功效。一个保安系统由两个录像机、三个电灯、一个遥感器和一个警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。,不使用外观模式的设计,操作这个保安系统的操作员必须直接操作所有的这些部件,使用外观模式的设计,一个合情合理的改进方法就是准备一个系统的控制台,作为保安系统的用户界面,迪米特法则,迪米特法则(Law of Demeter或简写LoD)又叫最少知识原则(Least Knowledge Principle或简写为LKP) 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。 最少知识原则告诉我们要减少对象之间的交互,只留下几个“密友”。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报