设计模式一之策略模式
开始研究设计模式,会将自己的理解以简单易懂的方式写出来,本系列内容持续更新. 我们一步一步来通过代码形式讲解策略模式。 设计模式之策略模式(以Duck鸭子来讲解):
这是整个项目的项目结构。我们知道,生活中有各种各样的鸭子,会游泳,会叫,有的是绿头鸭有的是红头鸭,木头鸭不会飞不会叫,玩具鸭会叫不会飞等等。
现在我们要写一个针对于所有鸭子都能用的代码,重点在于实现代码的复用,方便后期维护。
1. 写两个接口 FlyBehavior 和 QuackBehavoir.
(1)FlyBehavior中有一个fly()方法,主要负责鸭子飞的动作,在implem包中有针对于fly()的不同实现类,包括 FlyNoWay(不能飞) 和 FlyWithWIngs(可以飞).
(2)QuackBehavoir中有一个Quack()方法,主要负责鸭子叫的动作,在implem包中有针对于Quack的不同实现类,包括 moteQuack(mote叫) 和 Squack(quack叫).
2. 在Duck基类中,所包含的内容如下:
(1) swim是所有鸭子都有的行为,所以将swim的实现放在父类Duck中
(2) display()方法是鸭子都有的行为,但是实现方式不同,所以定义成abstract抽象类型,子类各自分别实现
(3) 定义两个接口,分别为 FlyBehavoir 和 QuackBehavoir
(4) 在PerformFly() 和 PerformQuack()方法中,通过接口调用接口中的行为方法
3. MiniDuck 是具体的鸭子对象
继承父类Duck,并实现父类中的抽象方法,在构造器中利用父类声明的接口调用具体的实现类。
4. testDuck是测试类
在测试类中new具体的鸭子对象,调用鸭子对象中已经实现的方法做测试。
5. 关于动态改变鸭子的行为(将原本不会飞的鸭子,加上一个rocket,让它具有飞的行为)
(1) 加入 FlyWithRocket 类,实现 FlyBehavoir 接口。
(2) 在父类中加入Set方法
(3) 在测试类中调用具体鸭子对象,调用Set方法直接改变鸭子行为即可
这样就可以动态改变鸭子的行为啦!
关于策略模式,旨在告诉我们,多用组合,少用继承。将行为分别封装成类,对象只需要将不同的行为类组合起来用即可实现。
从大局的角度来分析: