策略模式

角色

  • 抽象策略
    策略的一个抽象,通常是一个函数式接口。
  • 具体策略
    实现抽象策略的类的实例,匿名内部类的对象较为常见。
  • 策略使用者
    该使用者实例应该持有一个抽象策略引用作为成员,以便调用策略中的方法。

UML


通常的用法是创建Environment类同时使用匿名内部类初始化strategy引用,然后调用Environment中的方法,这些方法中会调用Strategy的实现类实例的方法。策略模式所处可见,是一种十分常用的设计模式,解耦具体策略。

例子代码

  • Environment类:
   public class SortUtil {
    private Sort sort;

    public SortUtil(Sort sort) {
        this.sort = sort;
    }

    public SortUtil() {
    }

    public Sort getSort() {
        return sort;
    }

    public void setSort(Sort sort) {
        this.sort = sort;
    }

    public void sort(List<Person> list){
        sort.sort(list);
    }
}
 
  • Strategy接口
public interface Sort {
    void sort(List<Person> list);
}
  • Strategy类的一个实现类:
public class SortByNameASC implements Sort,Comparator<Person> {

    public void sort(List<Person> list)
    {
        Collections.sort(list,this);
    }
    @Deprecated
    public int compare(Person o1,Person o2){
        int result = o1.getName().compareTo(o2.getName());

        if(0 == result){
            return o1.getId() - o2.getId();
        }
        return result;
    }
}
posted @ 2018-03-07 13:51  The_shy  阅读(183)  评论(0编辑  收藏  举报