1. 程式人生 > >Strategy策略設計模式

Strategy策略設計模式

1.策略模式定義

Strategy模式也叫作行為模式;他對一系列演算法進行封裝,提供介面,使用哪一種演算法,它把選擇權交給客戶端的使用者,使用哪種演算法讓使用者決定。

2.策略模式的特點

(1)提供了可以替換繼承關係的方法

(2)也避免了使用多重條件轉移語句

3.策略模式的缺點

(1)客戶端要知道所有的策略類,客戶端的使用者必須要了解這些演算法的區別,從而選擇合適自己的演算法

(2)策略模式會造成很多的策略類,使專案變得複雜

策略模式的Demo:

1.方法介面:

package strategypattern2;

public interface MethodInterface {
	//方法
	public void method();
}

2.方法的實現部分一:

package strategypattern2;

public class WalkMethod implements MethodInterface{	
	@Override
	public void method() {
		// TODO Auto-generated method stub
		System.out.println("走路!!!");
	}
}

3.方法的實現部分二:

package strategypattern2;

public class RunMethod implements MethodInterface{
	@Override
	public void method() {
		// TODO Auto-generated method stub
		System.out.println("跑步....");
	}	
}

4.策略模式呼叫方法:

package strategypattern2;
/**
*類描述:選擇需要的演算法
*@author: 張宇
*@date: 日期: 2018年7月30日 時間: 下午7:13:01
*@version 1.0
 */
public class ContextMethod {

	private MethodInterface methodInterface;
	public ContextMethod(MethodInterface methodInterface){
		this.methodInterface=methodInterface;
	}
	public void run(){
		this.methodInterface.method();
	}
}

5.客戶端模式的測試類:

package strategypattern2;
/**
*類描述:簡單的策略設計模式
*@author: 張宇
*@date: 日期: 2018年7月30日 時間: 下午7:10:04
*@version 1.0
 */
public class Cilent {
    public static void main(String[]args){
    	ContextMethod context=new ContextMethod(new RunMethod());
    	context.run();
    	System.out.println("--------------------------------");
    	ContextMethod context1=new ContextMethod(new WalkMethod());
    	context1.run();
    }
}

執行結果:

跑步....
--------------------------------
走路!!!

       策略模式在選擇演算法的時候用到,比如:打折活動,對於初級會員打折多少,中級會員打折多少,高階會員打折多少用到策略模式。支付的時候,選擇是微信支付,支付寶支付,還是信用卡支付,也是用到策略模式(其實它和工廠設計模式相似)。

     策略模式也在spring框架中用到,和抽象工廠一起進行使用的;例如:HierarchicalBeanFactory、ListableBeanFactory、 ConfigurableBeanFactory在進行選擇的時候,利用了策略模式進行自動的選擇,而不是由我們自己去處理。