zt:工厂模式-简单工厂(设计模式的入门级模式—初级)

AI:240-YOLOv8高效涨点 |Swin Transformer的主干网络替换与优化(附代码 + 详细修改步骤 +原理介绍) YOLOv8作为目标检测领域的最新版本,在速度和精度之间取得了良好的平衡。然而,随着计算机视觉任务的复杂性不断增加,YOLOv8的标准主干网络(Backbone)在处理高分辨率图像或多尺度目标时,可能存在一定的局限性。为了进一步提升YOLOv8的性能,我们可以引入Swin Transformer替换其主干网络,以增强模型的全局感知能力和多尺度特征提取能力。本文将详细介绍如何在YOLOv8中用Swin Transformer替换原有的Backbone,提供代码示例,并深入探讨其中的原理和效果。 阅读详情
 本文综合了《thinking in Design pattern with java》,《Design pattern》,《爪哇语言简单工厂创立性模式介绍》以及我自己的观点,对factory 相关的设计模式进行详细的说明。

工厂模式有以下几种形态:
简单工厂(Simple Factory)模式
工厂方法(Factory Method)模式,又称多形性工厂(Polymorphic Factory)模式
抽象工厂(Abstract Factory)模式,又称工具箱(Kit或Toolkit)模式

以下详细介绍简单工厂模式。

工厂模式是创建型模式,创建型模式抽象了实例化过程。Java中创建对象的方式为使用以下代码:
Book goodBook = new Book();
使用new操作符的短处是事先必须明确知道要实例化的类是什么, 而且实例化的责任往往与使用实例的责任不加区分。上面这句话很难理解,而且大多数人习惯于使用New生命。我们举个例子说明一下工厂的好处:

factory1.png

三个种类的书继承了接口Book,一般情况下声明实例要用到以下代码:
Book chBook = new ChineseBook();
Book enBook = new EnglishBook();
Book jaBook = new JapeneseBook();
这些代码都是大家能理解的,利用多态,我们很好的声明了各种书的实例。建立一个商店买书系统,类图如下:

factory2.png

说明一下:
Shop商店类拥有三种书属性,这些属性将在shop的构造函数中实例化,同时还要实例化用户类,象“书对象”一样,可以生成多个user用户,这并不是我们研究的重点。我们关心如何实例化各个书的实例。
我现实使用了老办法,用New 声明!代码如下:

public class Shop
{
List books = new ArrayList();
String shlist[] = { "ch-a", "ch-b", "en-c", "ja-d",};//书名
public void Shop(){
books.add(new ChineseBook("ch-a"));// ch-a是书的名称
books.add(new ChineseBook("ch-b"));
books.add(new EnglishBook("en-c"));
books.add(new JapeneseBook("ja-d"));//声明了四本书
}
.......
.......
};

四本书被声明完了,得到了四个实例。这样写也用到了很多技巧,似乎无懈可击,可事实上这样写太不合实际了,每当增加一个shlist[]中的元素,都要增加一个new来实例化。仔细观察以下书名”ch-a”与类名”ChineseBook”是很有规律的,完全可以把他们放在一个工厂里加工,产生的成品就是已经实例化完成的书对象了。我们把这个工厂方法放在Shop类中,设成static方法。
把类图稍改一下,可以很明显的看出完美的工厂模型。

factory3.png

具体代码如下:

public class Shop
{
List books = new ArrayList();
String shlist[] = { "ch-a", "ch-b", "en-c", "ja-d",};//书名
public void Shop(){
for(int i = 0; i < shlist.length; i++)
books.add(Shop.bookFactory(shlist[i])); //调用工厂模式
}
public static Book bookFactory(String bookName){ //工厂模式
if(bookName.subString(0,2).equals("ch")) return new ChineseBook(bookName);
if(bookName.subString(0,2).equals("en")) return new EnglishBook(bookName);
if(bookName.subString(0,2).equals("ja")) return new JapeneseBook(bookName);
}
public void sellBook(User someone){
Iterator i = books.iterator(); //跌代模式
while(i.hasNext()) {
Book book = (Book)i.next();
if (book.getName()==someone.needBook()) //以下是具体的逻辑计算,可以不用看
{
book.setUser(someone);
someone.setCash = someone.getCash - book.getPrice();
}
}
.......
cc. Channel.Pattern
.......
}
};

