摘要:策略模式在構(gòu)造方法或方法中初始化各自需要的策略模式代碼策略接口具體策略具體策略上下文抽象類我理解的這個類的作用是負責策略與用戶使用者的連接,也是策略模式的入口持有一個具體策略的對象構(gòu)造函數(shù),傳入一個具體策略對象策略方法具體環(huán)境類應(yīng)用場景多個
策略模式UML:
ContextType1、ContextType2在構(gòu)造方法或set方法中初始化各自需要的StrategyType
策略模式代碼
/** * 策略接口 */ public interface Strategy { public void strategyInterfaceMethod(); } /** * 具體策略A */ public class StrategyTypeA implements Strategy { @Override public void strategyInterfaceMethod() { // todo someting } } /** * 具體策略B */ public class StrategyTypeB implements Strategy { @Override public void strategyInterfaceMethod() { // todo someting } } /** * 上下文抽象類 * 我理解的這個類的作用是:負責策略與用戶(使用者)的連接,也是策略模式的入口 */ public AbstractClass Context { //持有一個具體策略的對象 private Strategy strategy; /** * 構(gòu)造函數(shù),傳入一個具體策略對象 * @param strategy */ public Context(Strategy strategy){ this.strategy = strategy; } /** * 策略方法 */ public void contextMethod(){ strategy.strategyInterfaceMethod(); } } /** * 具體環(huán)境類 */ public Class ContextType1 extends Context{ public void contextMethod(){ strategy.strategyInterfaceMethod(); // todo something } }
應(yīng)用場景: 多個用戶購買不同型號電腦
public class Client { public static void main(String[] args) { // 客戶需要定制自己需要的策略 // 策略1--購買戴爾電腦 Strategy dell = new StrategyTypeA(); dell.setCPU("AMD"); dell.setScreen("LGD"); // 策略2 Strategy macbook = new StrategyTypeB(); macbook.setCPU("Intel"); macbook.setScreen("sansung"); // 購買的是dell電腦 // 用戶將自己需要的策略(電腦配置)交給商家 ContextType1 customer1 = new ContextType1(dell); // buyComputer方法中的strategy.strategyInterfaceMethod(); = StrategyTypeA.strategyInterfaceMethod(); customer1.buyComputer(); // 購買的是macbook ContextType2 customer2 = new ContextType2(macbook); // buyComputer方法中的strategy.strategyInterfaceMethod(); = StrategyTypeB.strategyInterfaceMethod(); customer2.buyComputer(); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71609.html
摘要:可以避免使用多重條件轉(zhuǎn)移語句缺點客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。不希望客戶端知道復(fù)雜的與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu),在具體策略類中封裝算法和相關(guān)的數(shù)據(jù)結(jié)構(gòu),提高算法的保密性與安全性。在中的應(yīng)用中的四種拒絕策略 定義 策略模式是對象行為模式的一種定義三要素: 一組不同的算法(策略),各有優(yōu)劣 實現(xiàn)了同一接口,之間可以互相替換 在不同的業(yè)務(wù)場景下,調(diào)用方依據(jù)業(yè)務(wù)決定調(diào)用哪...
時間:2017年08月31日星期四說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github.com/zccodere/s... 第一章:策略模式簡介 1-1 簡介 課程大綱 什么是策略模式 策略模式如何實現(xiàn) 策略模式總結(jié)篇 實例案例分享 日常生活中的策略 Wor...
摘要:什么是策略模式策略模式,就是將不同的算法各自封裝起來,然后根據(jù)程序的不同情況,采用不同的算法,有點像工廠模式。在其他語言中,實現(xiàn)這樣的思路也比較費勁,而得函數(shù)非常靈活,本來可以當值傳遞,所以實現(xiàn)策略模式非常輕松,也很靈活。 什么是策略模式 策略模式,就是將不同的算法各自封裝起來,然后根據(jù)程序的不同情況,采用不同的算法,有點像工廠模式。比如在很多種情況下,都要寫ifXXX dosomet...
摘要:本篇主要講述中使用函數(shù)來實現(xiàn)策略模式和命令模式,最后總結(jié)出這種做法背后的思想。 《流暢的Python》筆記。本篇主要講述Python中使用函數(shù)來實現(xiàn)策略模式和命令模式,最后總結(jié)出這種做法背后的思想。 1. 重構(gòu)策略模式 策略模式如果用面向?qū)ο蟮乃枷雭砗唵谓忉尩脑挘鋵嵕褪嵌鄳B(tài)。父類指向子類,根據(jù)子類對同一方法的不同重寫,得到不同結(jié)果。 1.1 經(jīng)典的策略模式 下圖是經(jīng)典的策略模式的U...
摘要:設(shè)計模式系列之入門設(shè)計模式是一套被反復(fù)使用多數(shù)人知曉的經(jīng)過分類編目的代碼設(shè)計經(jīng)驗的總結(jié)。毫無疑問,設(shè)計模式于己于他人于系統(tǒng)都是多贏的設(shè)計模式使代碼編制真正工程化設(shè)計模式是軟件工程的基石脈絡(luò),如同大廈的結(jié)構(gòu)一樣。 PHP設(shè)計模式系列之入門 設(shè)計模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易...
閱讀 2675·2023-04-26 00:57
閱讀 992·2021-11-25 09:43
閱讀 2404·2021-11-11 16:55
閱讀 2428·2019-08-30 15:53
閱讀 3671·2019-08-30 15:52
閱讀 1546·2019-08-30 14:10
閱讀 3456·2019-08-30 13:22
閱讀 1288·2019-08-29 11:18