策略模式示例代码_策略设计模式示例
策略模式示例代碼
本文是我們名為“ Java設計模式 ”的學院課程的一部分。
在本課程中,您將深入研究大量的設計模式,并了解如何在Java中實現和利用它們。 您將了解模式如此重要的原因,并了解何時以及如何應用模式中的每一個。 在這里查看 !
目錄
1.簡介 2.什么是策略模式 3.實施策略設計模式 4.何時使用策略設計模式 5. JDK中的策略模式 6.下載源代碼1.簡介
策略設計模式似乎是所有設計模式中最簡單的,但它為代碼提供了極大的靈活性。 即使與其他設計模式結合使用,該模式也幾乎用于所有地方。 到目前為止,我們討論的模式都與該模式有直接或間接的關系。 學完本課后,您將了解這種模式的重要性。
為了理解策略設計模式,讓我們為文本編輯器創建文本格式化程序。 每個人都應該知道一個文本編輯器。 文本編輯器可以具有不同的文本格式化程序來格式化文本。 我們可以創建不同的文本格式化程序,然后將所需的文本格式化程序傳遞給文本編輯器,以便該編輯器能夠根據需要格式化文本。
文本編輯器將保存對文本格式化程序通用接口的引用,并且編輯者的工作是將文本傳遞給格式化程序以格式化文本。
讓我們使用“策略設計模式”來實現這一點,這將使代碼非常靈活且可維護。 但是在此之前,讓我們更多地了解戰略設計模式。
2.什么是策略模式
策略設計模式定義了一系列算法,將每個算法封裝在一起,并使它們可互換。 策略使算法獨立于使用該算法的客戶端而變化。
當存在一組相關算法并且客戶對象需要能夠從該組動態選擇適合其當前需求的算法時,策略模式很有用。 策略模式建議將每種算法的實現都放在單獨的類中。 封裝在單獨類中的每個此類算法都稱為strategy 。 使用Strategy對象的對象通常稱為context對象。
有了不同的Strategy對象,更改Context對象的行為僅是將其Strategy對象更改為實現所需算法的對象。 為了使Context對象能夠無縫地訪問不同的Strategy對象,必須將所有Strategy對象設計為提供相同的接口。 在Java編程語言中,這可以通過將每個Strategy對象設計為公共接口的實現者或聲明所需公共接口的公共抽象類的子類來實現。
一旦將相關算法組封裝在類層次結構中的一組Strategy類中,客戶端就可以通過選擇并實例化適當的Strategy類從這些算法中進行選擇。 要更改context的行為,客戶端對象需要使用選定的strategy實例配置context 。 這種安排將算法的實現與使用它的context完全分開。 結果,當更改現有算法實現或將新算法添加到組時, context和使用該context的客戶端對象都不會受到影響。
圖1 –策略類圖
戰略
- 聲明所有支持的算法通用的接口。 Context使用此接口來調用ConcreteStrategy定義的算法。
具體策略
- 使用Strategy接口實現算法。
語境
- 配置有ConcreteStrategy對象。
- 維護對Strategy對象的引用。
- 可以定義一個接口,使Strategy可以訪問其數據。
3.實施策略設計模式
下面是所有具體格式化程序的TextFormatter接口工具。
package com.javacodegeeks.patterns.strategypattern;public interface TextFormatter {public void format(String text);}上面的接口僅包含一種用于格式化文本的方法format 。
package com.javacodegeeks.patterns.strategypattern;public class CapTextFormatter implements TextFormatter{@Overridepublic void format(String text) {System.out.println("[CapTextFormatter]: "+text.toUpperCase());}}上面的類CapTextFormatter是實現TextFormatter接口的具體文本格式化程序,該類用于將文本更改為大寫字母。
package com.javacodegeeks.patterns.strategypattern;public class LowerTextFormatter implements TextFormatter{@Overridepublic void format(String text) {System.out.println("[LowerTextFormatter]: "+text.toLowerCase());}}LowerTextFormatter是一個具體的文本格式化程序,它實現了TextFormatter接口,該類用于將文本更改為小寫形式。
package com.javacodegeeks.patterns.strategypattern;public class TextEditor {private final TextFormatter textFormatter;public TextEditor(TextFormatter textFormatter){this.textFormatter = textFormatter;}public void publishText(String text){textFormatter.format(text);}}上面的類是TextEditor類,其中包含對TextFormatter接口的引用。 該類包含publishText方法,該方法將文本轉發給格式化程序,以便以所需格式發布文本。
現在,讓我們測試上面的代碼。
package com.javacodegeeks.patterns.strategypattern;public class TestStrategyPattern {public static void main(String[] args) {TextFormatter formatter = new CapTextFormatter();TextEditor editor = new TextEditor(formatter);editor.publishText("Testing text in caps formatter");formatter = new LowerTextFormatter();editor = new TextEditor(formatter);editor.publishText("Testing text in lower formatter");}}上面的代碼將導致以下輸出:
[CapTextFormatter]: TESTING TEXT IN CAPS FORMATTER [LowerTextFormatter]: testing text in lower formatter在上面的類中,我們首先創建了一個CapTextFormatter并將其分配給TextEditor實例。 然后,我們調用publishText方法并將一些輸入文本傳遞給它。
同樣,我們做了同樣的事情,但是這次, LowerTextFormatter被傳遞給TextEditor 。
由于輸出所使用的文本格式化程序不同,因此輸出清楚地顯示了不同文本編輯器產生的不同文本格式。
策略設計模式的主要優點是我們可以輕松地增強代碼。 我們可以添加新的文本格式化程序,而不會打擾當前代碼。 這將使我們的代碼可維護和靈活。 這種設計模式還促進了“代碼到接口”的設計原則。
4.何時使用策略設計模式
在以下情況下使用策略模式:
- 許多相關的類僅在行為上有所不同。 策略提供了一種使用多種行為之一配置類的方法。
- 您需要算法的不同變體。 例如,您可以定義反映不同時空權衡的算法。 將這些變體實現為算法的類層次結構時,可以使用策略。
- 一種算法使用客戶端不應該知道的數據。 使用策略模式可避免暴露復雜的,特定于算法的數據結構。
- 一個類定義了許多行為,這些行為在其操作中顯示為多個條件語句。 代替許多條件,將相關的條件分支移到其自己的Strategy類中。
5. JDK中的策略模式
- java.util.Comparator#compare()
- javax.servlet.http.HttpServlet
- javax.servlet.Filter#doFilter()
6.下載源代碼
這是關于策略設計模式的課程。 您可以在此處下載源代碼: StrategyPattern-Project
翻譯自: https://www.javacodegeeks.com/2015/09/strategy-design-pattern.html
策略模式示例代碼
總結
以上是生活随笔為你收集整理的策略模式示例代码_策略设计模式示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金蝶账套怎样输入美金(金蝶账套怎样输入美
- 下一篇: 莫甘娜辅助符文天赋(莫甘娜中单天赋)