红酒公司的网站建设惠州市做网站的公司

张小明 2026/1/8 8:35:39
红酒公司的网站建设,惠州市做网站的公司,wordpress ajax很慢,the author wordpress临时插入一个额外知识换换思路#xff0c;认识一下几个业务中常用的设计模式#xff0c;尽可能讲明白、多多点赞支持~引言在软件开发过程中#xff0c;设计模式是解决常见问题的经典方案。今天我们将深入探讨三种常用的行为型设计模式#xff1a;策略模式、责任链模式和模板…临时插入一个额外知识换换思路认识一下几个业务中常用的设计模式尽可能讲明白、多多点赞支持~引言在软件开发过程中设计模式是解决常见问题的经典方案。今天我们将深入探讨三种常用的行为型设计模式策略模式、责任链模式和模板模式。每种模式都有其独特的适用场景和优势能够帮助我们编写出更加灵活、可维护的代码。1. 策略模式 (Strategy Pattern)模式介绍策略模式定义了一系列算法将每个算法封装起来并且使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。核心思想封装变化将经常变化的算法部分抽象出来面向接口针对接口编程而不是针对实现组合优于继承通过组合方式使用算法避免继承带来的复杂性适用场景一个系统需要在多种算法中选择一种有多个条件语句定义不同行为的情况希望算法可以自由切换需要隔离算法的使用和实现经典示例支付系统/*** 支付策略接口* 定义所有支付方式必须实现的方法*/interface PaymentStrategy {/*** 执行支付* 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;}/*** 执行支付操作* 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) {// 创建支付上下文PaymentContext context new PaymentContext();// 使用支付宝支付System.out.println( 支付宝支付 );context.setPaymentStrategy(new AlipayStrategy());context.executePayment(100.0);// 使用微信支付System.out.println(\n 微信支付 );context.setPaymentStrategy(new WechatPayStrategy());context.executePayment(200.0);// 使用银行卡支付System.out.println(\n 银行卡支付 );context.setPaymentStrategy(new BankCardStrategy(6225880112345678, 123));context.executePayment(300.0);}}策略模式优势开闭原则新增支付方式无需修改现有代码消除条件判断避免大量的if-else语句代码复用相同算法可以在不同环境中复用易于测试每个策略都可以独立测试2. 责任链模式 (Chain of Responsibility Pattern)模式介绍责任链模式将请求的发送者和接收者解耦让多个对象都有机会处理这个请求。将这些对象连成一条链并沿着这条链传递请求直到有一个对象处理它为止。核心思想解耦发送者和接收者发送者不需要知道哪个对象会处理请求动态组合可以动态地添加或修改处理链灵活处理每个处理器可以选择处理请求或传递给下一个适用场景有多个对象可以处理同一个请求想在不明确指定接收者的情况下向多个对象中的一个提交请求需要动态指定一组对象处理请求经典示例请假审批系统/*** 请假请求类* 包含请假的基本信息*/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() {// 创建各个处理器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(\n 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);}}责任链模式优势降低耦合度请求发送者无需知道具体的处理者动态配置可以动态地添加、删除或修改处理链灵活性可以改变处理链的顺序或结构单一职责每个处理者只关注自己的处理逻辑3. 模板模式 (Template Pattern)模式介绍模板模式定义了一个操作中的算法骨架而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。核心思想封装不变部分将不变的行为移到父类扩展可变部分将变化的行为由子类实现代码复用公共的代码在父类中实现控制子类扩展通过模板方法控制子类的扩展点适用场景有多个类包含相同的操作但其中某些步骤的实现不同需要控制子类扩展时只允许在特定点进行扩展重要的复杂算法需要定义骨架细节由子类实现经典示例饮料制作系统/*** 抽象饮料类 - 模板类* 定义饮料制作的基本流程*/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() {// 默认不执行额外步骤}/*** 冲泡方法 - 抽象方法必须由子类实现*/protected abstract void brew();/*** 添加调料 - 抽象方法必须由子类实现*/protected abstract void addCondiments();/*** 获取饮料名称 - 抽象方法必须由子类实现*/protected abstract String getBeverageName();}/*** 茶类 - 具体模板* 实现茶的具体制作步骤*/class Tea extends BeverageTemplate {
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

模板网站有哪几类wordpress 默认相册

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个交互式学习工具,引导用户:1) 理解错误含义 2) 配置JVM参数 3) 使用基础分析工具 4) 识别常见内存泄漏模式 5) 实施简单优化。要求每个步骤提供示例代…

张小明 2025/12/30 17:56:26 网站建设

怎么优化推广自己的网站做调查网站怎样换IP

JDK17技术迁移浪潮下Nacos架构适配策略深度解析 【免费下载链接】nacos Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。 项目地址: https://gitcode…

张小明 2025/12/30 20:03:34 网站建设

临沂seo网站推广免费网站你懂我意思正能量软件

还在为视频播放器卡顿、界面老旧、功能单一而烦恼吗?mpv.net这款基于mpv的Windows平台媒体播放器,用现代化界面和高性能播放引擎,彻底解决你的观影困扰。🎬 【免费下载链接】mpv.net 🎞 mpv.net is a media player for…

张小明 2025/12/29 20:13:04 网站建设

便捷网站建设哪家便宜权重查询站长工具

EmotiVoice语音合成模型的在线微调与反馈学习机制设想 在虚拟偶像的一场直播中,粉丝弹幕刷出“声音太冷了,不像平时温柔的你”,系统几秒后自动切换语气回应:“抱歉呢,我调整了一下心情~”——这不再是科幻场景。随着用…

张小明 2025/12/30 20:03:30 网站建设

站长工具seo综合查询adc网站的邀请怎么做的

UniHacker是一款革命性的开源Unity工具,能够完美绕过Unity许可证验证,让用户免费使用Unity全系列版本。这款跨平台工具支持Windows、MacOS和Linux系统,为Unity开发者和学习者提供了极大的便利。 【免费下载链接】UniHacker 为Windows、MacOS、…

张小明 2025/12/30 20:03:27 网站建设

嘉兴网站建设正规公司深圳网页定做

从研究到落地:Kotaemon推动RAG技术商业化进程 在企业纷纷拥抱大模型的今天,一个尴尬的事实却反复上演:明明用了最先进的LLM,客服机器人回答客户问题时依然“一本正经地胡说八道”。金融顾问系统引述不存在的政策条款,医…

张小明 2025/12/30 20:03:25 网站建设