结构型设计模式培训_第1页
结构型设计模式培训_第2页
结构型设计模式培训_第3页
结构型设计模式培训_第4页
结构型设计模式培训_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、结构型设计模式结构型设计模式主讲人:高国生2结构型设计模式2设计模式l 创建型l 结构型l 行为型大家都知道哪些结构型设计模式?为了可重用代码、让代码更容易被他人理解、保证代码可靠性3结构型设计模式31.手机有苹果,三星,黑莓。软件有QQ,微信。如何组合最简单?2.文件夹下有文件夹和实体文件,怎么样描述它们之间的关系?3.家庭电压是220V,手机电压是5V,如何用220V的电压为5V电压的手机充电呢?场景4结构型设计模式4结构型设计模式l Bridge(桥接模式)l Composite(组合模式)l Adapter(适配器模式)l Decorator(装饰模式)l Facade(外观模式,门面

2、模式)l Flyweight(享元模式)l Proxy(代理模式)创建型设计模式之桥接模式(Bridge)5桥接模式桥接模式将抽象部分与它的实现部分分离,桥接模式将抽象部分与它的实现部分分离,是它们都可以独立地变化。是它们都可以独立地变化。 它很好的支持了开闭原则和组合锯和复用原则。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这些多角度分离出来让他们独立变化,减少他们之间的耦合。创建型设计模式之桥接模式(Bridge)6示例创建型设计模式之桥接模式(Bridge)7类结构图创建型设计模式之桥接模式(Bridge)81、避免抽象方法和其实现方法绑定在一起。2、抽象接口和它的实现都需

3、要扩展出子类以备使用3、变动实现的方法根本不会影响客户程序调用的部分(甚至不用重新编译)1、桥接模式可以从接口分离实现功能,使得设计更具有扩展性,这样,客户调用方法是根本不需要知道实现的细节。桥接模式是减少了子类,如果程序中要在2个操作系统中实现查看6种图像格式,那么就会有2*6个类。使用桥接模式时候就会变成2+6个类了,它使代码变得更清洁了,生成的执行程序更小了。2、但是桥接模式的缺陷是抽象类与实现类的双向连接使得运行速度变慢了。 使用场景优缺点创建型设计模式之组合模式(Composite)9组合模式将对象组合成树形结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具

4、有一致性。组合模式 就比如文件夹和文件的关系一样。有些虽然结构复杂,但是操作简单,只需要进行简单的递归调用即可。创建型设计模式之组合模式(Composite)10公司=八个部门+经理,副经理,每个部门=多个组+项目经理,组长。 让用户一致地使用单个对象和组合对象,1+2和(1+1)+(2*3)都是合法的表达式。 单个与整体都可以进行加法运算符的操作。示例创建型设计模式之组合模式(Composite)11类结构图创建型设计模式之组合模式(Composite)121、你想表示对象的部分-整体层次结构2、你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。使用场景结构型设计

5、模式之适配器模式(Adapter)13适配器模式适配器模式是将一个类的接口转换成客户希适配器模式是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起接口不兼容而不能一起工作的那些类可以一起工作。工作。创建型设计模式之适配器模式(Adapter)14示例创建型设计模式之适配器模式(Adapter)15类结构图创建型设计模式之适配器模式(Adapter)161、系统需要使用现有的类,而此类的接口不符合系统的需要2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引

6、进的类一起工作。这些源类不一定有很复杂的接口。 1、在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。使用场景适优缺点创建型设计模式之装饰模式(Decorator)17装饰模式动态地给一个对象添加一些额装饰模式动态地给一个对象添加一些额外的职责,就增加功能来说,它比生成子外的职责,就增加功能来说,它比生成子类更灵活。类更灵活。装饰模式 也可以这样说,装饰模式把复杂类中的核心职责和装饰功能区分开了,这样既简化了复杂类,有去除了相关类中重复的装饰逻辑。装饰模式没有通过继承原有类来扩展功能,但却达到了一样的目的,而且比继承更加灵活,所以可以说

