《13 C#设计模式-外观模式.ppt》由会员分享,可在线阅读,更多相关《13 C#设计模式-外观模式.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、www.ChinaSA.infoDDesign esign P Patternsatterns外观模式外观模式外观模式外观模式刘刘 伟伟(Sunny)weiliu_www.ChinaSA.info大纲w外观模式概述w外观模式的结构与实现w外观模式的应用实例w抽象外观类w外观模式的优缺点与适用环境公司前台是企业内部与外界交互的接口www.ChinaSA.info外观模式概述w两种喝茶方式示意图www.ChinaSA.info外观模式概述w分析一个客户类需要和一个客户类需要和多个业务类多个业务类交互,而这些需要交互交互,而这些需要交互的业务类经常会作为一个整体出现的业务类经常会作为一个整体出现引入
2、一个新的引入一个新的外观类外观类(Facade)来负责和来负责和多个业务类多个业务类【子系统子系统(Subsystem)】进行交互,而客户类只需与外进行交互,而客户类只需与外观类交互观类交互为多个业务类的调用为多个业务类的调用提供了一个统一的入口提供了一个统一的入口,简化了简化了类与类之间的交互类与类之间的交互www.ChinaSA.info外观模式概述w分析没有外观类:没有外观类:每个客户类需要和多个子系统之间进行每个客户类需要和多个子系统之间进行复杂的交互,复杂的交互,系统的耦合度将很大系统的耦合度将很大引入外观类:引入外观类:客户类只需要直接与外观类交互,客户客户类只需要直接与外观类交互
3、,客户类与子系统之间原有的复杂引用关系由外观类来实现,类与子系统之间原有的复杂引用关系由外观类来实现,从而从而降低了系统的耦合度降低了系统的耦合度www.ChinaSA.info外观模式概述w分析一个子系统的外部与其内部的通信通过一个统一的外观类进行,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道要与外观角色打交道,而不需要与子系统内部的很多对象打交道www.ChinaSA.info外观模式概述w外观模式的定义对象结构
4、型对象结构型模式模式外外观观模模式式:为子系统中的一组接口提供一个统统一一的的入入口口。外观模式定义了一一个个高高层层接接口口,这个接口使得这一子系统更加容易使用。Facade Pattern:Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.www.ChinaSA.info外观模式概述w外观模式的定义又称为又称为门面模式门面模式是是迪米特法则迪米特法则的一
5、种具体实现的一种具体实现通过通过引入一个新的外观角色引入一个新的外观角色来来降低原有降低原有系统的复杂度系统的复杂度,同时降低客户类与子系,同时降低客户类与子系统的耦合度统的耦合度所指的所指的子系统子系统是一个广义的概念,它可是一个广义的概念,它可以是一个类、一个功能模块、系统的一以是一个类、一个功能模块、系统的一个组成部分或者一个完整的系统个组成部分或者一个完整的系统www.ChinaSA.info外观模式的结构与实现w外观模式的结构www.ChinaSA.info外观模式的结构与实现w外观模式的结构外观模式包含以下外观模式包含以下2个角色:个角色:Facade(外观角色)SubSystem
6、(子系统角色)www.ChinaSA.info外观模式的结构与实现w外观模式的实现子系统类典型代码:子系统类典型代码:class SubSystemA public void MethodA()/业务实现代码 class SubSystemB public void MethodB()/业务实现代码class SubSystemC public void MethodC()/业务实现代码 www.ChinaSA.info外观模式的结构与实现w外观模式的实现外观类典型代码:外观类典型代码:class Facadeprivate SubSystemA obj1=new SubSystemA();p
7、rivate SubSystemB obj2=new SubSystemB();private SubSystemC obj3=new SubSystemC();public void Method()obj1.MethodA();obj2.MethodB();obj3.MethodC();www.ChinaSA.info外观模式的结构与实现w外观模式的实现客户类典型代码:客户类典型代码:class Program static void Main(string args)Facade facade=new Facade();facade.Method();www.ChinaSA.info外观
8、模式的应用实例w实例说明某软件公司要开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括3个部分,分别是读取源文件、加密、保存加密之后的文件,其中,读取文件和保存文件使用流来实现,加密操作通过求模运算实现。这3个操作相对独立,为了实现代码的独立重用,让设计更符合单一职责原则,这3个操作的业务代码封装在3个不同的类中。现使用外观模式设计该文件加密模块。www.ChinaSA.info外观模式的应用实例w实例类图文件加密模块结构图文件加密模块结构图www.ChinaSA.info外观模式的应用实例w实例代码(1)FileRea
9、der:文件读取类,充当子系统类:文件读取类,充当子系统类(2)CipherMachine:数据加密类,充当子系统类:数据加密类,充当子系统类(3)FileWriter:文件保存类,充当子系统类:文件保存类,充当子系统类(4)EncryptFacade:加密外观类,充当外观类:加密外观类,充当外观类(5)Program:客户端测试类:客户端测试类演示演示演示演示参考代码参考代码(DesignPatternFacadeSample)www.ChinaSA.info外观模式的应用实例w结果及分析Hello world!233364062325www.ChinaSA.info抽象外观类w动机在标准的
10、外观模式的结构图中,如果需要增加、删除在标准的外观模式的结构图中,如果需要增加、删除或更换与外观类交互的子系统类,或更换与外观类交互的子系统类,必须修改外观类或必须修改外观类或客户端的源代码客户端的源代码,这将,这将违背开闭原则违背开闭原则,因此可以通过,因此可以通过引入引入抽象外观类抽象外观类对系统进行改进,在一定程度上解决对系统进行改进,在一定程度上解决该问题该问题www.ChinaSA.info抽象外观类w结构www.ChinaSA.info抽象外观类w实现namespace FacadeSample abstract class AbstractEncryptFacade public
11、 abstract void FileEncrypt(string fileNameSrc,string fileNameDes);namespace FacadeSample class NewEncryptFacade:AbstractEncryptFacade private FileReader reader;private NewCipherMachine cipher;private FileWriter writer;public NewEncryptFacade()reader=new FileReader();cipher=new NewCipherMachine();wri
12、ter=new FileWriter();public override void FileEncrypt(string fileNameSrc,string fileNameDes)string plainStr=reader.Read(fileNameSrc);string encryptStr=cipher.Encrypt(plainStr);writer.Write(encryptStr,fileNameDes);using System;using System.Configuration;using System.Reflection;namespace FacadeSample
13、class Program static void Main(string args)AbstractEncryptFacade ef;/针对抽象外观类编程 /读取配置文件 string facadeString=ConfigurationManager.AppSettingsfacade;/反射生成对象 ef=(AbstractEncryptFacade)Assembly.Load(FacadeSample).CreateInstance(facadeString);ef.FileEncrypt(src.txt,des.txt);Console.Read();www.ChinaSA.info
14、外观模式的优缺点与适用环境w模式优点它它对客户端屏蔽了子系统组件,减少了客户对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用端所需处理的对象数目,并使得子系统使用起来更加容易起来更加容易它它实现了子系统与客户端之间的松耦合关系实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可户端,只需要调整外观类即可一个子系统的修改对其他子系统没有任何影一个子系统的修改对其他子系统没有任何影响响,而且,而且子系统的内部变化也不会影响到外子系统的内部变化也不会影响到外观对象观对象www.China
15、SA.info外观模式的优缺点与适用环境w模式缺点不能很好地限制客户端直接使用子系统不能很好地限制客户端直接使用子系统类类,如果对客户端访问子系统类做太多,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活性的限制则减少了可变性和灵活性如果如果设计不当,增加新的子系统可能需设计不当,增加新的子系统可能需要修改外观类的源代码要修改外观类的源代码,违背了开闭原违背了开闭原则则www.ChinaSA.info外观模式的优缺点与适用环境w模式适用环境要为访问要为访问一系列复杂的子系统提供一个一系列复杂的子系统提供一个简单入口简单入口客户端程序与多个子系统之间存在很大客户端程序与多个子系统之间存在很大的依赖性的依赖性在层次化结构中,可以在层次化结构中,可以使用外观模式的使用外观模式的定义系统中每一层的入口定义系统中每一层的入口,层与层之间,层与层之间不直接产生联系,而是通过外观类建立不直接产生联系,而是通过外观类建立联系,联系,降低层之间的耦合度降低层之间的耦合度www.ChinaSA.infoENDEND