前言

一年前开始从c语言编程转站到java语言编程,突然发现很多方式不一样,从过程式到OO式,思维一下在完成没有转变过来,即使已经编程了一年时间,却发现对Java的设计模式可以说是一无所知,现在开始学习设计模式,基于《Head First设计模式》。

策略模式

定义:策略模式主要是为了定义算法族,分别封装起来,让算法之间可以互相替换,并让算法的变化独立于使用其算法的用户。

举例:书上经典例子。

如何支持不同类型的鸭子Duck的不同行为,而且可以动态改变行为?

public abstract class Duck {

class flyBehavior fly;

class QuackBehavior quack;

}


public interface QuackBehuavior{

public void quack();

}

public interface FlyBehavior{

public void fly();

}

1个抽象类和2个接口,分别将Duck抽象出来,并且将其不同行为也抽象出来。这个时候定义到任何具体Duck类,都可以定义自己的fly和quack行为。并且通过set和get方式改变行为。如

public class FlyNoway implement FlyBehavior {

public void fly() {

print "Fly without any";

}

}

public class Quack implement QuackBehavior {

...

}

public class ModelDuck extends Duck {

public ModelDuck() {

fly = new FlyNoway()

quack = new Quack();

}

public void setFly(FlyBehavior fly) {

this.fly = fly;

}

...

}

这样fly和quack的行为可以动态根据set方法来改变。

策略模式涉及到几个OO设计原则:

1)多用组合,少用继承:好处是,可以动态扩展各类行为

2)针对接口编程,不针对实现编程:利于扩展

3)封装变化:减少以后的需求,对现有代码的修改。


总结

策略模式的实现主要是将需要动态变化的算法(即变化的行为,如fly和quack)使用组合方式写入主体(Duck)中。

PS:请注意体会并在实践中应用。



更多相关文章

  1. 单例模式中的懒汉模式和饿汉模式

随机推荐

  1. php使用simplexml来解析xml
  2. Java对象、Json、Xml转换工具Jackson使用
  3. XML—XML文件约束之DTD详解
  4. 疯狂XML学习笔记(13)---------XML DOM
  5. Java&Xml教程(十)XML作为属性文件使用
  6. XML—XML介绍和基本语法
  7. 疯狂XML学习笔记(12)------------XPath
  8. Java&Xml教程(八)使用JDOM将Java对象转换为
  9. ajax的xmlHttpRequest对象
  10. Java&Xml教程(七)使用JDOM修改XML文件内容