设计模式-策略模式(Strategy)

概述:在策略模式中,定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。

白话解释:策略模式是对算法的封装,把一系列的算法封装到对应的类中

类型:行为类模式

优劣:

  1. 优点:算法可以自由切换;避免使用if else等多重判断;扩展性高;
  2. 缺点:策略类随着算法的增加会增多;所有策略类都需要对外暴露

类图:
在这里插入图片描述

示例:

定义抽象类

package test.strategy;
/**
 * 策略接口
 * @author sunlh
 *
 */
public interface Strategy {

	int doOperation(int num1, int num2);
	
}

定义具体策略(算法)

package test.strategy;
/**
 * 相加
 * @author sunlh
 *
 */
public class OperationAdd implements Strategy {

	@Override
	public int doOperation(int num1, int num2) {
		return num1 + num2;
	}

}

package test.strategy;
/**
 * 相减
 * @author sunlh
 *
 */
public class OperationSubStract implements Strategy {

	@Override
	public int doOperation(int num1, int num2) {
		return num1 - num2;
	}

}

package test.strategy;
/**
 * 相乘
 * @author sunlh
 *
 */
public class OperationMultiply implements Strategy {

	@Override
	public int doOperation(int num1, int num2) {
		return num1 * num2;
	}

}

定义封装类

package test.strategy;
/**
 * 封装类
 * 调用对应的策略对象方法
 * @author sunlh
 *
 */
public class Context {
	
	private Strategy strategy;
	
	public Context(Strategy strategy) {
		this.strategy = strategy;
	}
	
	/**
	 * 调用算法
	 * @param num1
	 * @param num2
	 * @return 算法结果
	 */
	public int executeStrategy(int num1, int num2) {
		return this.strategy.doOperation(num1, num2);
	}
	
}

测试类

package test.strategy;

public class Test {
	
	public static void main(String[] args) {
		
		int num1 = 10,num2 = 8;
		// 相加
		Context context1 = new Context(new OperationAdd());
		int result1 = context1.executeStrategy(num1, num2);
		System.out.println(num1 + " + " + num2 + " = " + result1);
		// 相减
		Context context2 = new Context(new OperationSubStract());
		int result2 = context2.executeStrategy(num1, num2);
		System.out.println(num1 + " - " + num2 + " = " + result2);
		// 相乘
		Context context3 = new Context(new OperationMultiply());
		int result3 = context3.executeStrategy(num1, num2);
		System.out.println(num1 + " * " + num2 + " = " + result3);
	}
}

测试结果:

10 + 8 = 18
10 - 8 = 2
10 * 8 = 80
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值