美文网首页程序员程序猿阵线联盟-汇总各类技术干货
面相对象的艺术|设计模式2(结构型)

面相对象的艺术|设计模式2(结构型)

作者: 大海画家 | 来源:发表于2017-11-07 18:08 被阅读0次

    “ 设计模式 ”是 “面向对象设计模式” 的简称,是软件开发人员在软件开发过程中面临的一般问题的解决方案。

    主要用来应对 类 的变化。

    “ 设计模式 ”又分为:创建型模式、结构型模式、行为型模式。

    本文介绍的“结构型”设计模式是从程序的结构上解决模块之间的耦合问题。

    首先是结构型模式的几个细分:

    1.桥接模式:对象的接口与实现

    2.适配器模式:可以将类的一个接口匹配另一个接口

    3.合成模式:对象的组合

    4.门面模式:一个类表示一个子系统

    5.装饰模式:动态给对象添加职责

    6.代理模式:一个简单的对象代替一个复杂的稍后会被调用的复杂对象

    1.桥接模式—— 适应对象接口与实现的多维变化

    对象的变化,分为:接口变化、实现变化、属性变化。

    当出现单纬度的变化时(接口变化/实现变化),我们通常有两个解决放啊:水平关联/继承。

    但是,当多个纬度时变化时,单一的使用继承会导致子类数量的快速增长,单一的使用水平关联会导致扩展性变差。

    所以在适应多维度变化时,我们使用桥接模式,将接口与实现分离。

    桥接模式

    2.适配器模式——将一个类的接口转换成客户希望的另外一个接口

    当原接口不可修改,A和B两个类的接口不一致,而需要将B类当A类来使用时,使用适配器模式。

    适配器模式

    3.合成模式—— 将对象组合成树形结构以表示"部分-整体"的层次结构

    树形结构

    一个树结构由两种节点组成:树枝节点和树叶节点。树枝节点可以有子节点,而一个树叶节点不可以有子节点。除了根节点外,其它节点有且只有一个父节点。

    当我们需要抽象的问题,同样具又这样的性质的时候,就需要使用合成模式了。

    例子来自:http://blog.csdn.net/koudaidai/article/details/7340192

    合成模式

    在“故事”类中,组合一个 “根节点类”,就可以实现,故事既可以只有一重也有多重。

    4.门面模式——用户并不关注我们如果写的代码

    在我们的生活中医院就是这样的。一般的医院都会分为挂号、门诊、化验、收费、取药等。看病的病人要想治好自己的病(相当于一个客户端想要实现自己的功能)就要和医院的各个部门打交道。首先,病人需要挂号,然后门诊,如果医生要求化验的话,病人就要去化验,然后再回到门诊室,最后拿药,经过一系列复杂的过程后才能完成看病的过程。

    例子来自:http://blog.csdn.net/xingjiarong/article/details/50066133

    解决这一办法的设计是,提供一个接待员(门面模式)

    门面模式

    用户并不关心我们如何实现的功能,他们更希望直接使用

    5.装饰模式—— 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能

    装饰模式

    装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

    如果单一的使用继承,将导致子类数量激增,并且只能改变单个子对象的功能。

    如果单一的使用水平关联,新的类与父类不再是父子关系。

    6.代理模式——一个是你要访问的对象(目标类),一个是代理对象

    代理模式提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。

    代理模式

    相关文章

      网友评论

        本文标题:面相对象的艺术|设计模式2(结构型)

        本文链接:https://www.haomeiwen.com/subject/egqrmxtx.html