Strategy策略设计模式

本文介绍了策略模式的概念、特点及应用场景,并通过实例演示了如何在Java中实现策略模式,以解决算法选择的问题。

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

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. Command命令设计模式
  2. Singleton单例设计模式
  3. Decorator装饰设计模式
  4. Template模板模式
  5. Strategy策略设计模式
  6. Proxy代理设计模式
  7. Factory工厂类设计模式
  8. 设计模式的6大基本原则

文章目录:

1.策略模式定义

2.策略模式的特点

3.策略模式的缺点


策略模式(Strategy Pattern)是行为设计模式之一,它定义了一系列算法,并将每个算法封装起来,使得它们可以相互替换。策略模式让算法在客户端调用它时独立于客户端而变化,即策略模式可以在运行时根据需要选择不同的算法。

1. 模式结构

策略模式涉及以下几个主要角色:

  • 策略接口(Strategy Interface):定义所有支持的算法的公共接口,客户端通过这个接口调用具体的策略。
  • 具体策略类(Concrete Strategies):实现了策略接口的具体算法或行为。
  • 上下文类(Context):维护对策略对象的引用,客户端通过上下文类来调用具体的策略。

2. 优点

  • 可扩展性强:可以在不修改现有代码的情况下增加新的策略。
  • 避免多重条件语句:策略模式可以替代在代码中使用的条件语句,使代码更清晰、更具可读性。
  • 策略之间的独立性:不同的策略是相互独立的变化点,客户端可以根据需要选择使用。

3. 缺点

  • 策略类增多:如果策略过多,会导致类的数量增多,增加代码的复杂性。
  • 客户端必须了解不同策略的差异:客户端需要知道每个策略的作用,以便选择合适的策略。

4. 使用场景

  • 当一个系统有许多类时,而这些类仅在它们的行为(即算法或业务逻辑)上有所不同。
  • 需要在不同情况下使用不同的策略,但又不希望使用条件判断语句来选择具体的策略。
  • 需要屏蔽算法的实现细节,让算法独立于使用它的客户端。

1.策略模式定义

Strategy模式也叫作行为模式;它对一系列算法进行封装,提供接口,使用哪一种算法,它把选择权交给客户端的用户,使用哪种算法让用户决定。


2.策略模式的特点

(1)提供了可以替换继承关系的方法

(2)也避免了使用多重条件转移语句


策略模式的Demo:

1.方法接口:

package strategypattern2;

public interface MethodInterface {
	//方法
	public void method();
}

2.方法的实现部分一:

package strategypattern2;

public class WalkMethod implements MethodInterface{	
	@Override
	public void method() {
		// TODO Auto-generated method stub
		System.out.println("走路!!!");
	}
}

3.方法的实现部分二:

package strategypattern2;

public class RunMethod implements MethodInterface{
	@Override
	public void method() {
		// TODO Auto-generated method stub
		System.out.println("跑步....");
	}	
}

4.策略模式调用方法:

package strategypattern2;
/**
*类描述:选择需要的算法
*@author: 张宇
*@date: 日期: 2018年7月30日 时间: 下午7:13:01
 */
public class ContextMethod {

	private MethodInterface methodInterface;
	public ContextMethod(MethodInterface methodInterface){
		this.methodInterface=methodInterface;
	}
	public void run(){
		this.methodInterface.method();
	}
}

5.客户端模式的测试类:

package strategypattern2;
/**
*类描述:简单的策略设计模式
*@author: 张宇
*@date: 日期: 2018年7月30日 时间: 下午7:10:04
 */
public class Cilent {
    public static void main(String[]args){
    	ContextMethod context=new ContextMethod(new RunMethod());
    	context.run();
    	System.out.println("--------------------------------");
    	ContextMethod context1=new ContextMethod(new WalkMethod());
    	context1.run();
    }
}

运行结果:

跑步....
--------------------------------
走路!!!

       策略模式在选择算法的时候用到,比如:打折活动,对于初级会员打折多少,中级会员打折多少,高级会员打折多少用到策略模式。支付的时候,选择是微信支付,支付宝支付,还是信用卡支付,也是用到策略模式(其实它和工厂设计模式相似)。

     策略模式也在spring框架中用到,和抽象工厂一起进行使用的;例如:HierarchicalBeanFactory、ListableBeanFactory、 ConfigurableBeanFactory在进行选择的时候,利用了策略模式进行自动的选择,而不是由我们自己去处理。   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值