“ 设计模式 ”是 “面向对象设计模式” 的简称,是软件开发人员在软件开发过程中面临的一般问题的解决方案。
主要用来应对 类 的变化。
“ 设计模式 ”又分为:创建型模式、结构型模式、行为型模式。
本文介绍的“结构型”设计模式是从程序的结构上解决模块之间的耦合问题。
首先是结构型模式的几个细分:
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.代理模式——一个是你要访问的对象(目标类),一个是代理对象
代理模式提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。