7、装饰模式是继承关系的一种替代方案。创建型设计模式之装饰模式(Decorator)18示例创建型设计模式之装饰模式(Decorator)19类结构图创建型设计模式之装饰模式(Decorator)201、需要扩展一个类的功能,或给一个类增加附加责任2、需要动态地给一个对象增加功能,这些功能可以再动态地撤销3、需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现使用场景创建型设计模式之装饰模式(Decorator)211、A装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。 B通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创

8、造出很多不同行为的组合。 C这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加易于出错。2、由于使用装饰模式,可以比使用继承关系需要较少数目的类。使用较少的类,当然使设计比较易于进行。但是,在另一方面,使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得查错变得困难,特别是这些对象看上去都很相像。 优缺点创建型设计模式之外观模式(Facade)22示例创建型设计模式之外观模式(Facade)23外观模式 为子系统中的一组接口提供一个一致的界面为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口模式定义了一个高层接口,这个接口使得这些子系统更加容

9、易使用。使得这些子系统更加容易使用。创建型设计模式之享元模式(Flyweight)24享元模式 定义共享类工厂,通过共享类工厂提供的索引来获取相定义共享类工厂,通过共享类工厂提供的索引来获取相应的对象(有点类似创建型模式)。应的对象(有点类似创建型模式)。 享元模式为运用共享技术有效的支持大量细粒度的对象。因为它可以通过共享大幅度地减少单个实例的数目,避免了大量非常相似类的开销。 享元模式是一个类别的多个对象共享这个类别的一个对象,而不是各自再实例化各自的对象。这样就达到了节省内存的目的。创建型设计模式之装饰模式25示例创建型设计模式之享元模式(Flyweight)26类结构图创建型设计模式之

10、享元模式(Flyweight)271、一个系统有大量的对象2、这些对象耗费大量的内存3、这些对象的状态中的大部分都可以外部化。4、这些对象可以按照内蕴状态分成很多的组,当把外蕴对象从对象中剔除时,每一个组都可以仅用一个对象代替。5、软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。使用场景创建型设计模式之代理模式28 通过代理类为实体定义接口,隐藏真通过代理类为实体定义接口,隐藏真实对象。实对象。(需要访问某一个类,但是又不用需要访问某一个类,但是又不用知道该类具体结构知道该类具体结构)代理模式创建型设计模式之代理模式(Proxy)29示例创建型设计模式之代理模式(Proxy)

11、30类结构图创建型设计模式之代理模式311、远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。比如:你可以将一个在世界某个角落一台机器通过代理假象成你局域网中的一部分。2、虚拟(Virtual)代理:根据需要将一个资源消耗很大或者比较复杂的对象延迟的真正需要时才创建。比如:如果一个很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,这个大图片可能就影响了文档的阅读,这时需要做个图片Proxy来代替真正的图片。3、保护(Protect or Access)代理:控制对一个对象的访问权限。比如:在论坛中,不同的身份登陆

12、,拥有的权限是不同的,使用代理模式可以控制权限(当然,使用别的方式也可以实现)。4、智能引用(Smart Reference)代理:提供比对目标对象额外的服务。比如:纪录访问的流量(这是个再简单不过的例子),提供一些友情提示等等。使用场景创建型设计模式之32 代理的客户对象无法直接访问目标对象,代理对象提供对单独目标对象的访问控制,而外观模式的客户对象可以直接访问子系统中的各个对象,但通常由外观对象提供对子系统个元件功能的简化的共同层次的调用接口。代理模式与外观模式的区别代理模式与外观模式的区别创建型设计模式之33代理模式与适配器的区别代理模式与适配器的区别二者都属于一种衔接性质的功能。代理对象和被代理对象的接口是同一个,但是客户没法直接访问被代理者,只能通过代理对象去

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论