Java設計模式之策略模式詳解

2020-12-13 小碼哥編程學習

前言

在軟體領域中,設計模式作為一種經典的開發實踐常常需要我們去深入的理解,而策略模式作為設計模式的一種,使用頻率也是相對來說比較高的,在Java中,當我們學習TreeSet集合的時候,就採用了經典的策略模式的思想,本文主要講解策略模式。

概念

其思想是針對一組算法,將每一種算法都封裝到具有共同接口的獨立的類中,從而是它們可以相互替換。策略模式的最大特點是使得算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。

特點

策略模式體現了面向對象程序設計中非常重要的兩個原則:

封裝變化的概念。編程中使用接口,而不是使用的是具體的實現類(面向接口編程)。

舉例:我們就以Java中的TreeSet為例,TreeSet僅僅知道它只是接收一個Comparator這種接口類型,但是具體是哪種實現類,TreeSet並不關心,實現類在真正的傳入TreeSet之前,TreeSet本身是不知道的,所以我們可以自己去實現Comparator接口,然後在實現類裡面去封裝好我們自己的規則(這裡的規則你可以當做是算法),比如說我們要實現對一個集合的元素排序,但是到底是要升序排序還是降序排序,這個完全由我們來去控制,我們可以把這種變化的內容封裝到自己的實現類中,真正運行的時候才知道具體的實現。

組成

抽象策略角色這個是一個抽象的角色,通常情況下使用接口或者抽象類去實現。對比來說,就是我們的Comparator接口。 具體策略角色包裝了具體的算法和行為。對比來說,就是實現了Comparator接口的實現一組實現類。 環境角色內部會持有一個抽象角色的引用,給客戶端調用。對比來說,就是我們的TreeSet類。說明:TreeSet內部一定會有一個策略類的一個成員變量,這樣做的目的在於可以當我們在去創建TreeSet對象的時候,可以接收我們向TreeSet類中傳遞的具體的策略類。

編寫步驟

定義抽象策略角色(為策略對象定義一個公共的接口)編寫具體策略角色(實際上就是實現上面定義的公共接口)定義環境角色,內部持有一個策略類的引用

案例

實現一個加減乘除的功能。

1、定義抽象策略角色

定義抽象策略角色

2、定義具體策略角色(本例子僅僅演示,只是定義加、減兩種具體策略)

加法策略:

減法策略:

3、環境角色

4、測試類

總結

通過案例的形式相信大家已經對策略模式應該有所了解了吧,其實對比的理解去學習是可以快速上手的。不過在這裡呢還是要多說一句,策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成一個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。其實每種設計模式都有它各種的優缺點,在這裡呢,我們就要具體情況具體分析了。

每日一題

在Java程式語言中,有內存洩露的問題嗎?如果有,那麼什麼情況下會導致內存洩露呢?

