结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式),结构类模式包括:适配器模式、组合模式、桥梁模式、装饰模式、门面模式、享元模式和代理模式,他们都是通过组合类或对象产生更大结构以适应更高层的逻辑需求
1、代理模式VS装饰模式
装饰模式就是代理模式的一个特殊应用,两者的共同点是都具有相同的接口,不同点则是代理模式着重对代理过程的控制,而装饰模式则是对类的功能进行加强或减弱,它着重类的功能变化。
用举例来说明两者的区别:让一个运动员跑步,先来看看用代理模式如何来实现:
从两个图的类图上来看,两者十分的相似,就是实现代码也是非常的相似的,但是注意一点,代理模式是把当前的行为或功能委托给其他对象执行,代理类负责接口限定,它不对主题角色做任何的处理,保证原汁原味的调用,装饰模式是在要保证接口不变的情况下加强肋的功能,它保证的是被装饰的对象功能比原始对象丰富,但不准做条件判断以及参数过滤。
2、装饰模式VS适配器模式
他们的功能有类似的地方,都是包装作用,都是通过委托方式实现其功能,不同的是,装饰模式包装的是自己的兄弟类,隶属于一个家族,适配器模式则装修非血缘关系类,把一个非本家族的对象伪装成本家族的对象,注意是伪装。
举例子来说明两者的区别,用装饰模式与适配器模式分别来描述丑小鸭。
来看看适配器模式实现描述丑小鸭:这个角度是从鸭妈妈来分析的,将丑小鸭认为是鸭子,实现的UML图如下所示:
1、意图不同,装饰模式关注的是加强对象的功能,而适配器模式关注的是转换
2、施与对象不同:装饰模式装饰的对象必须是自己的同宗,而适配器模式则必须是两个不同的对象
3、场景不同:装饰模式在任何情况下都可以用,而适配器模式是一种补救措施
4、扩充性不同:装饰模式容易扩充,而适配器模式建立容易,拆除难