本文实例讲述了Java设计模式之策略模式原理与用法。分享给大家供大家参考,具体如下:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。其JDK中里面的TreeSet类和TreeMap类就用到了策略模式。这两个类是带排序的集合类,其中排序的规则就相当于策略模式里定义的一系列算法,而集合类就相当于是策略模式里的环境类,供用户使用,用只知道TreeSet和TreeMap是带排序的,至于怎么排序的,是由排序的算法决定的。
:策略类,通常由一个接口或者抽象类实现。
:实现了抽象策略类,并包装了相关的算法和行为。
:持有一个策略类的引用,最终给客户端调用。
下面提供一个简单的策略模式的代码实例:
<强> 1。抽象策略角色强>:定义一个接口策略。
包com.test;/* * *策略模式抽象角色 * @author zhouwen * */公共接口策略{ 公共int计算(int, int b); } >之前<强> 2。具体策略角色强>:实现策略接口。例子中是实现加减乘除的运算。
包com.test;/* * *策略模式具体策略类 *实现加法运算 * @author zhouwen * */公共类AddStrategy实现策略{ @Override 公共int计算(int, int b) { 返回一个+ b; } } >之前包com.test;/* * *策略模式具体策略类 *实现减法运算 * @author zhouwen * */公共类SubtractStrategy实现策略{ @Override 公共int计算(int, int b) { 返回一个- b; } } >之前包com.test;/* * *策略模式具体策略类 *实现乘法运算 * @author zhouwen * */公共类MultiplyStragety实现策略{ @Override 公共int计算(int, int b) { 返回一个* b; } } >之前包com.test;/* * *策略模式具体策略类 *实现除法运算 * @author zhouwen * */公共类DivideStrategy实现策略{ @Override 公共int计算(int, int b) { 返回a/b; } } >之前<强> 3。环境角色强>:在环境角色中定义一个抽象角色的引用,并暴露出计算的方法,供客户端调用。
包com.test;/* * *策略模式环境类 * @author zhouwen * */公共类环境{ 私人战略策略; 公共环境(战略策略){ 这一点。策略=策略; }//用以改变策略 公共空间setStrategy(战略策略){ 这一点。策略=策略; } 公共策略getStrategy () { 回报策略; }//暴露计算的接口,供客户端调用 公共int计算(int, int b) { 回报策略。计算(a, b); } } >之前<>强4。最后编写客户端的代码:强>
包com.test; 公共类客户{ 公共静态void main (String [] args) { AddStrategy AddStrategy=new AddStrategy (); 环境环境=新环境(addStrategy); System.out.println(环境。计算(3,4)); SubtractStrategy subStrategy=new SubtractStrategy (); environment.setStrategy (subStrategy); System.out.println(环境。计算(3,4)); MultiplyStragety multiplyStrategy=new MultiplyStragety (); environment.setStrategy (multiplyStrategy); System.out.println(环境。计算(3,4)); DivideStrategy DivideStrategy=new DivideStrategy (); environment.setStrategy (divideStrategy); System.out.println(环境。计算(3,4)); } } >之前
由客户端的<代码> System.out.println(环境。计算(3,4));代码>这句代码,我们并不知道具体调用的是哪个实现类,只有知道了传给环境角色的具体策略类我们才知道调用哪个类,这样就能实现客户端和具体策略算法的分离,使程序易于切换,易于理解,易于扩展。
<>强优点:强>
1。策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得他们可以相互替换。如提供的例子中通过集方法对策略进行替换。
Java设计模式之策略模式原理与用法实例详解