相關焦點

  • Java策略模式
    在策略模式中,可以在運行時更改類行為或其算法。 這種類型的設計模式屬於行為模式。在策略模式中,創建表示各種策略對象和其行為根據其策略對象而變化的上下文對象。 策略對象更改上下文對象的執行算法。實現實例在這個示例中,將創建一個 Strategy 接口,定義實現策略接口的操作和具體策略類。 上下文類- Context 是使用策略的類。StrategyPatternDemo是一個演示類,將使用上下文- Context 和策略對象來演示上下文行為基於其部署或使用的策略的變化。
  • 設計模式之策略模式
    行為型設計模式策略模式一簡介當一個對象有多種行為要執行時,我們可以使用策略模式,讓對象自由選擇執行的行為種類,避免使用if…else if….else if…這種嵌套代碼如果我們使用策略模式,某個行為要修改代碼,我們只要修改對應行為的類,都不用動到舊代碼。後期如果要撤掉某種行為或增加某種行為,都比較方便。二例子假設系統維護裡,會發送命令:分析系統cpu使用情況,分析系統memory使用情況,分析系統io情況。後端系統執行命令後,將結果傳回前端,供界面展示結果,畫趨勢圖。
  • 設計模式之策略模式(Java實現例子說明)
    設計模式之策略模式小王在和同事正在吹牛時,領導過來了,小王啊,你又在吹牛了?別吹了,幹點正活,下周要去春遊,你給出幾種方案。小王一聽去旅遊,屁顛屁顛地去幹活了。這個其實就是一個設計模式,叫做策略模式。策略模式(Strategy Pattern):定義一組算法,將每個算法封裝起來,並且使他們之間可以互換。策略模式是一個簡單的模式也叫做政策模式。
  • 通俗易懂的告訴你「策略模式」在java多線程中的應用
    「策略模式」這種設計模式。下面我們就一起來看看「策略模式」是如何運用在javaduo線程中的。01什麼是「策略模式」廢話少說,先看定義!再結合「策略模式」的定義大致就能明白什麼是「策略模式」03「策略模式」在多線程的應用了解完什麼是「策略模式」之後,我們再來看一看在java
  • Java設計模式之行為型模式
    需要設計一個接口,為一系列實現類提供統一的方法,多個實現類實現該接口,設計一個抽象類(可有可無,屬於輔助類),提供輔助函數。策略模式則是偏重於算法本身(整個算法)就變化相對劇烈的情形。模板方法模式注重靈活性,策略模式注重適應性。總結:模板方法和策略模式都是解決算法多樣性對代碼結構衝擊的問題。
  • 從Java類庫看設計模式
    為了解決這樣的問題,人們提出了所謂的模式的概念。所謂模式,是指在一個特定背景下,反覆出現的問題解決方案。模式是經驗的文檔化。  軟體模式的概念現在比較的廣泛,涉及到分析,設計,體系結構,編碼,測試,重構等軟體構造生命期中的各個部分。這兒主要討論的是設計模式,指的是在軟體設計過程中反覆出現的一些問題的解決方法了。
  • ...設計模式:實戰策略模式「模擬多種營銷類型優惠券,折扣金額計算...
    策略模式是一種行為模式,也是替代大量ifelse的利器。六、策略模式重構代碼。接下來使用策略模式來進行代碼優化,也算是一次很小的重構。與上面面向流程式的開發這裡會使用設計模式,優惠代碼結構,增強整體的擴展性。1.
  • 大神詳解,這麼詳細的Java設計模式不收藏可惜了
    引子設計模式是很多程式設計師總結出來的優秀實踐。曾經在剛開始寫項目的時候學習過設計模式,在開發過程中,也主動或者被動的使用過。現在寫代碼雖說不會特意明確在用哪種設計模式,但潛移默化的寫出來公認的優秀實踐代碼,畢竟看的比較清爽。
  • java設計模式之適配器模式
    適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。
  • Java設計模式:三大類工廠方法模式
    GOF在《設計模式》一書中將工廠模式分為兩類:工廠方法模式(Factory Method)與抽象工廠模式(Abstract Factory)。將簡單工廠模式(Simple Factory)看為工廠方法模式的一種特例,兩者歸為一類。  二、簡單工廠模式  簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。
  • 重學Java 設計模式:實戰外觀模式
    一般情況下對於外觀模式的使用通常是用在複雜或多個接口進行包裝統一對外提供服務上,此種使用方式也相對簡單在我們平常的業務開發中也是最常用的。你可能經常聽到把這兩個接口包裝一下,但在本例子中我們把這種設計思路放到中間件層,讓服務變得可以統一控制。1.
  • 設計模式——策略模式
    設計模式——策略模式1. 簡單工廠實現面向對象的編程,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的對象的抽象集合才是類。2.策略模式策略這個詞應該怎麼理解,打個比方說,我們出門的時候會選擇不同的出行方式,比如騎自行車、坐公交、坐火車、坐飛機、坐火箭等等,這些出行方式,每一種都是一個策略。
  • 詳解設計模式在 Spring 中的應用
    /tuozhan/2014/0601/7.html設計模式作為工作學習中的枕邊書,卻時常處於勤說不用的尷尬境地,也不是我們時常忘記,只是一直沒有記憶。今天,螃蟹就設計模式的內在價值做一番探討,並以spring為例進行講解,只有領略了其設計的思想理念,才能在工作學習中運用到「無形」。Spring作為業界的經典框架,無論是在架構設計方面,還是在代碼編寫方面,都堪稱行內典範。好了,話不多說,開始今天的內容。
  • Java門面模式(或外觀模式)
    門面模式(或外觀模式)隱藏系統的複雜性,並為客戶端提供一個客戶端可以訪問系統的接口。 這種類型的設計模式屬於結構模式,因為此模式為現有系統添加了一個接口以隱藏其複雜性。門面模式(或外觀模式)的實現實例結構如下圖中所示 -第1步創建一個接口,如下 -Shape.javapublic interface Shape {void draw
  • 如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息
    軟體項目實訓及課程設計指導——如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息1、什麼是策略(Strategy)設計模式策略設計模式把「算法」(也就是軟體應用系統中的業務規則或者待實現的功能等)和「環境」(封裝軟體應用系統在實際應用時的場景)相互分離
  • java 23種設計模式及其在spring,tomcat,jdk中的應用
    設計模式是前人(一般都是大師)對程序設計經驗的總結,學習並應用設計模式可以使我們開發的項目更加規範、便於擴展和維護,這大概是為什麼設計模式基本是面試必問的原因吧!本文主要內容有四部分:設計原則、設計模式分類、23種設計模式、設計模式應用。設計模式雖多,但重要的、主流開源框架應用較多的往往就那幾個。
  • Java Singleton設計模式DEMO
    當您只想擁有給定類的一個實例時,將使用單例設計模式。它是一種創造性的設計模式,我們處理對象的創建。動機和現實世界的例子在面向對象的設計中,某些類只有一個實例非常重要。那是因為它們代表了一種獨特的東西,這是同類產品中的一種。
  • C語言,去你的策略模式!
    但是在使用過程中,必定是不如自帶這些特性的語言方便好用的,比如C++\java等。一旦要通過C語言來實現各種設計模式,必定會在嚴謹地維護類層次上造成非常繁瑣和臃腫的代碼。這是因為C++/java等自帶一套面向對象的工具,而C語言要在代碼設計中,不斷地根據實際情況來創造面向對象的工具。
  • 設計模式之工廠模式-抽象工廠模式
    設計模式之工廠模式-抽象工廠模式抽象工廠模式:定義了一個接口用於創建相關或有依賴關係的對象簇,而無需明確指定具體類。我們來看看使用抽象工廠模式來實現的披薩項目。來源:凱哥Java(kaigejava)先來看看項目結構:說明:1:工廠接口2:兩個實現類3:訂單對象
  • 設計模式之適配器模式(Java實現)
    設計模式之適配器模式(Java實現)小王正在和美女聊天,突然接到領導電話,要讓會議室投影匯報項目情況,只能暫時離開美女去了會議室,到了會議室,發現投影儀的接口和自己電腦中的接口不匹配這個在設計模式中就是適配器模式。適配器模式(Adapter Pattern):將一個類的接口變換成客戶端所期待的另一個接口,從而是原本因為接口不匹配而無法在一起工作的兩個類能夠在一起工作。適配器模式的通用類圖如下: