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

網(wǎng)站頁面如何設(shè)計(jì)防偽碼做網(wǎng)站的還能沒導(dǎo)入嗎

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

做網(wǎng)站為什么能賺錢嗎iis配置wordpress

做網(wǎng)站為什么能賺錢嗎,iis配置wordpress,八面通網(wǎng)站建設(shè),網(wǎng)站建設(shè)蘇州目錄 手把手教你學(xué)Simulink--基礎(chǔ)儲(chǔ)能管理場(chǎng)景實(shí)例:基于Simulink的鋰電池健康狀態(tài)(SOH)在線評(píng)估仿真

2026/01/23 17:56:01

天下網(wǎng)商自助建站系統(tǒng)南昌網(wǎng)站建設(shè)58

天下網(wǎng)商自助建站系統(tǒng),南昌網(wǎng)站建設(shè)58,響應(yīng)式網(wǎng)站 像素,建筑設(shè)計(jì)規(guī)范網(wǎng)站暗黑破壞神II角色編輯器終極指南#xff1a;從入門到精通的完整解決方案 【免費(fèi)下載鏈接】diablo_edit Diablo

2026/01/22 21:44:01

池州微信網(wǎng)站建設(shè)用新浪微博做網(wǎng)站

池州微信網(wǎng)站建設(shè),用新浪微博做網(wǎng)站,上海網(wǎng)站關(guān)鍵詞排名,萊州網(wǎng)站建設(shè)包年多少錢Git_Windows安裝地址 1.Git中和Linux相同的常用指令 常用 Linux 命令整理#xff1a; 文件

2026/01/23 01:53:01