设计模式——策略模式

          HeadFirst中策略模式的定义:策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

          策略模式体现的设计原则:1.封装变化,把会变化的部分封装起来,让其他部分不受到影响。使代码更加有弹性。

                                            2.面向接口编程,而不是面向实现编程。更易于维护和扩展,更有条理。

          策略模式的典型应用:CRM的报价策略,GUI编程中布局管理器的底层架构等等。

          自己写的一个Demo(注释比较直接):

  

package com.wxisme.strategy;

/**
 * 策略接口,用来统一策略的具体实现
 * @author wxisme
 *
 */
public interface Strategy {
	public void action();
}

 

package com.wxisme.strategy;
/**
 * 策略的上下文交互,用来封装策略。
 * @author wxisme
 *
 */
public class Context {
	Strategy strategy;
	
	public Context(Strategy strategy) {
		this.strategy = strategy;
	}
	
	public void setStrategy(Strategy strategy) {
		this.strategy = strategy;
	}
	
	public void executeAction() {
		this.strategy.action();
	}
}

 

package com.wxisme.strategy;
/**
 * 策略的具体实现类
 * @author wxisme
 *
 */
public class StrategyOne implements Strategy{
	@Override
	public void action() {
		System.out.println("one action.");
	}
	
}

 

package com.wxisme.strategy;
/**
 * 策略的具体实现类
 * @author wxisme
 *
 */
public class StrategyTwo implements Strategy{
	@Override
	public void action() {
		System.out.println("two action.");
	}
	
}

 

package com.wxisme.strategy;
/**
 * 面向客户的客户端,只保留封装好的策略。没有具体的实现。
 * 应用:CRM的报价策略,GUI编程中布局管理器的底层架构
 * @author wxisme
 *
 */
public class Client {

	public static void main(String[] args) {
		/**
		 * 运用多态,面向接口编程,可维护可扩展。
		 * 可以把new StrategyOne()改成任何一个实现类
		 * 而不用修改其他任何代码。
		 */
		Strategy strategy = new StrategyOne();
		//用上下文交互类封装策略接口,用户可以通过此交互类来调用任何一个策略。
		Context c = new Context(strategy);
		//调用执行方法就能实现不同的策略动作。
		c.executeAction();
	}

}

 

        

你可能感兴趣的:(设计模式——策略模式)