结构类模式大PK

结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式),结构类模式包括:适配器模式、组合模式、桥梁模式、装饰模式、门面模式、享元模式和代理模式,他们都是通过组合类或对象产生更大结构以适应更高层的逻辑需求

1、代理模式VS装饰模式

    装饰模式就是代理模式的一个特殊应用,两者的共同点是都具有相同的接口,不同点则是代理模式着重对代理过程的控制,而装饰模式则是对类的功能进行加强或减弱,它着重类的功能变化。

    用举例来说明两者的区别:让一个运动员跑步,先来看看用代理模式如何来实现:

结构类模式大PK_第1张图片     再来看看用装饰模式来实现让运动员跑步的实现UML图:

结构类模式大PK_第2张图片       从两个图的类图上来看,两者十分的相似,就是实现代码也是非常的相似的,但是注意一点,代理模式是把当前的行为或功能委托给其他对象执行,代理类负责接口限定,它不对主题角色做任何的处理,保证原汁原味的调用,装饰模式是在要保证接口不变的情况下加强肋的功能,它保证的是被装饰的对象功能比原始对象丰富,但不准做条件判断以及参数过滤。

2、装饰模式VS适配器模式

     他们的功能有类似的地方,都是包装作用,都是通过委托方式实现其功能,不同的是,装饰模式包装的是自己的兄弟类,隶属于一个家族,适配器模式则装修非血缘关系类,把一个非本家族的对象伪装成本家族的对象,注意是伪装。

     举例子来说明两者的区别,用装饰模式与适配器模式分别来描述丑小鸭。

    结构类模式大PK_第3张图片      来看看适配器模式实现描述丑小鸭:这个角度是从鸭妈妈来分析的,将丑小鸭认为是鸭子,实现的UML图如下所示:

结构类模式大PK_第4张图片       现在来说说这两种模式的不同之处:

       1、意图不同,装饰模式关注的是加强对象的功能,而适配器模式关注的是转换

       2、施与对象不同:装饰模式装饰的对象必须是自己的同宗,而适配器模式则必须是两个不同的对象

       3、场景不同:装饰模式在任何情况下都可以用,而适配器模式是一种补救措施

       4、扩充性不同:装饰模式容易扩充,而适配器模式建立容易,拆除难

你可能感兴趣的:(结构类模式大PK)