Strategy pattern
Definition:
The strategy pattern defines a family of algorithms,encapsulate each one,and makes them interchangeable.Strategy lets the algorithm vary independently from clients that use it.Whereby an algorithm's behaviour can be selected at runtime.
Intent
Encapsulate what varys,and conform to the OCP principle.
/**
* The classes that implements a concrete strategy should implement this.
* The context class uses this to call the concrete strategy.*/
public interface Stragegy{
int execute(int a,int b);
}
/** Implements the algorithm using the strategy interface*/
class Add implements Strategy {
public int execute(int a,int b){
System.out.println("Called Add's execute()");
return a+b;
}
}
class Subtract implements Strategy{
public int execute(int a,int b){
system.out.println("Called from Subtract's execute()");
return a-b;
}
}
/**Configured with a ConcreteStrategy object and maintains a reference to a
strategy object
*/
class Context{
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public int executeStrategy(int a,int b){
return this.strategy.execute(a,b);
}
}
/** Test the pattern*/
class StrategyExample{
public static void main(String[] args){
Context context = new Context(new Add());
int resultA = context.executeStrategy(3,4);
context = new Context(new Subtract());
int resultS = context.executeStrategy(3,4);
}
}
Usage
validation strategy,sort strategy,and so on.
Applicability
Use Strategy pattern when
1 Many related classes differ only in their behavior.Strategies provide a way to configure a class with one of many behaviors.
2 You need different variants of an algorithm.For example.,you might define algorithms reflecting different space/time trade-offs.Strategies can be used when these variants are implements as a class hierachy of algorithms.
3 an algorithm uses data that clients shouldn't know about.Use the Strategy pattern to avoid exposing complex,algorithm-specific data structures.
4 a class defines many behaviors,and these appears as multiple conditional statements in its operations.Instead of many conditionals,move related conditional branches into their own Strategy class.
Consequence
1 It provides an alternative for subclassing.
2 It eliminates conditional statement.
Drawbacks
1 Clients must be aware of different Strategies.The pattern has a potential drawback in that the client must understand how Strategies differ before it can select the appropriate one.Clients must be exposed to implementation issues.Therefore you should use the Strategy pattern only when the variation in behavior is relevant to clients.
2 Increased number of objects.
- 大小: 14.3 KB
分享到:
相关推荐
策略模式结合模板方法模式
策略模式的 C++ 代码实现, ide :XCode
策略模式定义了方法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 还可以那家咖啡屋,记忆里很温馨,很sugar,或许很多温馨美好的回忆都是于咖啡有关的。 我们常常说设计...
所有模式都可分为类模式和对象模式两种,类模式是继承,对象模式是委托,而桥接模式和策略模式都是将任务委托给另外一个接口去实现,那么两者的区别什么呢?
主要介绍了详解SpringBoot结合策略模式实战套路,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
技术: 1. spring事件驱动(ApplicationEventPublisher) 2. 策略模式处理事件 目的: 1. 通过event,代码逻辑异步处理 2. 通过策略模式,构建具体监听实现 3. 解耦 4. 容错(降低代码块错误风险)
这是策略模式中的一个经典实例,通过鸭子问题,能让学习者更好的了解设计模式,这也是headfirst 设计模式中用的经典实例
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
策略模式实例策略模式实例策略模式实例策略模式实例策略模式实例
策略模式代码,两种方式实现,第一种,通过map存储方式,第二种,通过配置文件加反射方式
策略模式的简单例子,根据《Head First设计模式》中第一章中的Duck编写
策略模式例子,纯代码,copy后即可运行; 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中...
策略模式在实际项目中的应用二,该测试demo为普通项目,导入build path一下lib目录下的jar包,然后运行测试类即可在控制台看到测试结果
处理层的设计采用了设计模式中的策略模式、模板方法模式和工厂模式。 Server端和Client端的实现也采用了分层的设计方式,包含自定义的模型层、视图层和控制层。 说明:程序采用配置文件的方式进行初始化,运行时时请...
55-Java设计模式之策略模式与状态模式1
设计模式中的策略模式,同时兼容简单工厂模式,商场收银模式,易懂可用。
策略模式策略模式策略模式
javascript的策略模式和代理模式简介,附代码
在网络上看到几个加密解密算法,本着"取之于民用之于民"的方针测试一下,并用策略模式将这些算法封装共享。
设计模式中的策略模式,template模式详细讲解。