设计模式 - 策略模式(Strategy Pattern) 详解(二)

2014-11-23 19:36:57 · 作者: · 浏览: 13
k#display() */ @Override public void display() { // TODO Auto-generated method stub System.out.println(I'm a real Mallard duck! ); } }
/**
 * 
 */
package strategy;

/**
 * @author Administrator
 *
 */
public class ModelDuck extends Duck {

	public ModelDuck() {
		flyBehavior = new FlyNoWay();
		quackBehavior = new Quack();
	}
	
	/* (non-Javadoc)
	 * @see strategy.Duck#display()
	 */
	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println(I'm a model duck. );
	}

}

执行时, 只需要执行各个子类继承 父类的方法(perform), 即可, 也可以使用set()方法改变其行为;

代码:

/**
 * 
 */
package strategy;

/**
 * @author Administrator
 *
 */
public class MiniDuckSimulator {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Duck mallard = new MallardDuck();
		mallard.performQuack();
		mallard.performFly();
		
		Duck model = new ModelDuck();
		model.performFly();
		model.performQuack();
		
		model.setFlyBehavior(new FlyRocketPowerd());
		model.performFly();
	}

}

面向对象的原则:

1. 封装变化的部分;

2. 多用组合, 少用继承;

3. 针对接口编程, 不针对实现编程;

\