首页 > 编程知识 正文

java策略设计模式,java策略模式应用场景

时间:2023-05-03 12:01:44 阅读:274105 作者:4042

Java的策略模式中体现了两个非常基本面向对象的原则
-封装变化的概念
-编程中使用接口,而不是对接口的实现

策略模式的定义
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
策略模式使这些算法在客户端调用它们的时候能够互不影响的变化

策略模式的组成

抽象策略角色–策略类,通常由一个接口或者抽象类实现
具体策略角色–包装了相关算法和行为
环境角色–持有一个策略类的引用,最终给客户端调用的

策略模式的编写步骤
1、对策略对象定义一个公共的接口
2、编写策略类,该类实现上面的接口
3、在使用策略对象的类中保存一个对策略对象的引用
4、在使用策略对象的类中,实现策略对象的set和get方法或者使用构造方法赋值

例子

//策略类,定义一个抽象的算法,实现计算功能
public interface Strategy {

public int calcultate(int x,int y);

}

//具体策略角色,加法角色,实现加法功能
public class AddStrategy implements Strategy{

public int calcultate(int x, int y) { return x+y;}

}

//具体策略角色,减法角色,实现减法功能
public class SubtractStrategy implements Strategy{

public int calcultate(int x, int y) { return x-y;}

}

//环境角色
public class Environment {

private Strategy strategy;public Environment(Strategy strategy){ this.strategy=strategy;}public void setStrategy(Strategy strategy){ this.strategy=strategy;}public int calcultate(int x,int y){ return strategy.calcultate(x, y);}

}

//客户端
public class Client {

public static void main(String[] args) { AddStrategy addStrategy=new AddStrategy(); Environment environment=new Environment(addStrategy); System.out.println(environment.calcultate(3, 4)); SubtractStrategy subtractStrategy=new SubtractStrategy(); environment=new Environment(subtractStrategy); System.out.println(environment.calcultate(3, 4));}

}

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

缺点:
客户端必须知道所有的策略类,并自行决定使用哪一个策略类
造成很多策略类,用工厂模式解决

作业:

public class Person {

private int id;private int age;private String name;

}

要求:假如有若干个Person对象存在一个List当中,对它们进行排序,分别按照id、age、name进行排序(正常的倒序、升序),假如年龄或者姓名重复,则按照id排序

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。