策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)
Context(应用场景):
1、需要使用ConcreteStrategy提供的算法。
2、 内部维护一个Strategy的实例。
3、 负责动态设置运行时Strategy具体的实现算法。
4、负责跟Strategy之间的交互和数据传递。
Strategy(抽象策略类):
1、 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。
ConcreteStrategy(具体策略类):
2、 实现了Strategy定义的接口,提供具体的算法实现。
应用场景
应用场景:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。(例如FlyBehavior和QuackBehavior)
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充)
3、 对客户(Duck)隐藏具体策略(算法)的实现细节,彼此完全独立。
优缺点
优点:
1、 提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
2、 避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。
缺点:
1、 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。
1.定义一个接口CreateIdea,
public interface CreateIdea()
{
public void DoIdea();
}
2.第一个实现类。
public class CreateIdeaA implements CreateIdea
{
public void DoIdea()
{
System.out.println("第一个想法!");
}
}
3.第二个实现类。
public class CreateIdeaB implements CreateIdea
{
public void DoIdea()
{
System.out.println("第二个想法!");
}
}
public class GetIdea()
{
public CreateIdea createIdea;
public GetIdea(CreateIdea createIdea)
{
this.createIdea = createIdea;
}
public void DoIdea()
{
this.createIdea.DoIdea();
}
}
分享到:
相关推荐
java 策略模式
java 策略模式的简单小例子,可以帮助了解策略模式的使用
java策略模式的小例子,学习java策略模式的简单例子,代码虽然简单不错很容易明白
利用java策略模式编写的一个排序方法切换,的小例子。用于学习策略模式是很好的方式。界面写的还可以,仅供大家参考学习
java策略模式示例代码,用于初学者学习使用,示例简单易懂
Java设计模式策略模式Demo
用简单的描述让你理解策略模式的概念 用生动的比喻让你看到它的精髓,附带案例
策略模式例子,纯代码,copy后即可运行; 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中...
对应我博客的策略模式的源代码,可以参见我的博客!
这是一个Java 策略模式的demo 符合封装变化 针对接口编程 多用组合少用继承的OO原则
java 策略模式的源码,下载可以直接运行
JAVA策略模式详解
javase 设计模式的strategy pattern《JAVA与模式》之策略模式详解
这是一个基于JAVA的策略设计模式。松耦合,可扩展
根据讲义中策略模式的案例,设计和实现一个基于策略模式的角色扮演游戏。其中包括主要有角色类及其子类、相关的行为类集合和测试类等。通过本次实验,能够在掌握面向对象程序设计的基本思想基础上;深化理解Java ...
专题资料(2021-2022年)java策略模式.docx
策略模式在实际项目中的应用二,该测试demo为普通项目,导入build path一下lib目录下的jar包,然后运行测试类即可在控制台看到测试结果