97色伦色在线综合视频,无玛专区,18videosex性欧美黑色,日韩黄色电影免费在线观看,国产精品伦理一区二区三区,在线视频欧美日韩,亚洲欧美在线中文字幕不卡

免費企業(yè)模板網站德陽企業(yè)網站建設

鶴壁市浩天電氣有限公司 2026/01/24 08:46:13
免費企業(yè)模板網站,德陽企業(yè)網站建設,手機建立網站app,忻州網站制作臨時插入一個額外知識換換思路#xff0c;認識一下幾個業(yè)務中常用的設計模式#xff0c;盡可能講明白、多多點贊支持~引言在軟件開發(fā)過程中#xff0c;設計模式是解決常見問題的經典方案。今天我們將深入探討三種常用的行為型設計模式#xff1a;策略模式、責任鏈模式和模板…臨時插入一個額外知識換換思路認識一下幾個業(yè)務中常用的設計模式盡可能講明白、多多點贊支持~引言在軟件開發(fā)過程中設計模式是解決常見問題的經典方案。今天我們將深入探討三種常用的行為型設計模式策略模式、責任鏈模式和模板模式。每種模式都有其獨特的適用場景和優(yōu)勢能夠幫助我們編寫出更加靈活、可維護的代碼。1. 策略模式 (Strategy Pattern)模式介紹策略模式定義了一系列算法將每個算法封裝起來并且使它們可以相互替換。策略模式讓算法的變化獨立于使用算法的客戶。核心思想封裝變化將經常變化的算法部分抽象出來面向接口針對接口編程而不是針對實現組合優(yōu)于繼承通過組合方式使用算法避免繼承帶來的復雜性適用場景一個系統需要在多種算法中選擇一種有多個條件語句定義不同行為的情況希望算法可以自由切換需要隔離算法的使用和實現經典示例支付系統/*** 支付策略接口* 定義所有支付方式必須實現的方法*/interface PaymentStrategy {/*** 執(zhí)行支付* param amount 支付金額* return 支付結果*/boolean pay(double amount);/*** 獲取支付方式名稱* return 支付方式名稱*/String getPaymentMethod();}/*** 支付寶支付策略* 實現支付寶特有的支付邏輯*/class AlipayStrategy implements PaymentStrategy {Overridepublic boolean pay(double amount) {System.out.println(使用支付寶支付 amount 元);// 調用支付寶SDK進行支付System.out.println(調用支付寶接口...);System.out.println(用戶確認支付...);System.out.println(支付成功);return true;}Overridepublic String getPaymentMethod() {return 支付寶;}}/*** 微信支付策略* 實現微信支付特有的支付邏輯*/class WechatPayStrategy implements PaymentStrategy {Overridepublic boolean pay(double amount) {System.out.println(使用微信支付 amount 元);// 調用微信支付SDK進行支付System.out.println(調用微信支付接口...);System.out.println(用戶輸入密碼...);System.out.println(支付成功);return true;}Overridepublic String getPaymentMethod() {return 微信支付;}}/*** 銀行卡支付策略* 實現銀行卡支付特有的支付邏輯*/class BankCardStrategy implements PaymentStrategy {private String cardNumber;private String cvv;public BankCardStrategy(String cardNumber, String cvv) {this.cardNumber cardNumber;this.cvv cvv;}Overridepublic boolean pay(double amount) {System.out.println(使用銀行卡支付 amount 元);// 調用銀行支付網關System.out.println(驗證銀行卡信息...);System.out.println(卡號: maskCardNumber(cardNumber));System.out.println(調用銀行支付網關...);System.out.println(支付成功);return true;}Overridepublic String getPaymentMethod() {return 銀行卡;}private String maskCardNumber(String cardNumber) {// 隱藏銀行卡號中間部分if (cardNumber.length() 8) {return cardNumber.substring(0, 4) **** **** cardNumber.substring(cardNumber.length() - 4);}return cardNumber;}}/*** 支付上下文* 負責管理和使用具體的支付策略*/class PaymentContext {private PaymentStrategy paymentStrategy;/*** 設置支付策略* param paymentStrategy 具體的支付策略*/public void setPaymentStrategy(PaymentStrategy paymentStrategy) {this.paymentStrategy paymentStrategy;}/*** 執(zhí)行支付操作* param amount 支付金額* return 支付結果*/public boolean executePayment(double amount) {if (paymentStrategy null) {throw new IllegalStateException(支付策略未設置);}System.out.println(開始 paymentStrategy.getPaymentMethod() 支付流程...);return paymentStrategy.pay(amount);}}/*** 策略模式演示類*/public class StrategyPatternDemo {public static void main(String[] args) {// 創(chuàng)建支付上下文PaymentContext context new PaymentContext();// 使用支付寶支付System.out.println( 支付寶支付 );context.setPaymentStrategy(new AlipayStrategy());context.executePayment(100.0);// 使用微信支付System.out.println( 微信支付 );context.setPaymentStrategy(new WechatPayStrategy());context.executePayment(200.0);// 使用銀行卡支付System.out.println( 銀行卡支付 );context.setPaymentStrategy(new BankCardStrategy(6225880112345678, 123));context.executePayment(300.0);}}策略模式優(yōu)勢開閉原則新增支付方式無需修改現有代碼消除條件判斷避免大量的if-else語句代碼復用相同算法可以在不同環(huán)境中復用易于測試每個策略都可以獨立測試2. 責任鏈模式 (Chain of Responsibility Pattern)模式介紹責任鏈模式將請求的發(fā)送者和接收者解耦讓多個對象都有機會處理這個請求。將這些對象連成一條鏈并沿著這條鏈傳遞請求直到有一個對象處理它為止。核心思想解耦發(fā)送者和接收者發(fā)送者不需要知道哪個對象會處理請求動態(tài)組合可以動態(tài)地添加或修改處理鏈靈活處理每個處理器可以選擇處理請求或傳遞給下一個適用場景有多個對象可以處理同一個請求想在不明確指定接收者的情況下向多個對象中的一個提交請求需要動態(tài)指定一組對象處理請求經典示例請假審批系統/*** 請假請求類* 包含請假的基本信息*/class LeaveRequest {private String employeeName;private int leaveDays;private String reason;public LeaveRequest(String employeeName, int leaveDays, String reason) {this.employeeName employeeName;this.leaveDays leaveDays;this.reason reason;}// Getter 方法public String getEmployeeName() { return employeeName; }public int getLeaveDays() { return leaveDays; }public String getReason() { return reason; }}/*** 審批處理器接口* 定義審批處理器的基本行為*/interface ApprovalHandler {/*** 設置下一個處理器* param nextHandler 下一個審批處理器*/void setNextHandler(ApprovalHandler nextHandler);/*** 處理請假請求* param request 請假請求* return 處理結果*/boolean handleRequest(LeaveRequest request);}/*** 組長審批處理器* 處理1天以內的請假*/class GroupLeaderHandler implements ApprovalHandler {private ApprovalHandler nextHandler;Overridepublic void setNextHandler(ApprovalHandler nextHandler) {this.nextHandler nextHandler;}Overridepublic boolean handleRequest(LeaveRequest request) {System.out.println(組長正在審批 request.getEmployeeName() 的請假申請...);if (request.getLeaveDays() 1) {System.out.println(? 組長批準 request.getEmployeeName() 請假 request.getLeaveDays() 天原因 request.getReason());return true;}System.out.println(?? 組長無權限審批 request.getLeaveDays() 天請假轉交上級);return nextHandler ! null nextHandler.handleRequest(request);}}/*** 班長審批處理器* 處理3天以內的請假*/class SquadLeaderHandler implements ApprovalHandler {private ApprovalHandler nextHandler;Overridepublic void setNextHandler(ApprovalHandler nextHandler) {this.nextHandler nextHandler;}Overridepublic boolean handleRequest(LeaveRequest request) {System.out.println(班長正在審批 request.getEmployeeName() 的請假申請...);if (request.getLeaveDays() 3) {System.out.println(? 班長批準 request.getEmployeeName() 請假 request.getLeaveDays() 天原因 request.getReason());return true;}System.out.println(?? 班長無權限審批 request.getLeaveDays() 天請假轉交上級);return nextHandler ! null nextHandler.handleRequest(request);}}/*** 副廠長審批處理器* 處理3天以內的請假與班長權限相同但角色不同*/class ViceManagerHandler implements ApprovalHandler {private ApprovalHandler nextHandler;Overridepublic void setNextHandler(ApprovalHandler nextHandler) {this.nextHandler nextHandler;}Overridepublic boolean handleRequest(LeaveRequest request) {System.out.println(副廠長正在審批 request.getEmployeeName() 的請假申請...);if (request.getLeaveDays() 3) {System.out.println(? 副廠長批準 request.getEmployeeName() 請假 request.getLeaveDays() 天原因 request.getReason());return true;}System.out.println(?? 副廠長無權限審批 request.getLeaveDays() 天請假轉交廠長);return nextHandler ! null nextHandler.handleRequest(request);}}/*** 廠長審批處理器* 處理所有請假是責任鏈的終點*/class ManagerHandler implements ApprovalHandler {private ApprovalHandler nextHandler;Overridepublic void setNextHandler(ApprovalHandler nextHandler) {// 廠長是最終審批人沒有下一個處理器}Overridepublic boolean handleRequest(LeaveRequest request) {System.out.println(廠長正在審批 request.getEmployeeName() 的請假申請...);if (request.getLeaveDays() 10) {System.out.println(? 廠長批準 request.getEmployeeName() 請假 request.getLeaveDays() 天原因 request.getReason());return true;} else {System.out.println(? 廠長拒絕 request.getEmployeeName() 的請假申請 原因請假天數過長);return false;}}}/*** 審批鏈構建器* 負責構建審批責任鏈*/class ApprovalChainBuilder {/*** 構建完整的審批責任鏈* return 責任鏈的起始處理器*/public static ApprovalHandler buildChain() {// 創(chuàng)建各個處理器ApprovalHandler groupLeader new GroupLeaderHandler();ApprovalHandler squadLeader new SquadLeaderHandler();ApprovalHandler viceManager new ViceManagerHandler();ApprovalHandler manager new ManagerHandler();// 構建責任鏈組長 - 班長 - 副廠長 - 廠長groupLeader.setNextHandler(squadLeader);squadLeader.setNextHandler(viceManager);viceManager.setNextHandler(manager);return groupLeader;}}/*** 請假服務類* 提供請假申請服務*/class LeaveService {private ApprovalHandler approvalHandler;public LeaveService() {this.approvalHandler ApprovalChainBuilder.buildChain();}/*** 提交請假申請* param request 請假請求* return 審批結果*/public boolean submitLeaveRequest(LeaveRequest request) {System.out.println( request.getEmployeeName() 提交請假申請 );System.out.println(請假天數 request.getLeaveDays() 天);System.out.println(請假原因 request.getReason());return approvalHandler.handleRequest(request);}}/*** 責任鏈模式演示類*/public class ChainOfResponsibilityPatternDemo {public static void main(String[] args) {LeaveService leaveService new LeaveService();// 測試不同天數的請假申請System.out.println( 責任鏈模式 - 請假審批演示 );// 1天請假 - 組長審批LeaveRequest request1 new LeaveRequest(張三, 1, 身體不適);leaveService.submitLeaveRequest(request1);// 2天請假 - 班長審批LeaveRequest request2 new LeaveRequest(李四, 2, 家里有事);leaveService.submitLeaveRequest(request2);// 3天請假 - 副廠長審批LeaveRequest request3 new LeaveRequest(王五, 3, 年假休息);leaveService.submitLeaveRequest(request3);// 5天請假 - 廠長審批LeaveRequest request4 new LeaveRequest(趙六, 5, 婚假);leaveService.submitLeaveRequest(request4);// 15天請假 - 廠長拒絕LeaveRequest request5 new LeaveRequest(錢七, 15, 長假旅游);leaveService.submitLeaveRequest(request5);}}責任鏈模式優(yōu)勢降低耦合度請求發(fā)送者無需知道具體的處理者動態(tài)配置可以動態(tài)地添加、刪除或修改處理鏈靈活性可以改變處理鏈的順序或結構單一職責每個處理者只關注自己的處理邏輯3. 模板模式 (Template Pattern)模式介紹模板模式定義了一個操作中的算法骨架而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。核心思想封裝不變部分將不變的行為移到父類擴展可變部分將變化的行為由子類實現代碼復用公共的代碼在父類中實現控制子類擴展通過模板方法控制子類的擴展點適用場景有多個類包含相同的操作但其中某些步驟的實現不同需要控制子類擴展時只允許在特定點進行擴展重要的復雜算法需要定義骨架細節(jié)由子類實現經典示例飲料制作系統/*** 抽象飲料類 - 模板類* 定義飲料制作的基本流程*/abstract class BeverageTemplate {/*** 模板方法 - 定義飲料制作的完整流程final防止子類重寫*/public final void prepareBeverage() {boilWater(); // 煮沸水brew(); // 沖泡由子類實現pourInCup(); // 倒入杯子addCondiments(); // 添加調料由子類實現// 鉤子方法 - 子類可以選擇性重寫if (customerWantsCondiments()) {extraStep(); // 額外步驟}serve(); // 上飲料}/*** 煮沸水 - 具體方法所有飲料都需要煮沸水*/private void boilWater() {System.out.println(1. 煮沸水);}/*** 倒入杯子 - 具體方法所有飲料都需要倒入杯子*/private void pourInCup() {System.out.println(3. 倒入杯子);}/*** 上飲料 - 具體方法所有飲料都需要上桌*/private void serve() {System.out.println(6. 上飲料 getBeverageName());}/*** 鉤子方法 - 客戶是否想要調料默認返回true子類可重寫*/protected boolean customerWantsCondiments() {return true;}/*** 額外步驟 - 鉤子方法默認空實現子類可重寫*/protected void extraStep() {// 默認不執(zhí)行額外步驟}/*** 沖泡方法 - 抽象方法必須由子類實現*/protected abstract void brew();/*** 添加調料 - 抽象方法必須由子類實現*/protected abstract void addCondiments();/*** 獲取飲料名稱 - 抽象方法必須由子類實現*/protected abstract String getBeverageName();}/*** 茶類 - 具體模板* 實現茶的具體制作步驟*/class Tea extends BeverageTemplate {
版權聲明: 本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若內容造成侵權/違法違規(guī)/事實不符,請聯系我們進行投訴反饋,一經查實,立即刪除!

