深入浅出设计模式---策略模式

前言

这是我读深入浅出设计模式所作的笔记,这本书浅显易懂,挺有趣的如果是想入门设计模式的同学,你一定会爱上这本书。

问题描述

有一款游戏,内容是模拟鸭子的活动,有不同种类的鸭子如野鸭,家鸭,绿头鸭,他们到会叫,会游泳,所以小明设计了如下类:
深入浅出设计模式---策略模式
问题来了,有一天,策划想要在游戏里加入一种特殊的鸭子,橡皮鸭。橡皮鸭不会叫,也不会游泳,只会浮在水面上,并且策划还计划着加入更多行为不同的鸭子。小明该怎么改变程序让其可以适应不断增加鸭子呢?

问题分析

导致上述问题的原因是程序设计时并没有考虑到鸭子的行为会变化。子类继承基类方法,可以复用代码,但导致在维护阶段对程序扩充的困难。如果使用重载方法,将行为的实现放在子类里,相同行为的实现代码在多个子类重复,维护时需要对每个子类进行修改,可维护差。

解决方法—策略模式

策略模式主要是用来封装一组可以互相替代的算法族,并且可以根据需要动态地去替换使用的算法。具体到问题就是:行为类实现具体的行为,并作为鸭子类的成员,鸭子类通过调用行为类的方法实现功能。通过替换行为类(基类可以被其子类替换),实现运行时改变行为。

涉及的设计原则:
封装变化
针对接口编程,而不是针对实现编程
多用组合,少用继承

深入浅出设计模式---策略模式
深入浅出设计模式---策略模式