策略模式(Strategy)

1、策略模式结构图:

在这里插入图片描述

2.模式分析:

模式涉及到三个角色:

  • 环境(Context) 角色: 持有一个Strategy类的引用(上下文对象),负责和具体的策略类交互。

  • 抽象策略(Strategy)角色: 这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策咯类所需的接口。

  • 具体策略(ConcreteStrategy) 角色: 封装了具体的算法或行为。

3.代码:

//Strategy类,定义所以支持的算法的公共接口
//抽象算法类
abstract class Strategy {
	//算法方法
	public abstract void AlgorithmInterface();
}
//ConcreteStrategy,封装了具体的算法或行为,继承于//Strategy
public class ConcreteStrategyA extends Strategy{

	@Override
	public void AlgorithmInterface() {
		// TODO Auto-generated method stub
		System.out.println("算法A实现");
	}

}

public class ConcreteStrategyB extends Strategy{

	@Override
	public void AlgorithmInterface() {
		// TODO Auto-generated method stub
		System.out.println("算法B实现");
	}


}

public class ConcreteStrategyC extends Strategy{

	@Override
	public void AlgorithmInterface() {
		// TODO Auto-generated method stub
		System.out.println("算法C实现");
	}

}
//Context,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。
public class Context {
	Strategy strategy;
	public Context(Strategy strategy) {//初始化时,传入具体的策略对象
		this.strategy = strategy;
	}
	public void ContextInterface() {//根据具体的策略对象,调用其算法的方法
		strategy.AlgorithmInterface();
	}
}
//客户端:
package 策略模式;

public class Main {
		public static void main(String[] args) {
		Context context;
		context = new Context(new ConcreteStrategyA());
		context.ContextInterface();
		context = new Context(new ConcreteStrategyB());
		context.ContextInterface();
		context = new Context(new ConcreteStrategyC());
		context.ContextInterface();
		}
}

4、策略模式的优点:

  • 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。

  • 策略模式提供了管理相关的算法族的办法。

  • 策略模式提供了可以替换继承关系的办法。 使用策略模式可以避免使用多重条件转移语句。

5、策略模式的缺点:

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值