策略模式

1.策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

  • 策略模式结构图

2.策略模式解析

  • 策略模式是一种定义一系列算法的方法。这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
  • 策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法的公共功能
  • 在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象。

3.个人理解

  • 策略模式是将一个公共的功能或者方法封装在一个接口interface Strategy或者是abstract class Strategy当中;
  • 具体类继承Strategy,重写方法来实现具体的实现方式;
  • Context类是用来承载上下文,初始化时传入具体的策略对象;并有一个上下文接口方法,用于调用算法。

4.代码实现

  • 抽象策略角色类
public abstract class AbstractStrategy {
	public abstract int caculate(int a, int b);
}
或者
/**
 * 
 * @author yifei
 * 定义了一个总的接口,实现了一个方法
 *
 */
public interface InterfaceStrategy {
	public int caculate(int a, int b);
}
  • 具体策略角色类
public class AddStrategy implements InterfaceStrategy {

	@Override
	public int caculate(int a, int b) {
		// TODO Auto-generated method stub
		int c = a + b;
		return c;
	}

}

public class SubStrategy implements InterfaceStrategy {

	@Override
	public int caculate(int a, int b) {
		// TODO Auto-generated method stub
		int c = a - b;
		return c;
	}
}

public class MultStrategy implements InterfaceStrategy {

	@Override
	public int caculate(int a, int b) {
		// TODO Auto-generated method stub
		int c = a * b;
		return c;
	}

}

public class DivStrategy implements InterfaceStrategy {

	@Override
	public int caculate(int a, int b) {
		// TODO Auto-generated method stub
		int c = 0;
		if(b != 0) {
			c = a / b;
		}
		return c;
	}

}
  • 环境角色类
public class StrategyContext {
	private InterfaceStrategy strategy;
	
	public StrategyContext(InterfaceStrategy strategy) {
		this.strategy = strategy;
	}
	
	public int getResult(int a, int b) {
		return strategy.caculate(a, b);
	}
}
  • 客户端调用
public class Main {
	public static void main(String[] args) {
		StrategyContext strategyContext = null;

		int a = 1;
		int b = 2;

		strategyContext = new StrategyContext(new AddStrategy());
		System.out.println(strategyContext.getResult(a, b));
		strategyContext = new StrategyContext(new SubStrategy());
		System.out.println(strategyContext.getResult(a, b));
		strategyContext = new StrategyContext(new MultStrategy());
		System.out.println(strategyContext.getResult(a, b));
		strategyContext = new StrategyContext(new DivStrategy());
		System.out.println(strategyContext.getResult(a, b));
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值