简单_策略模式(Strategy)

 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)



package design.strategy;
/** 
 * @author 作者 E-mail: [email protected]
 * @version 创建时间:2012-1-12 下午08:36:11 <br>
 * 
 */
public class Test {
	public static void main(String[] args) {
		/**
		 * 策略模式   和桥梁模式很像,
		 * 不过桥梁模式是为了解决多维度扩展的问题,而策略模式解决的依然只是一个纬度,
		 * 这可能是他们本质的区别
		 * 
		 * Strategy:定义一个策略接口,所有实现该策略接口的类为具体的策略类
		 * Context:策略模式的上下文类,内部维护一个Strategy的实例,这样就能运行时执行指定的策略算法。
		 * ConcreateStratA/ConcreateStratB:具体的策略实现类
		 * 
		 * 策略类的应用:
		 * 1、运行时动态改变具体实现策略
		 * 2、对客户端隐藏具体的实现细节
		 * 
		 * 在JDK中java.util.Comparator/javax.servlet.http.HttpServlet
		 * /javax.servlet.Filter#doFilter()即运用了策略模式
		 */
		Context context = new Context(new ConcreateStratA());
		context.contextInterface();
		
		context = new Context(new ConcreateStratB());
		context.contextInterface();
	}
}

package design.strategy;

/**
 * @author 作者 E-mail: [email protected]
 * @version 创建时间:2012-1-12 下午08:37:57 <br>
 * Strategy接口定义了一个策略,凡是实现了该接口的类都具有算法的功能 Comparable接口也是策略模式,
 * Comparable接口就是定义了一个比较器,凡是实现了该比较器的类都具有比较的功能。
 * 但是java.util.Comparator也是和java.lang.Comparable一样,那为什么要弄2个同样都具有比较器的接口呢?
 * java.util.Comparator是为了动态实现比较器而生的
 */
public interface Strategy {
	void algorithmInterface();
}

package design.strategy;

/**
 * @author 作者 E-mail: [email protected]
 * @version 创建时间:2012-1-12 下午08:37:37 <br>
 * 
 */
public class Context {
	protected Strategy strategy;

	public Context(Strategy strategy) {
		this.strategy = strategy;
	}

	public void contextInterface() {
		this.strategy.algorithmInterface();
	}
}

package design.strategy;
/** 
 * @author 作者 E-mail: [email protected]
 * @version 创建时间:2012-1-12 下午08:38:54 <br>
 * 策略接口的实现类
 */
public class ConcreateStratA implements Strategy{

	public void algorithmInterface() {
		System.out.println("算法A");
	}
}

package design.strategy;
/** 
 * @author 作者 E-mail: [email protected]
 * @version 创建时间:2012-1-12 下午08:38:54 <br>
 * 
 */
public class ConcreateStratB implements Strategy{

	public void algorithmInterface() {
		System.out.println("算法B");		
	}
}

猜你喜欢

转载自jqsl2012.iteye.com/blog/1377762