设计模式之工厂模式(一)

设计模式小结一工厂模式 在工厂模式中,我们创建一个工厂类,该类负责实例化具有共同接口或基类的对象,而无需在代码中直接指定要实例化的具体类。工厂模式有多种变体,最常见的有三种:简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)。笔者记得大学里编程接触到的第一个设计模式就是工厂模式,现在回过头来看,那时接触的应该叫简单工厂模式,工厂模式还包括:工厂方法模式、抽象工厂模式。,我们可以使用一个工厂类。 阅读详情

     关于设计模式的文章网上一搜一大筐,此处我不想转帖前人,只是写下自己对每个设计模式的理解,可能会有不到之处,希望不要误导大家。

    工厂模式分为简单工厂和抽象工厂,简单工厂也就是直接生产产品的,也就是在这种工厂里直接返回new 的产品,这样有一个问题,如果产品要很多,比如实现接口的类有很多,举个具体的例子,有animal这个接口,那生产的工厂类有生产cat,dog,pig,fish等等的方法,(cat,dog等实现接口),需要哪个生产哪个,但是突然有一天,科技发达了人类发现了外星人,比如火星人,木星人····都属于animal,那要生产这些动物就需要重写简单工厂方法,这样问题就来了,新发现一种动物就需要修改一次,这样这个简单工厂就永远不能封闭,不符合“开放--封闭”原则,即有新产品就需要增加工厂方法。

    结构如下:

                 interface animal{};

                class cat implements animal{};

                class dog implements animal{};

                 class animalFactory{ //简单工厂,生产不同产品

                      getCat(){return new cat();}

                       getDog(){return new dog();}//假如新增产品,这里就要get新的产品,永远不能关闭

                 }

     工厂方法模式很好的解决了这类问题,工厂方法把animalFactory再抽象成一个接口,catFactory,dogFactory等等工厂实现这个工厂基类,结构如下:

                 interface animal{};

                class cat implements animal{};

                class dog implements animal{};

                interface animalFactory{ getAnimal;};

                class catFactory implements animalFactory{ getAnimal(){return new cat();}}

                class dogFactory implements animalFactory{ getAnimal(){return new dog();}}

好处在这里就能体现出来了,假如新增waixingrenAnimal,就不必像简单工厂一样重写工厂方法了,这一工厂已经抽象为接口

只需要      class waixingren implements animal{};

                 class waixingrenAnimal implements animalFactory{getAnimal(){return new waixingren()}}

好处很明显,其实也是接口的好处。很好的解决了简单工厂方法不能关闭的问题



这里新的问题又来了,猫有很多种,有波斯猫,中国猫,美国猫,如果我想要中国猫你给我个美国猫,中国猫能抓老鼠事美国猫能抓吗?所以获取猫的方法也需要修改

