java策略模式 简书_Java设计模式——策略模式

1.策略模式(Strategy Pattern)

分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象。原则就是:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为算法的变化独立于算法的使用者。

2.实现方式

各个类的作用

AlgorithmStrategy:创建一个定义活动的 AlgorithmStrategy接口

* OperationImpl:实现了 AlgorithmStrategy接口的实体策略类

Context:使用该策略的类

AlgorithmStrategyPattern:验证策略改变时的行为

e7a3e5c5b472

3.实例

创建一个接口

AlgorithmStrategy .java

package com.huan.eu;

public interface AlgorithmStrategy {

int operation(int firstNumber,int SecondNumber);

}

创建策略一

AddOperationImpl .java

package com.huan.eu.impl;

import com.huan.eu.AlgorithmStrategy;

public class AddOperationImpl implements AlgorithmStrategy {

public int operation(int firstNumber, int SecondNumber) {

return firstNumber + SecondNumber;

}

}

创建策略二

ReduceOperationImpl .java

package com.huan.eu.impl;

import com.huan.eu.AlgorithmStrategy;

public class ReduceOperationImpl implements AlgorithmStrategy {

public int operation(int firstNumber, int SecondNumber) {

return firstNumber - SecondNumber;

}

}

创建策略三

RideOperationImpl .java

package com.huan.eu.impl;

import com.huan.eu.AlgorithmStrategy;

public class RideOperationImpl implements AlgorithmStrategy{

public int operation(int firstNumber, int SecondNumber) {

return firstNumber * SecondNumber;

}

}

使用策略的类

Context .java

package com.huan.eu;

public class Context {

private AlgorithmStrategy algorithmStrategy;

public Context(AlgorithmStrategy algorithmStrategy){

this.algorithmStrategy = algorithmStrategy;

}

public int executeAlgorithmStrategy(int firstNumber, int secondNumber){

return algorithmStrategy.operation(firstNumber,secondNumber);

}

}

使用不同策略时时的行为变化

AlgorithmStrategyPattern.java

package com.huan.eu;

import com.huan.eu.impl.AddOperationImpl;

import com.huan.eu.impl.ReduceOperationImpl;

import com.huan.eu.impl.RideOperationImpl;

import org.junit.Test;

public class AlgorithmStrategyPattern {

@Test

public void test() {

Context context;

context = new Context(new AddOperationImpl());

System.out.println("10 + 50 =" + context.executeAlgorithmStrategy(10, 50));

context = new Context(new ReduceOperationImpl());

System.out.println("50 - 10 =" + context.executeAlgorithmStrategy(50, 10));

context = new Context(new RideOperationImpl());

System.out.println("10 * 50 =" + context.executeAlgorithmStrategy(10, 50));

}

}

e7a3e5c5b472

4.总结

优点:

1、算法可以自由切换。

2、避免使用多重条件判断。

3、扩展性良好。

缺点:

1、策略类会增多。

2、所有策略类都需要对外暴露。

使用场景:

1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

2、一个系统需要动态地在几种算法中选择一种。

3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值