代码中 String shlist[] = { "ch-a", "ch-b", "en-c", "ja-d",};可以随意增加,完全自动化声明。如果增加书的种类,可以直接修改factory方法。工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。
再回来看看这句话能不能理解“面向对象的设计的目的之一,就是把责任进行划分,以分派给不同的对象。我们推荐这种划分责任的作法, 是因为它和封装(Encapsulation)和分派(Delegation)的精神是相符合的。创立性模式把对象的创立过程封装起来,使得创立实例的责任与使用实例的责任分割开, 并由专门的模块分管实例的创立,而系统在宏观上不再依赖于对象创立过程的细节。”

STM32G431的 FDCAN使用5M加速时,出现奇葩问题,如何解决? 🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。 阅读详情

相关推荐

C#上位机+TensorFlow Lite 轻量化AI模型部署实战(工业级完整版,低算力工控机首选)

工业自动化轻量化AI部署指南:C# + TensorFlow Lite实战 摘要:本文针对工业自动化领域机器视觉部署的痛点,提出基于C#和TensorFlow Lite(TFLite)的轻量化解决方案。该方案完美适配低算力工控环境(J1900/2G内存),具有以下核心优势:1)极致轻量化,模型体积仅KB-MB级;2)CPU深度优化,单帧推理≤15ms;3)零环境依赖,纯C#部署;4)工业级稳定性,7×24小时运行。教程涵盖从环境搭建、模型转换到C#封装的完整流程,特别提供YOLOv8等工业常用模型的TFLi

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 991

设计模式-工厂模式

工厂模式简单工厂模式工厂方法模式抽象工厂模式抽象类抽象工厂模式 简单工厂模式 简单工厂模式:又叫静态工厂模式,由一个工厂对象决定创建某一种产品对象的实例。主要用来创建同一类对象。 举个例子,比如书店里有各类书籍及其相关介绍等。当你要选择其中一类书籍时你只需要问书店老板,他会向你提供你所需要的,你只需要记住BookFactory这个工厂类即可。 var StoryBook = function() { this.intro = "这是一本故事书。"; } StoryBook.prototype =

安歌 302

YOLO模型轻量化实战:剪枝、量化与知识蒸馏三大技术落地详解

这篇文章结合我自己的实战经验,从原理、操作、效果、避坑四个方面,给大家讲清楚了YOLO模型轻量化的三大核心技术:剪枝、量化、知识蒸馏。先明确应用场景,再选择合适的技术组合,不要盲目追求极致压缩,要在“大小、速度、精度”之间找平衡。实战才是最好的学习方式——大家可以先拿自己的数据集试试剪枝和量化,感受一下效果,有问题可以在评论区留言。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 547

二手书交易系统设计模式实验

目录 1.抽象工厂模式 1.1 实现模块 1.2 实现模式 1.3 实现代码 1.4 实验结果展示 2.观察者模式 2.1 实现模块 2.2 实现模式 2.3 实现内容 2.4 实现设计: 2.5 相关代码: 2.6 实验结果展示 1.抽象工厂模式 1.1 实现模块 卖家上传图书信息、买家选择图书。 1.2 实现模式 以两种图书的交易为例: 抽象工厂类:User 具体工厂类:Buyer、Seller 抽象产品类:ScienceBook、ComputerBook

jr1133的博客 3219

2022-15-Java 设计模式-抽象工厂模式

工厂方法模式中,我们使用一个工厂创建一个产品,一个具体工厂对应一个具体产品,但有时候我们需要一个工厂能够提供多个产品对象,而不是单一的对象,这个时候我们就需要使用抽象工厂模式。 在介绍抽象工厂模式前,我们先厘清两个概念: 产品等级结构:产品等级结构指的是产品的继承结构,例如一个空调抽象类,它有海尔空调、格力空调、美的空调等一系列的子类,那么这个空调抽象类和他的子类就构成了一个产品等级结构。 产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。比如,海尔工厂生产海尔空调、海尔冰

