新闻详情

新闻详情

首页 / 资讯中心 / 详情

动物园里有什么-策略模式

发布时间:2026/9/30 17:18:26来源:尧图网络
动物园里有什么-策略模式
动物园里有什么呢有狮子老虎大象还有饲养员还有游客还有还有就是设计模式。为什么还有设计模式呢我们就先从入园开始来一场娱乐与学习的盛宴吧。入园要先买票买票可以售票处买也可以小程序买也可以App买那就出现了这样的场景同一个动作「买票」有多种独立的算法 / 实现售票处窗口买票、小程序买票、App买票可以动态切换各个方案之间不存在自动流转。这种就是策略模式。策略模式定义定义一系列算法把每一个算法封装起来并且让它们可以互相替换。算法独立于使用它的客户端而变化。结构图角色策略接口定义算法方法具体策略实现策略接口并重写算法方法Context持有策略的引用在方法中调用的策略引用的方法。示例用策略模式写出动物园买票的案例。// 策略接口 public interface Strategy { void buyTicket(); } // 售票口 public class TicketWindowStrategy implements Strategy { Override public void buyTicket() { System.out.println(到动物园售票口买票); } } // 小程序 public class MiniProgramStrategy implements Strategy { Override public void buyTicket() { System.out.println(使用动物园小程序买票); } } // APP public class AppStrategy implements Strategy { Override public void buyTicket() { System.out.println(使用动物园App买票); } } // Context public class Context { private Strategy strategy; public Context(Strategy strategy) { if(strategy null){ throw new IllegalArgumentException(策略不能为null); } this.strategy strategy; } public void setStrategy(Strategy strategy) { if(strategy null){ throw new IllegalArgumentException(策略不能为空); } this.strategy strategy; } public void executeBuyTicket() { strategy.buyTicket(); } } // 测试 public class TicketMain { public static void main(String[] args) { Context context new Context(new TicketWindowStrategy()); context.executeBuyTicket(); // 通过set方法改变策略 context.setStrategy(new MiniProgramStrategy()); context.executeBuyTicket(); } }现在我们要加一个「自助机」买票只需要再新增一个「自助机策略类」就可以了。当我们以后遇到同一个行为动作会有不同的实现方式并且算法之间不会自动流转切换这句话很重要。就可以考虑策略模式了。所以策略模式是一种行为型设计模式。但是设计模式有一个缺点其中一个客户端必须知道所有策略类才能挑选合适的策略。用白话一点的语言解释就是客户端需要new 对应的策略类。那种该怎么解决呢我们需要结合另外一种设计模式——静态工厂模式。静态工厂模式这种设计模式非常简单用一句话概括由一个工厂类根据传入的参数动态决定创建哪一个产品类的实例。注意静态工厂不算是GoF23种设计模式之一。就是用的场景比较多了。角色分析抽象产品静态工厂返回的抽象类型。具体产品抽象产品的具体实现类。工厂类一个静态方法方法中带有参数根据参数new 不同的具体产品返回抽象产品类型。上面的买票策略我们可以使用静态工厂创建不同的策略类。// 抽象产品 public interface Shape { void draw(); } // 具体产品1圆形 public class Circle implements Shape{ Override public void draw() { System.out.println(绘制圆形); } } // 具体产品2矩形 public class Rectangle implements Shape{ Override public void draw() { System.out.println(绘制矩形); } } // 工厂类静态方法根据参数创建实例【静态工厂核心】 public class ShapeFactory { // 静态创建方法 public static Shape getShape(String type){ if(circle.equals(type)){ return new Circle(); }else if(rectangle.equals(type)){ return new Rectangle(); } return null; } } public class Client { public static void main(String[] args) { Shape s1 ShapeFactory.getShape(circle); s1.draw(); Shape s2 ShapeFactory.getShape(rectangle); s2.draw(); } }我们将买票策略和静态工厂模式结合起来部分代码改变如下// 新增一个工厂类 public class StrategyFactory { public static Strategy getStrategy(String code){ if(code.equals(tickWindow)){ return new TicketWindowStrategy(); } if(code.equals(minProgramStrategy)){ return new MiniProgramStrategy(); } if(code.equals(appStrategy)){ return new AppStrategy(); } throw new IllegalArgumentException(参数无效); } } // 客户端改动 public static void main(String[] args) { Strategy ticketWindowStrategy StrategyFactory.getStrategy(ticketWindow); Context context new Context(ticketWindowStrategy); context.executeBuyTicket(); // 动态切换策略 context.setStrategy(StrategyFactory.getStrategy(miniProgramStrategy)); context.executeBuyTicket(); }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

让AI跨会话记住你的偏好:claude-code-from-scratch语义记忆召回系统设计解析 2026/10/1 3:01:10

让AI跨会话记住你的偏好:claude-code-from-scratch语义记忆召回系统设计解析

让AI跨会话记住你的偏好:claude-code-from-scratch语义记忆召回系统设计解析 【免费下载链接】claude-code-from-scratch Build your own Claude Code from scratch. 🔍 Claude Code 开源了 50 万行代码,读不动?用 ~5000 行 TypeS…

阅读更多 →
Windows下MSVC编译QGIS 3.34 LTR完整流程与踩坑指南 2026/10/1 3:01:10

Windows下MSVC编译QGIS 3.34 LTR完整流程与踩坑指南

编译 QGIS,说难也难,说简单也简单。难在依赖多、版本杂、报错信息往往不直白;简单在于一旦环境理顺,剩下就是等进度条。我自己在 Windows 10 上用 MSVC 编译 QGIS 3.34.10 的整个过程前后折腾了两天,踩了不少坑&#x…

阅读更多 →
西安汽车行业GEO优化服务商家测评排名,不踩坑 2026/10/1 3:00:57

西安汽车行业GEO优化服务商家测评排名,不踩坑

现在很多西安汽车行业从业者都会搜索擅长汽车行业GEO优化公司,也会好奇本土有哪些知名的汽车行业GEO优化品牌企业,大家都想找到靠谱的优化服务,让自己的品牌能在AI搜索时代拿到更多本地流量。随着AI智能搜索成为用户寻找本地汽车相关服务的主…

阅读更多 →
浙江智能GEO源头厂家实力参考与行业观察 2026/10/1 3:00:57

浙江智能GEO源头厂家实力参考与行业观察

在生成式AI技术快速普及的今天,越来越多B端实体企业开始布局AI搜索获客赛道,资质齐全的GEO源头厂家成为全行业渠道服务商与实体企业关注的核心合作对象。很多从业者在布局GEO业务时都会搜索,geo源头厂家公司哪家好,geo源头厂家怎么…

阅读更多 →
SpringBoot事务失效的8个场景,你中招了吗 2026/10/1 3:00:57

SpringBoot事务失效的8个场景,你中招了吗

场景一:方法不是publicSpring的声明式事务基于动态代理,而代理只能拦截public方法。你把Transactional标在private、protected或包级方法上,Spring连看都不看一眼。非public方法上的事务注解,就像贴在墙上的符咒,好看不…

阅读更多 →
面试场景下的AI Agent工程化实践:从零构建可交付骨架 2026/10/1 3:00:50

面试场景下的AI Agent工程化实践:从零构建可交付骨架

1. 为什么《码上面试》Agent项目值得从第一行代码开始重读“《码上面试》Agent项目学习记录(一)”——这个标题乍看像一份普通的学习笔记,但结合近期全网高频出现的“agent开发”“ai agent搭建”“agent框架与编排”“从0到1搭建ai agent”等…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