设计模式之策略模式
来源:互联网 发布:pc蛋蛋网站源码 编辑:程序博客网 时间:2024/06/05 16:50
先从简单的模拟鸭子应用做起,游戏中会出现各种鸭子,一边游戏饮水,一边呱呱叫。此系统内部设计使用了标准的OO技术,设计了一个鸭子超类,并让各种鸭子继承此超类。
模拟鸭子项目
public abstract class Duck {public void Quack() {System.out.println("gaga");}public abstract void display();public void swim() {System.out.println("im swiming");}}
1、GreenHeadDuck继承Duck :
publicclass GreenHeadDuck extends Duck { @Override public void display() { System.out.println("GreenHead"); }}
2、同理有RedHeadDuck等
项目的新需求
1、应对新需求,看看这个设计的可拓展性
a、添加会飞的鸭子
2、OO思维里的继承方式解决方案是:
public abstract class Duck { ...; public void Fly() { System.out.println("im flying"); } };但是问题来了, 这个Fly()让所有鸭子(包括橡皮鸭子等)都会飞了,这是不科学的。
继承的问题:对超类的局部改动,会影响子类。
3、继续用OO原则来解决
public class RubberDuck extends Duck {...;public void Fly() {System.out.println("no fly");}}超类挖的一个坑,每个子类都要来填,增加工作量,不是好的设计方式。
用策略模式来解决新需求
1、接口:
1)public interface FlyBehavior { void fly();} 2)public interface QuackBehavior { void quack();} 好处:行为类更好的复用,组合更方便。有继承带来的复用好处,没有挖坑
2、行为类:
public class GoodFlyBehavior implements FlyBehavior{ @Overridepublic void fly() {System.out.println("im flying");}}public class NoFlyBehavior implements FlyBehavior{ @Override public void fly() { System.out.println("NoFly"); }}public class GaGaQuackBehavior implements QuackBehavior{ @Override public void quack() { System.out.println("GaGa"); }}public class NoQuackBehavior implements QuackBehavior{ @Override public void quack() { System.out.println("NoQuack"); }}
3、重新设计的鸭子项目:
public abstract class Duck {FlyBehavior mFlyBehavior;QuackBehavior mQuackBehavior; //为行为接口类型声明两个引用变量public Duck() {}public void Fly() {mFlyBehavior.fly();}public void Quack() {mQuackBehavior.quack();}public abstract void display(); public void swim(){ System.out.println("im swiming"); } public void SetQuackBehavoir(QuackBehavior qb) { mQuackBehavior = qb; } public void SetFlyBehavoir(FlyBehavior fb) { //动态设定行为 mFlyBehavior = fb; }}
4、绿头鸭
public class GreenHeadDuck extends Duck {public GreenHeadDuck() {mFlyBehavior = new GoodFlyBehavior();mQuackBehavior = new GaGaQuackBehavior();}@Overridepublic void display() {...}}
策略模式总结
1、策略模式:定义算法族,分别封装起来,让它们之间可以相互替换,此模式让行为算法的变化独立于算法的使用者。
2、策略模式是一个较为容易理解和使用的设计模式,是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。使用者需要理解所有具体策略类之间的区别,以便选择合适的算法。总的原则:分离变化部分,封装接口,基于接口编程各种功能。
0 0
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 郝斌的C语言基础 121 指针热身
- mySQL中的内外连接
- 分词工具关键词提取对比
- javascript学习第一章:基础知识的学习
- 观察者模式
- 设计模式之策略模式
- JM8.6 ImageParameter结构体中ipremode变量 详解
- 插入排序
- 物联网战略的成败在于开放性
- char encode——ASCII
- android:genymotion连接本地服务器
- 编程之法(字符串的包含)
- fluent 接口(链式调用的接口)
- 简谈数据类型