04
2018
01

java常用设计模式-策略设计模式

java中常用的设计模式如单例模式、原型模式,这在之前的2篇文章中已经说明,还有代理模式,外观模式、装饰模式、模板模式等。

今天再说一个java中常用的设计模式-策略模式。

说的有出入的,请大家指正,互相学习,共同进步!

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。

strategy java常用设计模式-策略设计模式 Java

下面来看代码吧。

步骤 1

创建一个接口。

Strategy.java

public interface Strategy {

void operate(int a , int b) ;

}

步骤 2

创建实现接口的实体类。

public class AddStrategy implements Strategy {

@Override

public void operate(int a, int b) {

System.out.println(“a+b=”+(a+b));

}

}

public class SubStrategy implements Strategy{

@Override

public void operate(int a, int b) {

System.out.println(“a-b=”+(a-b));

}

}

public class MulStrategy implements Strategy {

@Override

public void operate(int a, int b) {

System.out.println(“a*b=”+(a*b));

}

}

public class DivStrategy implements Strategy {

@Override

public void operate(int a, int b) {

System.out.println(“a/b=”+(a/b));

}

}

步骤 4

使用 Context 来查看当它改变策略 Strategy 时的行为变化。

public class Context {

private Strategy strategy;

public Context(Strategy strategy) {

this.strategy = strategy;

}

public int executeStrategy(int num1, int num2) {

return strategy.operate(num1, num2);

}

}

步骤 5

验证输出。

public class Test {

public static void main(String[] args) {

Context context = new Context(new AddStrategy());

System.out.println(“10 + 5 = ” + context.executeStrategy(10, 5));

context = new Context(new SubStrategy());

System.out.println(“10 – 5 = ” + context.executeStrategy(10, 5));

context = new Context(new MulStrategy());

System.out.println(“10 * 5 = ” + context.executeStrategy(10, 5));

context = new Context(new DivStrategy());

System.out.println(“10 / 5 = ” + context.executeStrategy(10, 5));

}

}

ok,到此结束,大家可以自行运行测试。

策略模式优缺点及使用场景

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。

缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。

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

Java中Comparator接口,就用的策略模式。如Collections里面有一个sort方法,可自行实现Comparator接口对集合排序。


« 上一篇 下一篇 »

评论列表:

1.奕奕星空  2018-01-31 00:03:11 回复该评论
策略设计模式

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。