您的位置:首页 > 编程语言 > Java开发

设计模式学习笔记--策略模式

2016-12-09 17:20 435 查看

二十三、策略模式

策略模式(Strategy Pattern),可以使得一个类的行为或算法,在运行时进行更改。有点类似状态模式,需要创建表示各种策略的对象,

以及一个行为随着策略而变化的context对象,通过策略对象的改变,来改变执行对象的行为算法。

简介

定义一系列的算法,并封装起来作为策略,可相互替换。

- 优点:算法可以自由切换,避免使用多重条件判断,扩展性好。

- 缺点:策略类较多,且需要对外公开。

若是策略类真的多了,可以使用混合模式,不要局限于单一的设计模式。

实现

定义一个活动的
Strategy
接口和它的实现类,以及
Context
,使用了某个策略的行为类。



- 创建接口

Strategy.java


public interface Strategy {
public int doOperation(int num1,int num2);
}


接口实现

OperationAdd.java


public class OperationAdd implements Strategy {
@override
public int doOperation(int num1,int num2){
return num1+num2;
}
}
````
`OperationSubstract.java`

<div class="se-preview-section-delimiter"></div>

```java
public class OperationSubstract implements Strategy{
@override
public int doOperation(int num1,int num2){
return num1-num2;
}
}


OperationMultiply.java


public class OperationMultiply implements Strategy {
@override
public int doOperation(int num1,int num2){
return num1*num2;
}
}


创建行为类

Context.java


public class Context{
private Strategy strategy;

public Context(Strategy strategy){
this.strategy = strategy;
}

public int executeStrategy(int num1,int num2){
return strategy.doOperation(num1,num2);
}
}


演示

StrategyPatternDemo.java


public class StrategyPatternDemo {
public static void main(String[] args){
Context context = new Context(new OperationAdd());
System.out.println("10+5=" + context.executeStrategy(10,5));

context = new Context(new OperationSubstract());
System.out.println("10-5=" + context.executeStrategy(10,5));

context = new Context(new OperationMultiply());
System.out.println("10*5=" + context.executeStrategy(10,5));
}
}


输出

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息