婚慶公司網站建設doc360營銷

婚慶公司網站建設doc,360營銷,WordPress 發(fā)表文章api,網站 二級域名博主介紹#xff1a;??碼農一枚 #xff0c;專注于大學生項目實戰(zhàn)開發(fā)、講解和畢業(yè)#x1f6a2;文撰寫修改等

2026/01/23 10:32:02

有什么網站做微商做醫(yī)藥商城網站的公司

有什么網站做微商,做醫(yī)藥商城網站的公司,網站建設報價多少,建設網站的風格ComfyUI在災害模擬圖像生成中的應急響應價值 在臺風即將登陸的前夜#xff0c;城市應急指揮中心的大屏上開始滾動播放一組動態(tài)

2026/01/23 07:10:01

域名網站怎么做的清河網站建設電話

域名網站怎么做的,清河網站建設電話,如何制作網站鏈接,網頁培訓多少錢當千年石刻文化遇見低空經濟#xff0c;巴蜀文旅融合揭開新篇章。 同時#xff0c;巴蜀低空文旅走廊第二站——“川渝石窟寺國家遺址公

2026/01/22 23:26:01

網站設計的實例幫您做網站

網站設計的實例,幫您做網站,平陽住房和城鄉(xiāng)建設廳網站,滄州房產信息網在AI技術飛速發(fā)展的今天#xff0c;大模型已成為驅動產業(yè)變革的核心引擎#xff0c;廣泛應用于智能辦公、代碼開發(fā)、智能交互等多個場

2026/01/22 22:17:01