《第外观模式课程学习.pptx》由会员分享,可在线阅读,更多相关《第外观模式课程学习.pptx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、会计学1第第 外观外观(wigun)模式模式第一页,共29页。外观外观(wigun)模式模式n n模式模式(msh)(msh)动机动机第1页/共28页第二页,共29页。外观外观(wigun)模式模式n n模式动机模式动机n n引入外观角色之后,用户只需要直接与外观角色交引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实互,用户与子系统之间的复杂关系由外观角色来实现现(shxin)(shxin),从而降低了系统的耦合度。,从而降低了系统的耦合度。第2页/共28页第三页,共29页。外观外观(wigun)模式模式n n模式定义n n外观模式(Facade Pat
2、tern):外部与一个子系统的通信(tng xn)必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。第3页/共28页第四页,共29页。外观外观(wigun)模式模式n n模式定义n nFacade Pattern:Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsy
3、stem easier to use.n n Frequency of use:high第4页/共28页第五页,共29页。外观外观(wigun)模式模式n n模式(msh)结构第5页/共28页第六页,共29页。外观外观(wigun)模式模式n n模式结构(jigu)n n外观模式包含如下角色:n nFacade:外观角色n nSubSystem:子系统角色第6页/共28页第七页,共29页。外观外观(wigun)模模式式n n模式分析n n根据“单一职责原则”,在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标
4、的途径(tjng)之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口。n n外观模式也是“迪米特法则”的体现,通过引入一个新的外观类可以降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。第7页/共28页第八页,共29页。外观外观(wigun)模模式式n n模式分析n n外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开(ki),使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。n n外观模式的目的在于降低系统的复杂程度。n n外观模式从很大程度上提高了客户端使用的便捷性,使得客户端无须关心
5、子系统的工作细节,通过外观角色即可调用相关功能。第8页/共28页第九页,共29页。外观外观(wigun)模模式式n n模式分析n n典型的外观角色(ju s)代码:public class Facade private SubSystemA obj1=new SubSystemA();private SubSystemB obj2=new SubSystemB();private SubSystemC obj3=new SubSystemC();public void method()obj1.method();obj2.method();obj3.method();第9页/共28页第十页,共
6、29页。外观外观(wigun)模式模式n n外观模式实例与解析n n实例一:电源(dinyun)总开关n n现在考察一个电源(dinyun)总开关的例子,以便进一步说明外观模式。为了使用方便,一个电源(dinyun)总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。通过该电源(dinyun)总开关可以同时控制上述所有电器设备,使用外观模式设计该系统。第10页/共28页第十一页,共29页。外观外观(wigun)模式模式n n外观模式实例与解析(ji x)n n实例一:电源总开关第11页/共28页第十二页,共29页。外观外观(wigun)模式模式n n外观模式实例与解析n n实例一
7、:电源总开关n n参考(cnko)代码(Chapter 14 Facadesample01)演示演示演示演示第12页/共28页第十三页,共29页。外观外观(wigun)模式模式n n外观模式实例与解析n n实例二:文件加密n n某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务(yw)代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块。第13页/共28页第十四页,
8、共29页。外观外观(wigun)模式模式n n外观(wigun)模式实例与解析n n实例二:文件加密第14页/共28页第十五页,共29页。外观外观(wigun)模式模式n n模式优缺点模式优缺点n n外观模式的优点外观模式的优点n n对客户屏蔽子系统组件,减少了客户处理的对象对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的外观模式,客户代码将变得很简单,与之关联的对象也很少。对象也很少。n n实现了子系统与客户之间的松耦合关系,这使得实现了子系统与客户之间的松耦合关系,这使得
9、子系统的组件变化不会影响到调用它的客户类,子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。只需要调整外观类即可。n n降低了大型软件系统中的编译降低了大型软件系统中的编译(biny)(biny)依赖性,依赖性,并简化了系统在不同平台之间的移植过程,因为并简化了系统在不同平台之间的移植过程,因为编译编译(biny)(biny)一个子系统一般不需要编译一个子系统一般不需要编译(biny)(biny)所有其他的子系统。一个子系统的修改所有其他的子系统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部变对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。化也不会影
10、响到外观对象。n n只是提供了一个访问子系统的统一入口,并不影只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。响用户直接使用子系统类。第15页/共28页第十六页,共29页。外观外观(wigun)模式模式n n模式优缺点n n外观模式的缺点n n不能很好地限制客户使用(shyng)子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。n n在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。第16页/共28页第十七页,共29页。外观外观(wigun)模式模式n n模式适用环境n n在以下情况下可以使用外观模式:n n当
11、要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。n n客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。n n在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生(chnshng)联系,而通过外观类建立联系,降低层之间的耦合度。第17页/共28页第十八页,共29页。外观外观(wigun)模模式式n n模式应用模式应用(yngyng)(yngyng)n n(1)(1)外观模式应用外观模式应用(yngyng)(yngyng)于于
12、JDBCJDBC数据库操作数据库操作 public class JDBCFacade private Connection conn=null;private Statement statement=null;public void open(String driver,String jdbcUrl,String userName,String userPwd).public int executeUpdate(String sql).public ResultSet executeQuery(String sql).public void close().第18页/共28页第十九页,共29页
13、。外观外观(wigun)模模式式n n模式应用(yngyng)n n(2)Session外观模式是外观模式在Java EE框架中的应用(yngyng)。第19页/共28页第二十页,共29页。外观外观(wigun)模式模式n n模式扩展n n一个系统有多个外观类n n在外观模式中,通常只需要一个外观类,并且此外观类只有一个实例,换言之它是一个单例类。在很多情况下为了节约系统资源,一般将外观类设计为单例类。当然这并不意味着在整个系统里只能有一个外观类,在一个系统中可以设计多个外观类,每个外观类都负责(fz)和一些特定的子系统交互,向用户提供相应的业务功能。第20页/共28页第二十一页,共29页。外
14、观外观(wigun)模式模式n n模式扩展n n不要试图通过外观类为子系统增加新行为 n n不要通过继承一个外观类在子系统中加入新的行为,这种做法是错误的。外观模式的用意是为子系统提供一个集中化和简化的沟通渠道,而不是向子系统加入新的行为,新的行为的增加应该(ynggi)通过修改原有子系统类或增加新的子系统类来实现,不能通过外观类来实现。第21页/共28页第二十二页,共29页。外观外观(wigun)模式模式n n模式(msh)扩展n n外观模式(msh)与迪米特法则 n n外观模式(msh)创造出一个外观对象,将客户端所涉及的属于一个子系统的协作伙伴的数量减到最少,使得客户端与子系统内部的对象
15、的相互作用被外观对象所取代。外观类充当了客户类与子系统类之间的“第三者”,降低了客户类与子系统类之间的耦合度,外观模式(msh)就是实现代码重构以便达到“迪米特法则”要求的一个强有力的武器。第22页/共28页第二十三页,共29页。外观外观(wigun)模式模式n n模式扩展n n抽象外观类的引入 n n外观模式最大的缺点在于(ziy)违背了“开闭原则”,当增加新的子系统或者移除子系统时需要修改外观类,可以通过引入抽象外观类在一定程度上解决该问题,客户端针对抽象外观类进行编程。对于新的业务需求,不修改原有外观类,而对应增加一个新的具体外观类,由新的具体外观类来关联新的子系统对象,同时通过修改配置
16、文件来达到不修改源代码并更换外观类的目的。第23页/共28页第二十四页,共29页。外观外观(wigun)模式模式n n模式扩展n n抽象(chuxing)外观类的引入 第24页/共28页第二十五页,共29页。本章本章(bn zhn)小结小结n n在外观模式中,外部与一个子系统的通信必须通过一个统一的外观对象进在外观模式中,外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模层接口,这个接口使得这一子系统更加
17、容易使用。外观模式又称为门面模式,它是一种对象结构型模式。式,它是一种对象结构型模式。n n外观模式包含两个角色:外观角色是在客户端直接调用的角色,在外观角外观模式包含两个角色:外观角色是在客户端直接调用的角色,在外观角色中可以知道相关的色中可以知道相关的(一个或者一个或者(huzh)(huzh)多个多个)子系统的功能和责任,它将子系统的功能和责任,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理;在软件系统中可以同时有一个或者象处理;在软件系统中可以同时有一个或者(huzh)(huzh)多个子系统角色,
18、每多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能。功能。n n外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。与外观对象打交道,而不需要与子系统内部的很多对象打交道。第25页/共28页第二十六页,共29页。本章本章(bn zhn)小
19、结小结n n外观模式主要优点在于对客户屏蔽子系统组件,减少了客户处理的对象数外观模式主要优点在于对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易,它实现了子系统与客户之间的松耦合目并使得子系统使用起来更加容易,它实现了子系统与客户之间的松耦合关系,并降低了大型软件系统中的编译依赖性,简化了系统在不同平台之关系,并降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程;其缺点在于不能很好地限制客户使用子系统类,而且在不间的移植过程;其缺点在于不能很好地限制客户使用子系统类,而且在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端引入抽象外观
20、类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了的源代码,违背了“开闭原则开闭原则”。n n外观模式适用情况包括:要为一个复杂子系统提供一个简单外观模式适用情况包括:要为一个复杂子系统提供一个简单(ji(ji ndn)ndn)接接口;客户程序与多个子系统之间存在很大的依赖性;在层次化结构中,需口;客户程序与多个子系统之间存在很大的依赖性;在层次化结构中,需要定义系统中每一层的入口,使得层与层之间不直接产生联系。要定义系统中每一层的入口,使得层与层之间不直接产生联系。第26页/共28页第二十七页,共29页。ENDEND第27页/共28页第二十八页,共29页。感谢您的观看感谢您的观看(gunkn)!第28页/共28页第二十九页,共29页。