

public void Share{
public void shareOptions(String option){
if(option.equals("微博")){
//function1();
//...
}else if(option.equals("微信")){
//function2();
//...
}else if(option.equals("朋友圈")){
//function3();
//...
}else if(option.equals("QQ")){
//function4();
//...
}
//...
}
策略指的是计策、谋略,而模式一般指人为整理而成的,在某种场景下重复发生的问题的解决办法。在编程中,我们可以把策略看做是“算法”,而策略模式,按照GoF的定义,就是我们设计一些算法,把它们封装起来,让它们可以相互替换,这样就可以轻松地切换不同的算法来解决同一个问题。
Strategy(策略)Strategy角色负责决定实现策略所必需的接口(API)。在示例程序中,由strategy接口扮演此角色。
ConcreteStrategy(具体的策略)ConcreteStrategy角色负责实现Strategy角色的接口(API),即负责实现具体的策略(战略、方向、方法和算法)。
Context(上下文)负责使用Strategy角色。Context角色保存了ConcreteStrategy角色的实例,并使用ConcreteStrategy角色去实现需求(总之,还是要调用Strategy角色的接口(API))。

//定义策略接口
public interface DealStrategy{
void dealMythod(String option);
}
//定义具体的策略1
public class DealSina implements DealStrategy{
@override
public void dealMythod(String option){
//...
}
}
//定义具体的策略2
public class DealWeChat implements DealStrategy{
@override
public void dealMythod(String option){
//...
}
}
//定义上下文,负责使用DealStrategy角色
public static class DealContext{
private String type;
private DealStrategy deal;
public DealContext(String type,DealStrategy deal){
this.type = type;
this.deal = deal;
}
public DealStrategy getDeal(){
return deal;
}
public boolean options(String type){
return this.type.equals(type);
}
}
public void Share{
private static List<DealContext> algs = new ArrayList();
//静态代码块,先加载所有的策略
static {
algs.add(new DealContext("Sina",new DealSina()));
algs.add(new DealContext("WeChat",new DealWeChat()));
}
public void shareOptions(String type){
DealStrategy dealStrategy = null;
for (DealContext deal : algs) {
if (deal.options(type)) {
dealStrategy = deal.getDeal();
break;
}
}
dealStrategy.dealMythod(type);
}
}
//策略接口
public interface Comparator<T> {
int compare(T o1, T o2);
}
//需要我们来定义具体的策略
public class sorter implements Comparator{
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
}
//一般我们会用更简洁的Lambda表达式来实现
一个项目中有许多类,它们之间的区别仅在于它们的行为,希望动态地让一个对象在许多行为中选择一种行为时;
一个项目需要动态地在几种算法中选择一种时;
一个对象有很多的行为,不想使用多重的条件选择语句来选择使用哪个行为时。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31499124/viewspace-2690732/ ,如需转载,请注明出处,否则将追究法律责任。