Strategy策略模式详解与实例

编程知识 更新时间:2023-04-05 19:21:26

继续java的视频学习,博客还是不能丢,要坚持!Strategy策略模式是23个设计模式之一,是我们常用的模式之一。

Strategy策略模式:

体现了两个非常基本的面向对象设计原则:

---封装变化概念

---编程中受用接口,而不是对接口的实现

1.定义:

定义一组算法,讲每个算法都封装起来,使它们之间可以互换;

使在客户端调用它们的时候能够互不影响的变化。

2.组成:

抽象策略角色:策略类,通常有一个接口或者抽象类实现;

具体策略角色:包括了相关算法的行为;

环境角色:持有一个策略类的引用,最终给客户端调用。

3.实现:

针对一组算法,将每一个算法封装到具有接口的独立类中,从而使他们可以互相替换;可以在不影响客户端的情况下发生变化,可以把行为和环境分开。环境类负责维持和查询行为类各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响客户端。

4.编写步骤:

1)对策略对象定义一个公共接口;

2)编写策略类,该类实现了上面的公共接口,

3)在使用策略对象的类中保存一个策略对象的引用,

4)在策略对象的类中,实现策略对象的set和get方法,

5)使用构造方法完成赋值;

5.缺点:

客户端必须知道所有的策略类,并自行决定使用哪一个策略类;造成很多策略类,维护代价很高;

解决方法:工厂方法(factory method)。

6.实例:


package StrategyTest;

//Strategy接口
public interface Strategy { //1)对策略对象定义一个公共接口

public int calculate(int a,int b);//定义一个计算器的方法,接受两个整形参数

}


//2)编写策略类,该类实现了上面的公共接口,
package StrategyTest;

//加运算
public class AddStretegy implements Strategy{

//重写接口的calculate方法,返回a+b
public int calculate(int a, int b) {

return a+b;
}

}

package StrategyTest;

//减运算
public class SubtractStrategy implements Strategy {

//重写接口的calculate方法,返回a-b
public int calculate(int a, int b) {

return a-b;
}


}

package StrategyTest;

//除运算
public class SubtractStrategy implements Strategy {

//重写接口的calculate方法,返回a/b
public int calculate(int a, int b) {

return a-b;
}

}

package StrategyTest;

//乘运算
public class DivideStrategy implements Strategy {

//重写接口的calculate方法,返回a*b
public int calculate(int a, int b) {

return a/b;
}
}

package StrategyTest;
//3)在使用策略对象的类中保存一个策略对象的引用,

public class Environment {

private Strategy strategy;

//4)在策略对象的类中,实现策略对象的set和get方法,

public void setStrategy(Strategy strategy){

this.strategy = strategy;
}

public Strategy getStrategy(){

return this.strategy ;
}
public int calculate(int a,int b){

return strategy.calculate(a, b);
}
}

package StrategyTest;


public class Client {


public static void main(String[] args) {
//5)使用构造方法完成赋值;

AddStretegy add= new AddStretegy();

Environment en = new Environment(add); 

System.out.println(en.calculate(3, 4));


SubtractStrategy  sub = new SubtractStrategy();

en.setStrategy(sub);

System.out.println(en.calculate(5, 1));


MultiplyStrategy mul = new MultiplyStrategy();

en.setStrategy(mul);

System.out.println(en.calculate(3, 4));

DivideStrategy div = new DivideStrategy();

en.setStrategy(div);

System.out.println(en.calculate(3, 1));

}


}


运行结果:


参考:

张龙老师圣思园java教程。



更多推荐

Strategy策略模式详解与实例

本文发布于:2023-04-05 19:21:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/93b903d82e763155c36efb5a81ee654c.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:详解   实例   策略   模式   Strategy

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 47221文章数
  • 14阅读数
  • 0评论数