這個模式涉及到三個角色:
● 環境(context)角色:持有乙個strategy的引用。
● 抽象策略(strategy)角色:這是乙個抽象角色,通常由乙個介面或抽象類實現。此角色給出所有的具體策略類所需的介面。
工廠模式與策略模式的不同之處:
1.工廠模式是建立型模式(關注物件的建立),策略模式是行為型模式(關注行為的封裝)
2.工廠模式不需要關注怎麼時間,但是策略模式針對每個功能實現不同的策略。
3.策略模式是對演算法的包裝
優點:1.擴充套件性好
2.高內聚低耦合
缺點:1.所有策略類都需要對外暴露
2.策略類會很多
舉例說明:
springboot-demo例項(策略與工廠結合):
環境(context)角色:
@component
public class rulecontext
}抽象策略(strategy)角色:
public inte***ce rulestrategy
具體策略(concretestrategy)角色:
@component
@transactional(propagation = propagation.required, rollbackfor = exception.class)
public class selectstrategy implements rulestrategy
}新增乙個演算法工廠,呼叫的之後來工廠取出相應的策略。
@component
public class rulesfactory
public rulestrategy creator(integer type)
}
另外一種寫法也很巧妙:
/**
* 規則處理工廠類
** @author
* @version v1.0
* @since 2018-12-03 15:26
*/public class rulesprocesso***ctory
}public rulesprocessor getrulesprocessor(string ruletype)
}/**
* 規則處理器介面
** @author
* @version v1.0
* @since 2018-12-03 15:02
*/public inte***ce rulesprocessor
/*** 處理器資料封裝,如有自定義資料,請繼承此類
** @author
* @version v1.0
* @since 2018-12-03 15:18
*/public class rulesprocessorbo implements serializable
public void setprojectcode(string projectcode)
public string getusercode()
public void setusercode(string usercode)
}呼叫:
/***
* @author guoz
* @version v1.0
* @since 2018-12-03 19:13
*/public class productselectrulebo extends rulesprocessorbo
public void setproductselectbo(productselectbo productselectbo)
}/**
* @author guoz
* @version v1.0
* @since 2018-12-03 16:54
*/@component
public class productselectruleprocessor implements rulesprocessor
@override
public boolean process(productselectrulebo productselectrulebo)
}
大話設計模式 簡單工廠模式與策略模式
簡單工廠模式 運算類工廠 public class operationfactory case case case case sqr case sqrt case return oper 關聯關係 如下 class penguin bird private climate climate 聚合關係如...
大話設計模式 工廠模式 策略模式
工廠模式 以商場收費系統為例。打折 正常 送積分等手段 首先,有乙個抽象類cashsuper 收費操作,有三個繼承cashsuper的子類 cashnormal具體操作,重寫函式 其次,寫乙個cashfactory工廠類,來生產具體的操作類cashnormal等。策略模式 先寫乙個策略抽象類,然後寫...
設計模式 簡單工廠模式 策略模式
名詞理解 工廠 factory 模式我們可以做如下理解,假設有乙個audi的公司生產汽車 似乎也不用假設了 它掌握一項核心的技術就是生產汽車,另一方面,它生產的汽車是有不同型號的,並且在 不同的生產線上進行組裝。當客戶通過銷售部門進行預定後,audi公司將在指定的生產線上為客戶生產出它所需要的汽車。...