策略模式属于对象的行为模式
其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换

策略模式的结构:













应当由客户端自己决定在什么情况下使用什么具体策略模式。

策略模式不适合于处理同时嵌套多于一个算法的情形。

何时使用?
1. 一个系统需要动态地让一个对象在许多行为中选择一种行为。
2. 一个系统需要动态地在几种算法中选择一种。
3. 一个系统的算法使用的数据不可以让客户端知道。
4. 避免使用难以维护的多重条件选择语句。

优点:
1. 提供了管理相关的算法族的办法。
2. 提供了可以替换继承关系的办法。
3. 可以避免使用多重条件转移语句。

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

与其他模式的关系:
建造(Builder)模式
适配器(Adapter)模式
享元(Flyweight)模式
模板(Template)模式
MVC模式
装饰(Decorator)模式

1. com.cleversoft.designpatterns.behavioral.strategy.Sorter.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class Sorter {
    
public void sort() {
        sortStrategy.sort();
    }

    
public void setSortStrategy(SortStrategy sort) {
        
this.sortStrategy = sort;
    }

    
private SortStrategy sortStrategy;
}

2. com.cleversoft.designpatterns.behavioral.strategy.SortStrategy.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public abstract class SortStrategy {
    
public abstract void sort();
}

3. com.cleversoft.designpatterns.behavioral.strategy.RadixSort.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class RadixSort extends SortStrategy {
    
public void sort() {
        System.out.println(
"Radix Sort!");
    }
}

4. com.cleversoft.designpatterns.behavioral.strategy.QuickSort.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class QuickSort extends SortStrategy {
    
public void sort() {
        System.out.println(
"Quick Sort!");
    }
}

5. com.cleversoft.designpatterns.behavioral.strategy.HeapSort.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class HeapSort extends SortStrategy {
    
public void sort() {
        System.out.println(
"Heap Sort!");
    }
}

6. com.cleversoft.designpatterns.behavioral.strategy.BubbleSort.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class BubbleSort extends SortStrategy {
    
public void sort() {
        System.out.println(
"Bubble Sort!");
    }
}

7. com.cleversoft.designpatterns.behavioral.strategy.Client.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class Client {

    
/**
     * 
@param args
     * 
@author qixiang
     
*/
    
public static void main(String[] args) {
        SortStrategy sortStrategy 
= new HeapSort();
        Sorter sorter 
= new Sorter();
        sorter.setSortStrategy(sortStrategy);
        sorter.sort();
    }

}



欢迎大家访问我的个人网站 萌萌的IT人