初識設計模式 策略模式(Java)

2021-08-22 15:18:03 字數 2377 閱讀 2453

strategy類為所有演算法的父類,其定義了乙個使用者使用介面——algorithminte***ce(),此介面用於實現各種演算法,將計算後的結果返回給呼叫處。

strategya、strategyb、strategyc表示各種不同的算法子類,他們共同繼承strategy父類,並各自重寫algorithminte***ce()方法,已達成不同的演算法。

context上下文操作類,管理著所有的策略類,根據使用者傳入的資料來選擇相應的策略,將其使用介面algorithminte***ce()方法返回給使用者。

使用策略模式實現商場收銀系統

功能:

* 1.根據客戶所購買的商品的數量和單價,來向客戶收費

* 2.根據需要打一定折扣扣

* 3.滿返活動

策略類(strategy類)

/**

* 策略類

*@author administrator

* */

public

abstract

class

cashstrategy

演算法類a(strategya)——正常收費

/**

* 正常收費標準

*@author administrator

* */

public

class

cashnormal

extends

cashstrategy

}

演算法類b(strategyb)——打折

/**

* 打折收費

*@author administrator

* */

public

class

cashrebate

extends

cashstrategy

@override

public

double

acceptcash(double money)

}

演算法類c(strategyc)—— 滿減活動

public

class

cashreturn

extends

cashstrategy

@override

public

double

acceptcash(double money)

return money;}}

策略工廠(context)

結合簡單工廠模式將上下文類改裝為工廠形式,避免了邏輯**暴露給客戶端
public

class contextfactory

}public

double

getresult(double money)

}

客戶端

/**

* 商場收銀軟體

* 功能:

* 1.根據客戶所購買的商品的數量和單價,來向客戶收費

* 2.根據需要打一定折扣扣

* 3.滿返活動

* * 將判斷交給工廠,解放客戶端

*@author administrator

* */

public

class

user ;

int n = 5 ;

double price = 352 ;

contextfactory cf = new contextfactory(str[1]) ;

system.out.println(cf.getresult(n * price));}}

總結

策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,他可以以相同的方式呼叫所有的演算法,減少了各種與使用演算法類之間的耦合。

~ 策略模式的strategy類層為context定義了一系列的可重用的演算法或行為。繼承有助於析取出這些演算法中的公共功能

~ 策略模式的優點是為了簡化單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試

~ 策略模式就是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何型別的規則,只要在分析過程中聽到需要在不同時間應用不用業務規則,就可以考慮使用策略模式處理各種變化的可能性

設計模式初識 策略模式

策略模式,乙個類的行為或其演算法可以在執行時更改。在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變,同時策略物件改變context物件的執行演算法。策略模式是一種比較簡單的模式,也叫做政策模式。定義一組演算法,將每個演算法都封裝起來,並且使它們之間可以互換。策略模式的目的 定義一系...

初識 設計模式二 策略模式

package com.mybatis.strategist public class cash package com.mybatis.strategist public class cashcontext public double getresult double money package ...

java 設計模式 策略模式

就是比較兩個類別時,要自己寫乙個比較器,這個比較器實現了 comparator介面,裡面實現public int compare object o1,object o2 方法。在實體類裡面要有乙個成員變數時這個比較器,這個實體類也要實現了 comparable介面。例如 cat有兩個屬性,heigh...