Java的策略模式中体现了两个非常基本面向对象的原则
-封装变化的概念
-编程中使用接口,而不是对接口的实现
策略模式的定义
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
策略模式使这些算法在客户端调用它们的时候能够互不影响的变化
策略模式的组成
抽象策略角色–策略类,通常由一个接口或者抽象类实现
具体策略角色–包装了相关算法和行为
环境角色–持有一个策略类的引用,最终给客户端调用的
策略模式的编写步骤
1、对策略对象定义一个公共的接口
2、编写策略类,该类实现上面的接口
3、在使用策略对象的类中保存一个对策略对象的引用
4、在使用策略对象的类中,实现策略对象的set和get方法或者使用构造方法赋值
例子
//策略类,定义一个抽象的算法,实现计算功能
public interface Strategy {
}
//具体策略角色,加法角色,实现加法功能
public class AddStrategy implements Strategy{
}
//具体策略角色,减法角色,实现减法功能
public class SubtractStrategy implements Strategy{
}
//环境角色
public class Environment {
}
//客户端
public class Client {
}
策略模式有什么好处?
策略模式的好处在于你可以动态的改变对象的行为。
缺点:
客户端必须知道所有的策略类,并自行决定使用哪一个策略类
造成很多策略类,用工厂模式解决
作业:
public class Person {
private int id;private int age;private String name;}
要求:假如有若干个Person对象存在一个List当中,对它们进行排序,分别按照id、age、name进行排序(正常的倒序、升序),假如年龄或者姓名重复,则按照id排序