设计模式——结构型模式

设计模式的另一大类型为结构型。共收录了7个模式,分别为适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式。下面从特点和使用两方面小探,欢迎交流!

     适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。[大话设计模式]

       特点:需要交流的两方,在数据和行为都匹配,但接口不符时,我们应该考虑用适配器,目的是促使交流和复用。可以理解为入乡随俗,相同的意思,不同的表达方式。

       使用:通过建立一个适配器类(Adapter),在这个类中,通过调用对需要转换的内容进行转换或翻译。有点类似“换元”。

     桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。[大话设计模式]

       特点:通过将实现部分分离,在后期能进行自由的搭配,增强了灵活性。

       使用:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。细化分工,使得工作更专业、灵活了。

     组合模式(Composite):将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。[大话设计模式]

       特点:具有相同功能和任务的部门,附属在不同层级之后,其的行政级别有不同。组合模式能智能、准确判断进行分配。

       使用:当需求中体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,使用组合模式。通过“父”生“子”,“子”又再生“子”,如此传承延续,来体现这种整体与部分的关系。

     装饰模式(Decorator):动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。[大话设计模式]

       特点:为已有功能动态地添加更多功能的一种方式。把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。

       使用:将每一个功能用一类来分离,调用过程中用一个封装方法来进行封装。这个封装方法以对象名为参数,将对象的现阶段的状态储存起来,作为下一阶段的初始状态。用穿衣服举例容易说与理解:假如穿鞋并穿袜子是一个完整的动作,先穿袜子,接着穿鞋;但不能是穿鞋前先把袜子脱掉,再来穿鞋。如是这样,这动作永远都结束不下来。

     外观模式(Facade):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[大话设计模式]

       特点:多对一,一对多。这有点“取之于民,用之于民”。

       使用:设计初级阶段,有意识地分离层;开发阶段,建立一个接口,用于减少层间的依赖;维护新旧系统时,建立一个简单清晰的接口(Facade),让新旧系统进行重要资源的顺畅交互。

(外观模式,特征缩略图)

     享元模式(Flyweight):为运用共享技术有效地支持大量细粒度的对象。[大话设计模式]

       特点:避免大量非常相似的类的开销。

       使用:如果一个程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就可以应该考虑使用。从始至终不变的属性可视为内部状态,不同时刻所具有的性质为外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,也应使用享元模式。

     代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。[大话设计模式]

       特点:不亲自做,而使用第三方代理,功能类似于面向对象的委托。

       使用:远程代理,若想隐藏一个对象存在于不同空间的事实,可以为一个对象在不同的地址空间提供局部代表。虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要长时间的真实对象。

设计模式——结构型模式,布布扣,bubuko.com

时间: 2024-07-30 10:13:44

设计模式——结构型模式的相关文章

设计模式-结构型模式,适配器模式(4)

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能.举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器.您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡. #!/usr/bin/env python # encoding: utf-8 class Target(object): def request(self

设计模式-结构型模式,python组合模式

设计模式上大的方向上分继承和组合,就是类模式和对象模式.此篇的组合模式非继承和组合概念中的组合.桥接 策略 代理 装饰者都用了组合,此组合非彼组合. 组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构. 这种模式创建了一个包含自己对象组的类.该类提供了修改相同对象组的方式. 我们通过下面的实例来演示组合模式的用法.

看透设计模式-结构型模式

这里我们主要讨论 结构型模式 适配器模式,: ● Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类. ● Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系. ● Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,

c#设计模式·结构型模式

看的过程中,发现好多模式都用过,只是没有总结,或者是不知道叫这个名字吧··· 这里列举结构型模式,适配器.桥接.过滤.组合.装饰器.外观.享元.代理, 适配器模式:将现存的对象放到新的环境里边去,但是接口不一样,其实就是添加一个类把新的接口包装一样 之前公司的wcf服务端就是这种模式,公司很多部门,不同部门不同的业务都有自己相应的服务,之前是分开的,用的服务多的时候开服务很麻烦,现在想把他们统一起来,就可以用这种方式,wcf服务以接口定义契约,在实现类中写具体业务,可以定义一个统一的空接口,然所

设计模式 结构型模式

定义 定义 结构型模式,讨论的是如何将类和对象组合,形成更为复杂的结构.采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式). 类和对象构成更复杂的结构就像搭积木的过程,通过不同组合,形成不同形状. 主导思想 1.组合类和对象以形成更复杂的结构. 2.尽量使用关联关系来代替继承关系. 分类 结构型模式又分为对象结构型模式和类结构型模式. 对象结构型模式把多个类组合成一个更复杂的系统,在类结构模式中一般只存在继承和实现关系. 类结构型模式通过关联.

设计模式——结构型模式之适配器模式(二)

模式的定义与特点 适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作.适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些. 该模式的主要优点如下. 客户端通过适配器可以透明地调用目标接口. 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类. 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题.

JDK 源码 阅读 - 3 - 设计模式 - 结构型模式

1.适配器(Adapter) java.util.Arrays$ArrayList(java.util.Arrays#asList()):  这里要特别注意,这里的ArrayList是Arrays的内部类不是java.util.ArrayList.这里的ArrayList是外部不可见的,用来把一个array适配成List.   Sample: String a[] = new String[]{"123","abc","xyz","dd

设计模式--结构型模式--装饰模式

装饰者模式: 我们可以通过继承和组合的方式来给一个对象添加行为,虽然使用继承能够很好拥有父类的行为,但是它存在几个缺陷: 一.对象之间的关系复杂的话,系统变得复杂不利于维护. 二.容易产生“类爆炸”现象. 三.是静态的.在这里我们可以通过使用装饰者模式来解决这个问题. 装饰者模式,动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的替代方案.虽然装饰者模式能够动态将责任附加到对象上,但是他会产生许多的细小对象,增加了系统的复杂度. uml类图如下: 装饰者Decorator与被

java设计模式--结构型模式--组合模式

什么是组合模式,这个有待研究,个人觉得是各类组合而形成的一种结构吧. 组合模式: 1 组合模式 2 概述 3 将对象组合成树形结构以表示"部分-整体"的层次结构."Composite使得用户对单个对象和组合对象的使用具有一致性." 4 5 6 适用性 7 1.你想表示对象的部分-整体层次结构. 8 9 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象. 10 11 12 参与者 13 1.Component 14 为组合中的对象声明接