zzhangwa的博客 3612

简单工厂模式(Simple Factory)

鼹鼠读书简单工厂模式是类的创建模式,又叫静态工厂方法(Static Factory Method)模式。这些都是从书里面看的,但是理论终归是理论,要变成我们手中真正有用的东西才对啊!要不,学这干什么呢?简单工厂模式的引进比如说又一个农场公司,专门向市场销售各类水果。在这个系统里需要描述下列的水果:葡萄 Grape草莓 Strawberry苹果 Apple在这里自然想到了对象,所有的这些上述三种都属

鼹鼠的专栏 2129

简单工厂工厂、抽象工厂模式

简单工厂工厂、抽象工厂模式 生活中当你想要买车子的时候,会去汽车销售店。而当你进去的时候,就会有销售人员给你介绍各种各样的车子,它的类型、品牌、价格等等。你想买那种的时候,只需要说一声,相关人员就会帮你办理相应手续,你就可以付款提车走人。 我这里也有个汽车销售店,只卖宝马、奔驰和大众。 起步阶段--简单工厂 刚开业的时候,没钱、没客户,因此我只请了一个销售员进行销售产品,因为节省资源,实现利益最大化。 而这个时候的交易流程: 销售员介绍->客户选择车子->交易结款。交易流程中,.

PandaCreater的博客 255

抽象工厂模式工厂模式的区别

这两种设计模式主要的区别在于产品 工厂模式是用来创建同一个产品的不同类型的,比如都是包子,生产猪肉馅包子、牛肉馅包子…… 抽象工厂模式是用来创建不同类的产品,比如包子店还卖豆浆油条 一般来说,产品东西单一(只生产一类中的多种),适合用工厂模式 如果有多个东西(生产很多类),各种类型时,通过抽象工厂模式来进行创建是很合适的。 原文链接:https://blog.csdn.net/Olive_ZT/...

小枫哥的博客 743

ZT: 追MM与设计模式

创建型模式 1、FACTORY一追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如

foreveryday007's BLOG 999

五种常见的 PHP 设计模式 zt

五种常见的 PHP 设计模式 设计模式只是为 Java 架构师准备的 —— 至少您可能一直这样认为。实际上,设计模式对于每个人都非常有用。如果这些工具不是 “架构太空人” 的专利,那么它们又是什么?为什么说它们在 PHP 应用程序中非常有用?本文解释了这些问题。 设计模式不仅代表着更快开发健壮软件的有用方法,而且还提供了以友好的术语封装大型理念的方法。例如,您可以说...

XIXI的参考消息 184

ZT 怎么样才算熟悉设计模式? [问题点数:40分,结帖人jiaoyun007]

http://bbs.csdn.net/topics/390448668?page=1#post-394406161 近日面试,因为个人简历里有“熟悉设计模式”这句话,面试官边侃侃发问了:什么是装饰模式呢,本人回答用过简单工厂模式,其他的看过,没有记住,他就笑了笑,感觉是觉得我那句话说大了 假若各位老大是面试官,这里想问下,怎么样才算熟悉设计模式呢,23种都很了解倒...

weixin_30782293的博客 113

C#设计模式(23种设计模式)ZT

