(老鸟略过)
之前的一篇简单方法模式连接地址
http://ysen.iteye.com/admin/blogs/542437
先来说说简单方法模式明显的优缺点
优点:将不同的业务实例在工厂内部实现,客户端只需要传个String类型的值就ok
缺点:如果增加新的女友(业务类型)那么就要修改switch分支条件(我这里用的if..else判断)这就破坏了设计模式的开放封闭原则,工厂方法模式就是解决这个问题的办法之一(不知道还有没有其它的方法忘高手指教)
在这里感谢hankesi2000的热心回帖
hankesi2000在上篇简单工厂方法中已经提到了工厂方法,我在这里顺便整理了下
下面是创建的对象的 接口
//基类
public class DreamGirl {
public void can_do_something_for_boy(){
}
}
下面都是具体实现
public class BeautifulGirl extends DreamGirl {
public void can_do_something_for_boy() {
System.out.println("陪老公逛街!!!");
}
}
public class LivelyGirl extends DreamGirl {
public void can_do_something_for_boy() {
System.out.println("陪老公聊天!!!");
}
}
public class LooksMediocreGirl extends DreamGirl {
public void can_do_something_for_boy() {
System.out.println("给老公做饭!!!");
}
}
public class SensibleGirl extends DreamGirl {
public void can_do_something_for_boy() {
System.out.println("给老公洗衣服!!!");
}
}
//接口:
public interface GirlFactory{
DreamGirl creatDreamGirl();
}
public class BeautifulGirlFactory implements GirlFactory{
public DreamGirl creatDreamGirl(){
return new BeautifulGirl();
}
}
public class LivelyGirlFactory implements GirlFactory{
public DreamGirl creatDreamGirl(){
return new LivelyGirl();
}
}
public class LooksMediocreGirlFactory implements GirlFactory{
public DreamGirl creatDreamGirl(){
return new LooksMediocreGirl();
}
}
public class SensibleGirlFactory implements GirlFactory{
public DreamGirl creatDreamGirl(){
return new SensibleGirl();
}
}
这样就是工厂方法了
现在来比较下简单工厂和工厂方法的优点缺点
首先比较客户端的调用(调用不同的业务女友一次):
a客户端调用简单工厂的话,客户端不需要知道工厂内部的实现,用户只需要传个字符串就能实例化具体的业务对象并调用具体的业务方法,这是简单工厂的优点。
b客户端调用工厂方法的话,显然将之前简单方法的中switch分支(业务判断)提到了客户端去判断了,显然不是我们所想要的。(这里利用反射可以解决该弱点)
设计模式的开放封闭原则:
上面说过了这是简单方法的缺点,但是工厂方法做到了这点,如果有新的女友加进来,那么so easy,只要加个新女友的 工厂方法就OK了 完全符合开放封闭的原则,完全不需要该switch。
这里还有个比较(调用一个业务女友多次):
简单工厂的话
//如果业务需求是这样子,需要调用多个同样类型的女友
DreamGirl girl1= new DreamGirlCreatFactory().creatDreamGirl(BeautifulGirl);
girl1.can_do_something_for_boy();
DreamGirl girl2= new DreamGirlCreatFactory().creatDreamGirl(BeautifulGirl);
girl2.can_do_something_for_boy();
DreamGirl girl3= new DreamGirlCreatFactory().creatDreamGirl(BeautifulGirl);
gir3.can_do_something_for_boy();
那么现在要将BeautifulGirl改成调用SensibleGirl 怎么办
要改好多,重复的太多代码就有了坏味道,经验告诉我们需要进行重构
看下工厂方法是怎么做的
GirlFactory girlFactory = new BeautifulGirlFactory();
DreamGirl girl1 = girlFactory.creatDreamGirl();
DreamGirl girl2 = girlFactory.creatDreamGirl();
DreamGirl girl3 = girlFactory.creatDreamGirl();
girl1.can_do_something_for_boy() ;
girl2.can_do_something_for_boy() ;
gir3.can_do_something_for_boy() ;
现在我们要将BeautifulGirl 改成SensibleGirl 那么客户端只需要改
GirlFactory girlFactory = new SensibleGirlFactory();就ok了
关键还是看需求选用不同的方法
hankesi2000 两种模式融合在一起也是非常不错的选择哈。
分享到:
相关推荐
- **比喻**:请女朋友吃汉堡,不同的女孩有不同的口味,这时工厂方法模式就派上了用场,你只需要告诉服务员“我要一个汉堡”,至于是哪种汉堡,由女朋友直接告诉服务员。 - **原理**:定义一个用于创建对象的接口...
比如,请女朋友吃汉堡时,您可以直接告诉她“我要一个汉堡”,至于是要牛肉汉堡还是鸡肉汉堡,则由女朋友根据自己的口味选择。这里,您扮演的是抽象工厂的角色,而具体的工厂(如麦当劳或肯德基)则负责根据客户的...
工厂方法模式进一步抽象了工厂的概念,它定义了一个创建对象的接口,但是让子类决定实例化哪个类。例如,文章中提到的请女友去麦当劳吃汉堡的例子,当具体要哪种汉堡时,可以让女友直接告诉服务员。 **优点**: - ...
4. 生产丝织品的工厂属于工业生产,不属于农业范畴。 5. 美欢的行为属于欺负。 6. 妈妈的说法全面考虑了浪费的后果。 7. 圣诞节是西方节日,非中国传统节日。 8. 家庭事务和与朋友的约定同等重要,应说明情况。 9. ...
在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。
labelme标注的json转mask掩码图,用于分割数据集 批量转化,生成cityscapes格式的数据集
(参考GUI)MATLAB GUI漂浮物垃圾分类检测.zip
人脸识别项目源码实战
人脸识别项目实战
本仿真模型基于MATLAB/Simulink(版本MATLAB 2016Rb)软件。建议采用matlab2016 Rb及以上版本打开。(若需要其他版本可联系代为转换) CSDN详情地址:https://blog.csdn.net/qq_50594161/article/details/146242453sharetype=blogdetail&sharerId=146242453&sharerefer=PC&sharesource=qq_50594161&spm=1011.2480.3001.8118
实战练习分词、创建词表、文本处理
在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。
人脸识别项目源码实战
学生信息管理系统是一个基于Java Web技术的综合性管理平台。通过此系统,可以实现对学生、教师、选课信息等的动态管理, 提升学校管理效率。系统采用分层架构设计,前端使用HTML、CSS,JavaScript和jQuery,后端基于Servlet,JSP和Spring框架,数据库采用MySQL。主要有四个大功能,学生管理( 增加学生信息、删除学生信息、修改学生信息、查询学生信息)、教师管理(增加教师信息、删除教师信息、修改教师信息、查询教师信息)、选课信息管理(添加选课、查询选课情况、删除选课记录)、系统管理( 登录与注册功能、 用户角色管理(老师,学生,管理员)、系统日志查看)。 技术架构 1.前端技术 HTML,CSS:静态页面布局与样式 JavaScript,jQuery:动态交互、DOM操作和AJAX请求 2.后端技术 Servlet:控制层,处理用户请求 JSP:页面动态生成 Spring:依赖注入,业务逻辑分离 3.数据库 MySQL:存储学生、教师,课程等数据 JDBC:数据库连接与操作
本课程是 PHP 进阶系列之 Swoole 入门精讲,系统讲解 Swoole 在 PHP 高性能开发中的应用,涵盖 协程、异步编程、WebSocket、TCP/UDP 通信、任务投递、定时器等核心功能。通过理论解析和实战案例相结合,帮助开发者掌握 Swoole 的基本使用方法及其在高并发场景下的应用。 适用人群: 适合 有一定 PHP 基础的开发者、希望提升后端性能优化能力的工程师,以及 对高并发、异步编程感兴趣的学习者。 能学到什么: 掌握 Swoole 基础——理解 Swoole 的核心概念,如协程、异步编程、事件驱动等。 高并发处理——学习如何使用 Swoole 构建高并发的 Web 服务器、TCP/UDP 服务器。 实战项目经验——通过案例实践,掌握 Swoole 在 WebSocket、消息队列、微服务等场景的应用。 阅读建议: 建议先掌握 PHP 基础,了解 HTTP 服务器和并发处理相关概念。学习过程中,结合 官方文档和实际项目 进行实践,加深理解,逐步提升 Swoole 开发能力。
人脸识别项目实战
人脸识别项目实战
功能简介:本工具可实现批量对照片文件的人脸识别,并按指定分辨率进行转换保存。 可为人脸识别采集系统提供很好的辅助工具。 软件基本于OPENVC开发,识别精确,转换高效。 人脸识别工具 +人脸采集处理
内容概要:本文探讨了利用肌长变化反馈控制(FCM-ML)和演员-评论家强化学习(ACRL-NGN)来有效实现人体上肢和下肢无意识姿态稳定的算法方法。通过构建一个包含949条肌肉和22个关节的全身计算模型,在不同初始姿势的情况下进行模拟试验,验证了这些方法的有效性和鲁棒性,结果显示FCM-ML方法比其他传统方法更适用于此类任务。研究指出人类及其他脊椎动物在无意识状态下,通过抗拮抗性的肌肉长度变化反馈机制来维持舒适状态下的自然身体姿势(NBP)。此外,研究还表明这种控制策略有助于机器人设计、运动员训练以及康复患者的治疗。 适用人群:生物力学、机器人学以及神经科学领域的研究人员、工程师,以及关注人体姿态控制及其应用的学者和技术人员。 使用场景及目标:①解释人和非人的脊椎动物如何在无意识情况下维持最佳姿势,特别是处于重力环境中的自然身体姿势(NBP)。②为机器人肌肉控制提供理论支持和发展方向,特别是在模拟多肌肉协调控制方面。③指导运动训练及病患恢复计划的设计与优化。 其他说明:研究发现ACRL-NGN结合FCM-ML不仅能够迅速有效地实现期望的姿态稳定性,而且不需要对肌肉分类,这使其在复