【大话设计模式】——结构型模式总结

结构型设计模式主要是从结构上解决代码的耦合问题。包含一下7种模式:Adapter,Proxy,Composite,Bridge,flyweight,Facade,Decorator。结构型中包含7个模式,有点多,不过比行为型模式少,但也容易忘记,加点魔术粉让我们忘不了。

首先,我们要先知道这7个模式都是什么意思。

一、概念

1、Adapter:将一个类的接口转换为客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类一起工作。

个人理解:看到这个模式让我想起了编码,我有我的编码规则,你有你的编码规则,你说的话我听不懂,咱们两个就无法交流。如果中间有一个朋友,将你说的话解释给我听,我们就可以正常交流。(这个朋友就充当了适配器的角色)。怎么感觉这么像解释器啊!

2、Proxy:为其他对象提供一种代理以控制对这个对象的访问。

个人理解:这让我想起来小学某男生写了情书,找人代替他送给某女生。自己不去做,找人代替他去做。生活中最常见的例子就是某化妆品代理,厂商招了代理,帮助他来卖化妆品,代理直接与客户打交道,而厂商不直接与客户打交道。

3、Composite:将对象组合成树形结构以表示“部分——整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

个人理解:就像我们提高班的组织结构一样。首先,提高班这是一棵树,九期,十期,十一期,十二期是树枝,树枝上有树叶:CEO,各委员会。而提高班这棵树上也有树叶:CEO,各委员会。高层的CEO,各委员会与低层的CEO,委员会等职责是一样的。

4、Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

个人理解:如果一个东西可以有两种实现方式,那么可以将这两种实现方式独立起来。

5、flyweight:运用共享技术有效的支持大量细粒度的对象。

个人理解:共享,前几天师哥师姐们说的高校云平台不就是这么一个道理吗?共用一套数据库,利用ID来区分不同学校,以及不同数据和模板。

6、Facade:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

个人理解:重新定义了一个接口,此接口与客户,与各子系统连接,而子系统的改变,不会影响到客户,或者说客户不需要知道具体的子系统是什么!

7、Decorator:动态的给一个对象添加额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

个人理解:如果客户对此产品不满意,需要增加一个需求,这时候就不用添加创建新的派生类,可以用装饰模式给一个类添加职责。

  其次,找关系!

二、比较

1、Adapter VS Proxy

相同点:两种模式都是两者不可以直接访问,需要一个第三者来完成两者之间的访问。

不同点:Adapter是来弥补对象在新环境下的不足之处。

Proxy是来解决两个对象不可以直接访问的问题。

2、Decorator VS Bridge

相同点:两者可以独立变化,减少派生类的增长。

不同点:Bridge适合多个维度变化的一种模式。

Decorator是适合新需求的不断增加的一种模式。

    最后,总结一下收获!

三、总结

三种类型的设计模式都学完了,才发现自己的草稿箱还有一篇未发表的博客,实在是罪过啊,以后可不该这样做了,要写博客就要在晚上九点之前更新完,要不然就会拖拉,拖着拖着就忘记了。。。。。。

时间: 2024-10-07 19:56:44

【大话设计模式】——结构型模式总结的相关文章

设计模式——结构型模式

设计模式的另一大类型为结构型.共收录了7个模式,分别为适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式.下面从特点和使用两方面小探,欢迎交流!      适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.[大话设计模式]        特点:需要交流的两方,在数据和行为都匹配,但接口不符时,我们应该考虑用适配器,目的是促使交流和复用.可以理解为入乡随俗,相同的意思,不同的表达

设计模式-结构型模式,适配器模式(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 为组合中的对象声明接