创建型:         1. 单件模式(Singleton Pattern)          2. 抽象工厂(Abstract Factory)          3. 建造者模式(Builder)          4. 工厂方法模式(Factory Method)          5. 原型模式(Prototype) 结构型:         6. 适配器模式(Adapt...

weixin_34000916的博客 73

[ZT] 澄清Java语言接口与继承的本质

大多数人认为,接口的意义在于顶替多重继承。众所周知Java没有c++那样多重继承的机制,但是却能够实作多个接口。其实这样做是很牵强的,接口和继承是完全不同的东西,接口没有能力代替多重继承,也没有这个义务。接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。OO的精髓,我以为,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨

nonocast 1188

用软件工程泡MM的方法(ZT

1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory                 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修

流氓会编程,一切皆可能 1750

Java---设计模式---书店管理系统(单机版)①

做这个系统是为了加强对前面学习的设计模式的应用,该系统运用了MVC开发模式工厂模式,值对象,单例等设计模式,并且遵守一定的设计原则。体验:做这个系统花了我快两周的课余时间,在这半个月中认识到MVC开发模式的种种好处,在大二时,做过一个类似的课设,但是和这个书店管理系统相比较发现:采用MVC开发模式看起来需要分很多层,而且严格遵守层间交互原则和面向接口原则。虽然设计起来很繁琐,但是在图书模块发生变...

whale blog 9051

学习笔记:抽象工厂模式(Kit模式

1、模式定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 2、模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一...

wsndbbhh的博客 1183

工厂模式设计模式的第一课

本文借助蜜雪冰城奶茶案例通俗讲解 JS 简单工厂模式,展示对象创建逻辑封装,剖析解耦、易扩展等优势,结合 Nest、React 源码理解面向接口编程思想。

2503_93701293的博客 156

第14章 设计模式入门:单例、工厂、建造者与代理

设计模式是"在特定场景下反复被验证的解决方案"。创建型(怎么创建对象:单例、工厂、建造者)、结构型(怎么组合类与对象:代理、装饰器)、行为型(怎么分配职责、怎么协作:观察者、策略)。本章主角是创建型 3 个 + 结构型 1 个(代理)+ 行为型 1 个(观察者)。设计模式解决的典型痛点:代码重复、难以修改、到处 new 导致耦合(耦合指类与类之间依赖太深,改一个要动一片)。// 反面教材:创建"形状"的逻辑散落在各处,每处都要写一遍 if-elseSystem.out.println("画一个圆")

成熟的标题 240

设计模式在 JS 中的应用:用 TS 重写经典模式,结合 React / Vue 真实业务场景

删除

2603_94941287的博客 275

设计模式精讲】15.享元模式(Flyweight)

一局围棋上千颗棋子对象,每颗都揣着贴图引用、风格字符串与渲染缓存——可黑白加风格统共不过十来种,重复的信息被复制了上千份。本文从棋盘内存账讲起,给出享元模式的核心一刀:把「不随实例变化」的内部状态从对象里搬出去共享,把「随实例变化」的外部状态留给客户端随操作传入;享元因此必须不可变,工厂池负责「同键同对象」。现代 C++ 用 shared_ptr<const T> 把不可变纪律上锁、用 weak_ptr 池实现「可回收的共享」,并讨论「先问该不该共享」。文末对照 Boost.Flyweight 的值语义句柄

码工许师傅 252

基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)

基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计),本资源中的源码都是经过本地编译过可运行的,评审分达到98分,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、毕业设计、期末大作业和课程设计使用需求,如果有需要的话可以放心下载使用。基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于区块链的商品溯源系统的设计与实现源码+全部资料(高分毕业设计)基于

240t/h循环流化床锅炉仿真系统:1:1精确模拟与操作实践

内容概要:本文深入探讨了一款用于电力工程领域的240t/h循环流化床锅炉仿真系统。该系统实现了1:1的真实模拟,涵盖了锅炉运行的关键环节如给煤量控制、风烟系统调节、报警机制以及停炉操作等。文中不仅展示了具体的函数实现,还介绍了系统的绿色便携性和独特的积分制度,强调了其作为工业培训工具的价值。此外,文章提及了一些实际操作中的挑战和技术细节,如模糊控制算法的应用和动态链接库的使用。适合人群:从事电力工程、工业自动化相关工作的技术人员,尤其是对锅炉仿真感兴趣的工程师和研究人员。使用场景及目标:适用于希望深入了解循环流化床锅炉工作原理的专业人士,旨在提高他们对锅炉操作的理解和技能水平。通过模拟真实环境中的各种情况,帮助使用者掌握正确的操作方法并避免潜在的风险。其他说明:该仿真系统不仅可以作为教学工具,还可以用于测试新的控制策略和技术改进方案,在不影响实际生产的情况下进行实验验证。

上一篇: Java中的模式
下一篇: 爪哇语言简单工厂创立性模式介绍
Steven_zhao
博客等级 码龄22年 1粉丝 47原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值