java23種設計模式之策略模式

概述

? ? ? ? 策略模式是23種設計模式之一,也是工作中出現頻率比較高的設計模式之一,策略模式主要是為了針對不通業務場景做出不同行為的一種設計模式。該模式一般可以直接替換多個if eles 的場景。策略模式主要分為三個部分,策略接口,具體實現策略的類,還有一個策略上下文對象。

示例

package com.example.demo.service.strategy;/*** @author 雙子的小壞* @date 2024/6/28 11:44:54* @description : 吃什么策略接口*/
public interface EatWhatStrategy {/*** 吃東西方法* @return*/String eatSomeing();
}
package com.example.demo.service.strategy;/*** @author 雙子的小壞* @date 2024/6/28 11:47:05* @description :有錢的策略*/
public class HaveMoneyStrategy implements EatWhatStrategy{@Overridepublic String eatSomeing() {return "有錢當然是下館子了!!!";}
}
package com.example.demo.service.strategy;/*** @author 雙子的小壞* @date 2024/6/28 11:50:16* @description :沒錢的策略*/
public class NoMoneyStrategy implements EatWhatStrategy{@Overridepublic String eatSomeing() {return "沒錢就吃土唄";}
}
package com.example.demo.service.strategy;/*** @author 雙子的小壞* @date 2024/6/28 11:51:36* @description : 吃什么策略的上下文對象*/
public class EatWhatStrategyContent {/*** 吃什么策略的引用*/private EatWhatStrategy eatWhatStrategy;/*** 設置策略的方法* @param eatWhatStrategy 具體策略*/public void setEatWhatStrategy(EatWhatStrategy eatWhatStrategy){this.eatWhatStrategy = eatWhatStrategy;}/*** 調用吃什么的方法*/public String eat(){return   eatWhatStrategy.eatSomeing();}
}
package com.example.demo.service.strategy;/*** @author 雙子的小壞* @date 2024/6/28 11:56:32* @description : 策略模式*/
public class StrategyDemo {public static void main(String[] args) {//創建上下文對象EatWhatStrategyContent eatWhatStrategyContent = new EatWhatStrategyContent();//設置有錢的策略eatWhatStrategyContent.setEatWhatStrategy( new HaveMoneyStrategy());//調用策略方法進行返回String eatStr = eatWhatStrategyContent.eat();System.out.println(eatStr);//設置沒錢的策略eatWhatStrategyContent.setEatWhatStrategy(new NoMoneyStrategy());//調用策略方法進行返回eatStr = eatWhatStrategyContent.eat();System.out.println(eatStr);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37196.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37196.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[數據集][目標檢測]棉花葉子害蟲檢測數據集VOC+YOLO格式595張1類別

數據集格式:Pascal VOC格式YOLO格式(不包含分割路徑的txt文件,僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數):595 標注數量(xml文件個數):595 標注數量(txt文件個數):595 標注類別…

找不到xinput1_3.dll怎么辦,實測有效的幾種方法分享

在日的使用電腦過程中,我們經常會遇到各種各樣的問題。其中之一就是找不到xinput1_3.dll文件。這個問題可能會影響到我們的游戲體驗,甚至導致電腦無法正常運行。那么,又該如何解決這個問題呢?小編將全面解析找不到xinput1_3.dll對…

老無憂,成熟人士都在玩的社交app

隨著互聯網向不同年齡群體的進一步滲透,越來越多大齡人士逐步在傳統以年輕人為主的平臺中搭建起自己的空間,對締結社交關系的需求也變得強烈起來。老無憂無憂交友app應運而生,于2024年6月1日正式上線(以下簡稱“老無憂”&#xff…

深入解析npm install --save-dev:開發依賴管理的藝術

npm(Node Package Manager)是JavaScript編程語言的包管理器,用于管理項目中的依賴關系。在開發過程中,合理地管理依賴是保證項目可維護性和可擴展性的關鍵。npm install命令是npm中最常用的命令之一,而--save-dev參數則…

基于Java倉儲出入庫管理系統設計和實現(源碼+LW+調試文檔+講解等)

💗博主介紹:?全網粉絲10W,CSDN作者、博客專家、全棧領域優質創作者,博客之星、平臺優質作者、專注于Java、小程序技術領域和畢業項目實戰?💗 🌟文末獲取源碼數據庫🌟感興趣的可以先收藏起來,還…

GPU算力是什么,哪些行業需要用到GPU算力?

近兩年,計算能力已成為推動各行各業發展的關鍵因素。而GPU(圖形處理器)算力,作為現代計算技術的重要分支,正逐漸在多個領域展現出其強大的潛力和價值。尚云將簡要介紹GPU算力的定義和基本原理,并探討其在哪…

CSS盒子模型:深入理解網頁布局的基石

在網頁設計和開發中,CSS盒子模型是構建布局的基礎。它決定了元素在頁面上的顯示方式,包括元素的大小、間距以及它們如何相互交互。本文將詳細介紹CSS盒子模型的各個方面,包括內容區、內邊距、邊框、外邊距以及它們在實際布局中的應用。 盒子…

使用minio搭建oss

文章目錄 1.minio安裝1.拉取鏡像2.啟動容器3.開啟端口1.9090端口2.9000端口 4.訪問1.網址http://:9090/ 5.創建一個桶 2.minio文件服務基本環境搭建1.創建一個文件模塊2.目錄結構3.配置依賴3.application.yml 配置4.編寫配置類MinioConfig.java,構建minioClient5.Fi…

Verilog進行結構描述(四):Verilog邏輯強度(strength)模型

目錄 1.Verilog提供多級邏輯強度。2.基本單元強度說明語法3.信號強度值系統4.Verilog多種強度決斷 微信公眾號獲取更多FPGA相關源碼: 1.Verilog提供多級邏輯強度。 邏輯強度模型決定信號組合值是可知還是未知的,以更精確的描述硬件的行為。下面這些情…

web自動化(二)元素定位 xpath定位css定位

常用的元素定位:ID,Name,xpath,css 等等 selenuim demo import timefrom selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support imp…

數學建模---最小生成樹問題的建模~~~~~Matlab代碼

目錄 1.相關概念 (1)什么是樹 (2)生成樹和最小生成樹: 2.適用賽題 (1)賽題分類 (2)不同之處 3.兩種算法 (1)prim算法 (2&…

linux 下啟動app

創建啟動腳本: 創建一個啟動腳本,命名為你的應用程序或服務的名稱。這個腳本負責啟動、停止和管理你的應用程序。你可以使用 sudo 權限和任何文本編輯器創建這個腳本,比如 nano: bash sudo nano /etc/init.d/my_app 在編輯器中輸入啟動腳本的內容。一個簡單的例子可能如下…

java調用海康威視SDK實現車牌識別

我采用的是 報警布防方式 SDK版本為 CH-HCNetSDKV6.1.9.48_build20230410_win32 如何引用dll 我用的是jna 就不描述了 SDK在官網自行下載 以下代碼親測可用 自行參考~ 1.1接口調用流程 虛線框的內容是可選的,設備事先安裝配置好,能力集和配置接口可…

Linux高級編程——線程

pthread 線程 概念 :線程是輕量級進程,一般是一個進程中的多個任務。 進程是系統中最小的資源分配單位. 線程是系統中最小的執行單位。 優點: 比多進程節省資源,可以共享變量 進程會占用&am…

【高考】選專業時,應避免的誤區

【高考】選專業時,應避免的誤區-CSDN博客 【高考】選專業時以什么為主?-CSDN博客 分數限制下,選好專業還是選好學校?-CSDN博客 分數限制下,選好專業還是選好學校?-CSDN博客 在選專業時,考生…

解析 ThreadLocal 原理

ThreadLocal用于線程局部變量的一個工具類。 原理是為每個線程創建獨立的變量副本,從而實現線程數據的隔離。具體來說,ThreadLocal 通過一個 ThreadLocalMap來實現,這個 ThreadLocalMap 是一個自定義的哈希表,用于存儲線程和對應的…

Qt creator實現一個簡單計算器

目錄 1 界面設計 2 思路簡介 3 代碼 目錄 1 界面設計 ?2 思路簡介 3 代碼 3.1 widget.h 3.2 widget.c 4 完整代碼 在這里主要記載了如何使用Qt creator完成一個計算器的功能。該計算器可以實現正常的加減乘除以及括號操作,能實現簡單的計算器功能。 1 界…

Hadoop版本演變、分布式集群搭建

Hadoop版本演變歷史 Hadoop發行版非常的多,有華為發行版、Intel發行版、Cloudera Hadoop(CDH)、Hortonworks Hadoop(HDP),這些發行版都是基于Apache Hadoop衍生出來的。 目前Hadoop經歷了三個大的版本。 hadoop1.x:HDFSMapReduce hadoop2.x…

MySQL學習_python操作MySQL

用python連接數據庫分為以下幾個步驟 1.首先下載pymysql pip install pymysql2.創建數據 # 1.導入pymysql import pymysql # 2.連接MySQL conn pymysql.connect(host127.0.0.1,port3306,userroot,charsetutf8,dbunicom) cursor conn.cursor(cursorpymysql.cursors.DicCurso…

uniapp開發企業微信內部應用

最近一直忙著開發項目,終于1.0版本開發完成,抽時間自己總結下在項目開發中遇到的技術點。此次項目屬于自研產品,公司擴展業務,需要在企業微信中開發內部應用。因為工作中使用的是釘釘,很少使用企業微信,對于…