策略设计模式

一、策略设计模式简介

策略设计模式的主要思想就是针对一组算法,将每个算法封装到具有共同接口的独立的类中,从而使它们可以相互替换。能够根据所传递的参数对象的不同而具有不同行为的方法被称为策略设计模式,这类方法包含所要执行算法中固定不变的部分,而“策略”包含变化的部分,策略就是传递进去的参数对象,它包含要执行的代码。策略模式的最大特点是使算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。

二、策略设计模式的组成
  • 抽象的策略略角色通常情况下是接口或者抽象类。
  • 具体策略角色继承抽象的策略角色,实现各自的具体的的算法和行为。
  • 环境角色内部持有抽象的策略角色的引用,接收客户端向环境角色中传递的具体的策略类。
三、案例

1、定义抽象的策略角色

public abstract class Processor {
	public String name(){
		return getClass().getSimpleName();
	}
	abstract String process(Object input);
}

2、定义具体策略角色

public class Downcase extends Processor{

	@Override
	String process(Object input) {
		
		return ((String)input).toLowerCase();
	}

}
public class Upcase extends  Processor{
	
	@Override
	String process(Object input) {
		
		return ((String)input).toUpperCase();
	}
	
}
public class Splitter extends Processor{

	@Override
	String process(Object input) {
		
		return Arrays.toString(((String)input).split(" "));
	}

}

3、定义环境角色

public class Environment {
	private Processor processor;
	public void setStrategy(Processor processor){
		this.processor = processor;
	}
	public void fun(String input){
		System.out.println("Using processor" + processor.name());
		System.out.println(processor.process(input));
	}
}

4、测试

public class Test {
	public static void main(String[] args){
		String str = "Success is getting what you want,Happiness is wanting what you get.";
		Environment environment = new Environment();
		
		environment.setStrategy(new Upcase());
		environment.fun(str);
		
		environment.setStrategy(new Downcase());
		environment.fun(str);
		
		environment.setStrategy(new Splitter());
		environment.fun(str);
	}
}

输出

Using processorUpcase
SUCCESS IS GETTING WHAT YOU WANT,HAPPINESS IS WANTING WHAT YOU GET.
Using processorDowncase
success is getting what you want,happiness is wanting what you get.
Using processorSplitter
[Success, is, getting, what, you, want,Happiness, is, wanting, what, you, get.]
四、策略模式的特点

策略模式的优点:
(1)结构清晰,降低了耦合度,易于拓展。上例中如果需要再添加一种出行方式,只需要修改较少的已有代码。
(2)对客户隐藏具体策略(算法)的实现细节,封装性更好,数据更安全。

策略模式的缺点:
随着策略数量的增加,具体实现子类会变得越来越多。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值