设计模式学习-策略模式

本文介绍了策略模式的概念及其在软件设计中的应用。策略模式通过定义一系列可互换的算法接口,允许客户端独立于具体算法的实现。文章通过简易计算器的例子展示了如何使用策略模式提高代码的灵活性和复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是策略模式:策略模式将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现并使他们可以相互替换,从而导致客户端程序独立于算法的改变。

策略模式的实现

1、通过分离变化得出的策略接口Strategy

2、Strategy的实现类

3、客户程序“有一个”Strategy

4、在客户程序中选择/组装正确的Strategy实现

策略模式的优点

1、使用了组合,使框架更加灵活

2、富有弹性,可以较好的应对变化(开闭原则)

3、更好的代码复用性(相对于继承)

4、消除大量的条件语句

策略模式的缺点

1、客户代码需要了解每个策略实现的细节

2、增加了对象的数目

策略模式的适用场景

1、许多相关的类仅仅是行为差异

2、运行时选取不同的算法变体

3、运行条件语句在多个分支中选取一


实现

我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。

StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。




还是以简易计算器为例子

/**
 * 
 */
package simplefactory.study.factory;

/**
 * @author Byp
 *
 */
public interface Operation {

	// 获得计算结果
	public double getresult(double numberA, double numberB);

}

package simplefactory.study.factory;

public class OperateSub implements Operation {

	
	@Override
	public double getresult(double numberA, double numberB) {
		double result=numberA-numberB;
		return result;
	}

}

package simplefactory.study.factory;

public class OperateAdd implements Operation {


	@Override
	public double getresult(double numberA, double numberB) {
		double resule = numberA+numberB;
		return resule;
	}

}
package simplefactory.study.factory;

public class Context {

	private Operation operation;

	public Context(Operation operation) {
		this.operation = operation;
	}

	public double result(double numberA, double numberB) {
		return operation.getresult(numberA, numberB);
	}

}

package simplefactory.study.factory;

public class Test {

	public static void main(String[] args) {

		Context context = new Context(new OperateAdd());
		System.out.println(context.result(14, 17));

	}

}

策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方法调用所有的算法,减少了各种算法类与使用算法类之间的耦合。策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于取出这些算法中的公共功能,另外策略模式还简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值