最近我正在自己学习设计模式,刚学完创建型、结构型和行为型模式,现在对我的学习到结构型模式的内容进行归纳总结。我不是一个拘泥于形式的人,不追求标准答案,只追求自己的答案,好了,废话不多说,下面开始总结。
一、设计模式分类
按照设计模式的目的,可分为:创建型、结构型、行为型三种。 创建型模式主要用于对象的创建,结构型模式处理类和对象的组合,行为型模式描述类或对象的职责。
按照设计模式的范围,可分为适用于类和适用于对象两种。类模式处理类和子类间的关系,对象模式处理对象间的关系。
二、结构型模式
1、适配器模式
什么是适配器,通俗一点说就是一种起中间连接作用的配件。同理,适配器模式主要作用就是要将两个接口不同的模块连接在一起,使其中一个模块可以使用另一个模块的功能。
举个例子,比如说我们想要调试设备,需要这样一根线,它一端连接我们笔记本电脑的USB接口,另一端连接我们所要调试设备的COM口。这根线就是适配器。在代码中的情况就是,目标模块需要调用被适配者模块的某个接口(比如void interface(char))来实现目标模块自己的某个接口(比如void interface(int)),可问题是他们的接口并不相同,适配器(类)通过继承目标模块的接口(后面称为目标接口),并通过调用被适配者模块提供的接口(我称它为服务接口)来重写目标接口的实现,这样一来,当实例为适配器时,调用目标模块的接口,就实际调用了适配器的接口,同时也就调用了被适配者模块提供的接口。
实现适配器的方法有两种,一种是通过类继承的方法,令适配器(类)继承目标模块的接口和被适配者模块的实现,优点是访问被适配者的内部起来成员比较方便,可以直接调用,不必创建更多的对象,缺点是不够灵活;另一种是通过令适配器(类)继承目标模块的接口同时内部成员包含被适配者的对象,优点是灵活,易扩展,修改实现,缺点就是更复杂,需要通过改变成员中被适配者的对象来改变实现。
2、桥接模式
我们知道,桥梁可以将完全相隔的两个地方给连通起来,而桥接模式则是一种将接口与实现分离,又通过逻辑上的桥来建立接口与实现之间的联系,以实现接口和实现都能独立变化的松散耦合结构。
举个例子,市场部有一个员工专门负责了解客户的需求,再把这个需求分配给研发部门的一个员工完成。这时,市场部的员工就是接口,研发部的员工就是实现。接口与实现之间通过逻辑上的“桥”来联系,如市场部员工向研发部员工提出需求。同时我们的市场部员工和研发部员工又都能独立的变化,比如我可以用市场部的A员工了解客户需求,用研发部员工B来处理这个需求。如果有一天发现研发部的员工B不能很好的完成需求,那么我们可以换做用研发部员工C来完成,因为员工A和员工B是松散关系,并不是必须要员工A和员工B一起才能完成任务,员工A和员工C配合也是可以的。
再强调一下,桥接模式是一种将接口与实现分离,又通过逻辑上的桥来建立接口与实现之间的联系,以实现接口和实现都能独立变化的松散耦合结构。
3、组合模式
组合就是多个对象“揉”到一起而“生成”的一个组合对象。组合模式还有一个更重要的特征,一个被组合而成的对象既可以是组成它的多个对象的容器,又可以是另一个组合而成对象的其中一个组成单元。即可以忽略容器与组成单元的区别。
举个例子,我们都玩过拼图游戏,拼图A和拼图B拼成了拼图C,而我们认为拼图C和拼图A、B并没有本质上的区别,都是完整拼图的一部分,都可以与其他合适的拼图拼成更大的一块。
所以组合是这样一种结构,既可以是多个部分组合而成整体,又可以是可以组合成某个整体的部分。
未完待续