设计模式的关键-多态

《简单学习设计模式》
多态
面向对象带给了我们什么?
继承:可以通过继承追加机能
重载:相同的函数名,可以因参数的不同有不同的版本
多态:可以通过继承是函数有不同的表现(这就是上图表示的意思)

个人认为多态是面向对象最有价值的特性,也是面向对象对设计的最大影响的部分。
也是作为设计人员最可以规划的空间。多态真的很好。没有多态就没有设计模式。

桥接模式,策略模式,状态模式
桥接模式、策略模式、状态模式
共同点:就是,A通过B的多态,使A.bun可变化。因装载mB的不同而不同。
差别:mB的装载控制不同,
1.策略,是A根据需求,选择装载不同的策略。
2.状态呢,B控制A对mB的装载。
3.桥接:没啥特点,就是其他模式的基础,其实我觉得桥接不应该作为一个模式,就是对象的组合吗。不能算做一种模式。
职责链
职责链模式
和上面的模式相比:B的继承关系中多了一个桥接。子类继承父类,父类桥接子类。
A的mb状态时固定的,B的mB的装载也是固定的,取决于bfun传入的业务(type)是否自己能处理。
能处理:直接处理完,返回。
不能处理:传递给mB。
访问者模式:
访问者模式这图是等同于访问者模式的标准类图的,我这里是为了和以上的模式对比,所以没做位置调整
特点:
1.之前的桥接(组合)关系,变成了依赖关系
2.对应B的 bfun函数变成了 bfun(A1 a) bfun(A2 a),这就是访问者模式最有特点的部分了,他会根据访问的对象不同去变化。(B是访问者)

总结:
1.通过上面几种模式的举例,说白了:设计模式的差别就是对多态运用的不同。对多态运用的差别就是个模式的特点
2.从技能的角度讲,设计模式就是如何用一种手段来丰富某个函数的机能。
第一维度.多态本身是机能变化的一个维度
第二维度.函数的参数也作为一个多态的对象传入是一个维度。(如果是简单类型的话,函数本身也可以是丰富函数机能的一个维度)
第三维度.被传入的对象被调用的时候,把this作为参数传入,又是一个维度的丰富。
那么,上面那些模式用到了第三维度的设计呢?
很明显访问者模式就用到了第三维度的多态。
那么第二维度,访问者用到了第二维度,因为根据入参,函数会有不同的行为。
其他的模式只用到了第一维度

猜你喜欢

转载自blog.csdn.net/xie__jin__cheng/article/details/88634047
今日推荐