编程语言 php java

java设计模式-策略模式Strategy

java HTML我帮您 1年前  0次浏览
1、什么是策略模式?
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。一句话形容就是:准备一组算法,并将每一个算法封装起来,似的他们可以互换。策略模式似的算法可以独立于使用他的客户而变化。

2、策略模式有什么好处?
策略模式的好处在于你可以动态的改变对象的行为。

3、使用场景
许多相关的类仅仅是行为有异。“策略”提供了一种多个行为中的一个行为来配置一个类的方法。
需要使用一个算法的不同变体。例如,你可能会定义一些反应不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层时,可以使用策略模式。
算法是用户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支一如他们各自的Strategy类中以代替这些条件语句。。


4、策略模式中有三个角色:
环境角色:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
抽象策略角色:它可由接口或抽象类来实现。
具体策略角色:它封装了实现同不功能的不同算法。

利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。

举例
17
package com.html580.strategy;

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

class Add implements Strategy {

public int calculator(int num1, int num2) {
return num1 + num2;
}
}
class Plus implements Strategy {

public int calculator(int num1, int num2) {
return num1 - num2;
}
}
class Multiply implements Strategy {

public int calculator(int num1, int num2) {
return num1 * num2;
}
}

class Context {
private Strategy strategy;

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

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

class Substract implements Strategy {

public int calculator(int num1, int num2) {
return num1 - num2;
}
}

public class Client {

public static void main(String<> args) {
Context context = new Context(new Add());
System.out.println("10 + 5 = " + context.calculator(10, 5));
context = new Context(new Substract());
System.out.println("10 - 5 = " + context.calculator(10, 5));
context = new Context(new Multiply());
System.out.println("10 * 5 = " + context.calculator(10, 5));
}
}




发表评论