才发现昨天桥接模式上传的代码没通过审核,有点搞不清楚是怎么回事,也懒得问了!代码基本都贴在文章里了,虽然看似有点黑了XX,真的只是个无聊的玩笑而已!
我还是别费脑想故事了,还是规规矩矩的陈述别人的例子吧!虽然没什么人看到这些吐槽式的例子,但是还是为自己的形象着想吧!我不是什么女生,但也不是什么屌丝,我只是喜欢写代码,偶尔吐吐槽而已……没关系的,我写给自己看的而已,大不了代码不传了,反正基本全部都贴出来了!任性!!!
策略模式,定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,目的是让算法独立于使用它的客户而独立变化。
策略模式由三部分组成:
1.抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
2.具体策略角色:包装了相关的算法和行为。
3.环境角色:持有一个策略类的引用,最终给客户端调用。
概念神马的就提这么多吧!上类图:
package com.freedom.strategy;
public interface ICalculator {
public int calculator(String exp);
}
package com.freedom.strategy;
public class AbstractCalculator {
public int[] split(String exp, String opt) {
String array[] = exp.split(opt);
int arrayInt[] = new int[2];
arrayInt[0] = Integer.parseInt(array[0]);
arrayInt[1] = Integer.parseInt(array[1]);
return arrayInt;
}
}
package com.freedom.strategy;
public class Plus extends AbstractCalculator implements ICalculator {
@Override
public int calculator(String exp) {
int arrayInt[] = split(exp, "\\+");
return arrayInt[0]+arrayInt[1];
}
}
package com.freedom.strategy;
public class Minus extends AbstractCalculator implements ICalculator {
@Override
public int calculator(String exp) {
int arrayInt[] = split(exp, "\\-");
return arrayInt[0]-arrayInt[1];
}
}
package com.freedom.strategy;
public class Multiply extends AbstractCalculator implements ICalculator {
@Override
public int calculator(String exp) {
int arrayInt[] = split(exp, "\\*");
return arrayInt[0]*arrayInt[1];
}
}
package com.freedom.strategy;
import org.junit.Test;
public class TestStrategy {
@Test
public void test() {
String exp = "3+5";
ICalculator ic = new Plus();
int result = ic.calculator(exp);
System.out.println(result);
String exp2 = "3-5";
ICalculator ic2 = new Minus();
int result2 = ic2.calculator(exp2);
System.out.println(result2);
String exp3 = "3*5";
ICalculator ic3 = new Multiply();
int result3 = ic3.calculator(exp3);
System.out.println(result3);
}
}
小结:
优点:
由以上可以看出,策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。
缺点:
1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。