zoukankan      html  css  js  c++  java
  • 策略模式

    角色

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

    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;
        }
    }
    
  • 相关阅读:
    Leetcode 127 **
    Leetcode 145
    Leetcode 144
    Leetcode 137
    Leetcode 136
    重写nyoj2——括号匹配
    堆排序
    Leetcode 150
    【转】个人最常用的Eclipse快捷键
    Ajax编程中,经常要能动态的改变界面元素的样式
  • 原文地址:https://www.cnblogs.com/Theshy/p/8521955.html
Copyright © 2011-2022 走看看