结构就变成了:   

              interface animal {};

                 interface animalFactory{getCat; getDog;};

                  class ChineseFactory{getCat(){return ChineseAnimal();}  getDog(){return ChineseDog();}}

                  class AmericanFactory{getCat(){return AmericanCat();}  getDog(){return AmericanDog();}}


               abstract    animalImpl implements animalFactory{   getCat(){return };getDog;              }

                class catImpl extends animalImpl{  getChineseCat(){return ChineseCat();}

                                                                 getDog(){return ChineseDog();}                   

                 class dogImpl extends animalImpl{  getCat(){return ChineseCat();}

                                                                 getDog(){return ChineseDog();}         

                            





设计模式(一)工厂模式Factory(创建型) 设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些......... 阅读详情

相关推荐

MicroPython驱动ST7789屏避坑实录:从GB2312到完整中文字库的升级之路

本文详细介绍了使用MicroPython驱动ST7789显示屏实现完整中文字库显示的实战方案。从硬件选型到字库系统改造,再到内存优化和显示性能提升,提供了一套突破GB2312限制的全套中文显示解决方案,特别适合ESP32开发者在物联网设备中实现高质量中文显示。

weixin_29190573的博客 394

设计模式研习手记:简单工厂模式(Simple Factory)

简单工厂模式(Simple Factory)又叫静态工厂方法模式。它定义了一个具体的工厂类来负责创建一些类的实例,而这些被创建的类都应该有一个共同的父类。 下面是一个利用简单工厂模式创建Tiger,Dolphin,Parrot的例子,这些具体的动物类都实现了抽象的动物接口。   //****Animal.java package com.designpattern; public in...

bluestorm 204

Computer Networks 和 Computer & Security投稿经验

论文投稿

qq_50604294的博客 9234

设计模式(一):简单工厂模式

最近在看大话设计模式,为了加深印象,记录一下学习过程。 第一个模式:简单工厂模式,此模式为大话设计模式中第一个设计模式,虽然此模式不属于23种GOF设计模式之一。 简单工厂模式中包含的角色: 工厂类:工厂类利用多态的特性,可以根据客户端的需求,创建不同的具体实现类,并返回一个父类对象 抽象类(父类):如果一些类都需要有同样的方法,可以为这些类抽出一个抽象类作

S-H_A-N 478

内窥镜胶囊(胶囊内镜)硬件方案

内窥镜胶囊(胶囊内镜)硬件方案 前言 说明:该方案为作者2018年上半年完成的第一版,后来搁置了一段时间,才重启这个项目。目前(2020.07)第二版已经快要完成。[联系v:1#7#6#3#3#3#5#0#8#7#0]先给一下第一版和第二版的基本参数。 第一版: 续航时间:3h 帧率:0.5fps 尺寸:12mm * 25mm 角度:45° 第二版: 续航时间:12h 帧率:2-6fps 尺寸:9.8mm * 25mm 角度:130° 第一版属于尝试版,整体方案不是很成熟。第二版这个数据就非常优秀了。我拿了

CrekerLi的博客 4780

四足机器人通用运动控制策略:强化学习与PD参数优化

运动控制是机器人实现稳定行走和复杂动作的核心技术,其关键在于精确调节关节的刚度和阻尼特性。PD控制器作为基础控制单元,通过比例(P)和微分(D)增益参数直接影响系统响应速度与稳定性。在四足机器人领域,强化学习(RL)通过模拟环境自主学习,能够有效解决传统控制方法难以适应不同形态机器人的痛点。该技术通过非对称Actor-Critic架构,结合状态估计网络和自适应参数采样策略,实现了跨平台的通用运动控制。典型应用包括工业检测、灾害救援等需要高适应性移动能力的场景,其中PD增益优化和形态参数自适应采样成为提升硬件

weixin_30307921的博客 300

Java——设计模式(简单工厂模式)

* A:简单工厂模式概述 * 简单工厂模式又叫静态工厂方法模式,它定义了一个具体的工厂类负责创建一些类的实例 * B:优点 * 客户端不需要再负责对象的创建,从而明确了各个类的职责 * 简单来说,客户端你只需要用就可以了,就不用创建了,工厂来创建就可以了 * C:缺点 * 这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断地修改工厂类...

beyond谚语的博客 2689

iPhone存储空间耗尽自救指南:从“白苹果”死锁到成功保数据刷机

本文详细介绍了iPhone存储空间耗尽导致'白苹果'死锁的解决方案,通过保留数据刷机方法成功恢复设备运行。文章分享了从失败尝试到最终成功的完整流程,包括关键操作步骤和预防措施,帮助用户在紧急情况下保住重要数据。

weixin_32578161的博客 290

设计模式(一)工厂模式

官方定义:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验总结。 使用意义:使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性。可复用的面向对象软件系统主要包含两大类:应用程序工具箱和框架(框架是指构成一类特定软件可复用设计的一组相互协作的类)。设计模式有助于对框架的理解,成熟的框架通常使用了多种设计模式,如果你能熟悉这些设计

jeofey的专栏 1898

电芯外观及体系设计(Cell Design)-①容量平衡设计(Cell Balance Design)

全面获取并正确解读客户需求,将需求进行分解和预判,结合公司现有资源、技术,给出设计方案。一个优秀的电芯设计方案,应该是稳健的,可操作的,满足客户需求的同时,并能为公司带来较多利润。电芯设计需同时考虑周期,性能,品质,加工性,成本,及安全与稳健性。设计人员时刻要有成本控制观念,但利润则是由公司战略所决定。

FDC1303864002的博客 1353

从零搭建企业级AI网关:基于LiteLLM的安全防护体系设计

本文详细介绍了如何从零搭建企业级AI网关,基于LiteLLM构建全面的安全防护体系。内容涵盖分层防御架构、敏感数据处理、合规性配置与审计追踪,以及生产环境部署策略,助力企业安全高效地集成LLM技术,确保数据安全和合规性。

qq_27496129的博客 1292

c# 设计模式(一) 工厂模式

源代码在github上面,需要的自己进行下载:https://github.com/yuzhoukamen/UnikmDesignPattern.git 工厂模式(Factory Pattern)是最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 ...

weixin_33691700的博客 203

22h2版本的win10安装Docker Desktop时页面空白

摘要:Windows10 22H2系统重装Docker时出现安装界面卡死问题,通过管理员CMD执行静默安装命令解决。命令指定了WSL-2后端及多个自定义数据存储路径(安装目录、Hyper-V数据、Windows容器数据、WSL数据),安装需等待几分钟。最终验证安装成功。

猿小白的博客 662

设计模式一工厂模式

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。

许苑向上 1299

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

设计模式(一) 工厂模式 五种写法总结

转载请标明出处: http://blog.youkuaiyun.com/zxt0601/article/details/52703280本文出自:【张旭童的博客】系列开篇瞎BB设计模式相关的文章学习与总结,一直有意为之,一直又觉得时机不到。一 是怕自己代码经验还不够,学习了也不懂,强行理解没有意义。二 是怕自己学习了以后总结出来,万一有不对的地方,误人子弟。而在现在的公司摸爬滚打半年后,感觉自己写代码遇到了

zxt0601的博客 8万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

设计模式之工厂模式(一)

工厂模式也是平时我们编程用的比较多的一种行为设计模式,它提供了一种创建对象的最佳方式。工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。

红军不怕远征难,万水千山只等闲 1645

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

设计模式一 —— 工厂模式

设计模式一 —— 工厂模式 ​ 工厂类型解决的是怎么new()的问题,它告诉我们可以通过增加新的对象专门管理“变化”。例如,我们为了解决new()引起的变化,我们就引入工厂类型,由新的工厂类型专门处理new()相关的“变化”,确保客户程序不受这些变化的直接影响。 一、简单工厂类 ​ 简单工厂类是工厂方法和抽象工厂的“预备工作” 1、简单工厂的特性/工厂类型和直接new()的不同 ​ 1、对加工的...

修行的博客 254

学习设计模式:工厂方法——简单工厂只是我的另一相

 工厂方法与简单工厂非常相似,只要看看《设计模式》一书中对工厂方法的意图的描述就能很清楚地感受到这一点:定义一个用于创建对象的接口(PatternTesterFactory,再具体一点就是PatternTesterFactory类的CreatePattern方法),让子类决定实例化哪一个类(CreatePatternTester方法中的判断语意实现了这一过程)。对于这一意图,有两种方式可

爱拍球的程序圆 689

设计模式一 工厂模式Factory

设计模式一 工厂模式Factory          在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些

hyqsong的专栏 1814

Golang 工厂设计模式(一)

设计模式: wiki百科:设计模式(Design pattern)代表了最佳的实践,通常被软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化...

王佳宇的个人博客 7414

设计模式之工厂模式一简单工厂模式

设计模式之工厂模式一简单工厂模式 工厂模式由来: 在我们创建对象的时候使用,使用new操作的。如果多个对象创建都使用new会。所以工厂模式就是用来代理new操作的一种模式。根据工厂模式由来,我们可以看出工厂模式属于创建型模式。提供一种创建对象的最佳方式。 来源:凯哥Java(kaigejava) 工厂模式主要的分类: 简单工厂模式、工厂方法模式、抽象工厂模式 简单工厂模式: ...

凯哥Java的博客 415

设计模式(一):工厂模式

工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类, 通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品 –摘自《百度百科》 前言 写文章的目的主要是为了自己知识的巩固,当然也十分希望在此能够得到业界前辈们的指导。 本篇文章围绕:...

陈橙橙 1329

【C++设计模式】二十 一、工厂模式

一、基本概念 二、简单工厂模式 (一)基本概念: (二)示例:水果工厂 三、工厂方法模式 (一)基本概念: (二)示例:水果工厂 三、抽象工厂模式 (一)基本概念: (二)示例:

qq_43411555的博客 460
上一篇: 面试一些心得
下一篇: 解决 ORA-01461: can bind a LONG value only for insert into a LONG column
beyond667
博客等级 码龄15年 41粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值