工厂模式----易懂版(转)

[b]一、引子[/b]
话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz 车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!
而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有病的现象在OO(面向对象)语言中可以避免了。下面就以 Java语言为基础来引入我们本文的主题:工厂模式。

[b]二、分类[/b]
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

工厂模式在《Java与模式》中分为三类:
1)简单工厂模式(Simple Factory)

2)工厂方法模式(Factory Method)

3)抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。
GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

两者皆可,在本文使用《Java与模式》的分类方法。下面来看看这些工厂模式是怎么来“治病”的。

[b]三、简单工厂模式[/b]

简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。
先来看看它的组成:

1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
那么简单工厂模式怎么来使用呢?我们就以简单工厂模式来改造暴发户坐车的方式——现在暴发户只需要坐在车里对司机说句:“开车”就可以了。

//抽象产品角色
public interface Car{
public void drive();
}

//具体产品角色
public class Benz implements Car{
public void drive() {
System.out.println("Driving Benz ");
}
}

public class Bmw implements Car{
public void drive() {
System.out.println("Driving Bmw ");
}
}
...(奥迪我就不写了)

//工厂类角色
public class Driver{
//工厂方法.注意 返回类型为抽象产品角色
public static Car driverCar(String s)throws Exception{
//判断逻辑,返回具体的产品角色给Client
if(s.equalsIgnoreCase("Benz"))
return new Benz();
else if(s.equalsIgnoreCase("Bmw"))
return new Bmw();
......
else throw new Exception();
...

//欢迎暴发户出场......
public class Magnate{
public static void main(String[] args){
try{
//告诉司机我今天坐奔驰
Car car = Driver.driverCar("benz");
//下命令:开车
car.drive();
...

将本程序空缺的其他信息填充完整后即可运行。如果你将所有的类放在一个文件中,请不要忘记只能有一个类被声明为public。本程序在jdk1.4 下运行通过。
这便是简单工厂模式了。怎么样,使用起来很简单吧?那么它带来了什么好处呢?
首先,使用了简单工厂模式后,我们的程序不在“有病”,更加符合现实中的情况;而且客户端免除了直接创建产品对象的责任,而仅仅负责“消费”产品(正如暴发户所为)。

下面我们从开闭原则(对扩展开放;对修改封闭)上来分析下简单工厂模式。当暴发户增加了一辆车的时候,只要符合抽象产品制定的合同,那么只要通知工厂类知道就可以被客户使用了。所以对产品部分来说,它是符合开闭原则的;但是工厂部分好像不太理想,因为每增加一辆车,都要在工厂类中增加相应的业务逻辑或者判断逻辑,这显然是违背开闭原则的。可想而知对于新产品的加入,工厂类是很被动的。对于这样的工厂类(在我们的例子中是为司机师傅),我们称它为全能类或者上帝类。
我们举的例子是最简单的情况,而在实际应用中,很可能产品是一个多层次的树状结构。由于简单工厂模式中只有一个工厂类来对应这些产品,所以这可能会把我们的上帝累坏了,也累坏了我们这些程序员:(
于是工厂方法模式作为救世主出现了。
【模型之美】3、文本聚类与智能摘要,让AI帮你做个总结 在信息过载时代,文本聚类与摘要技术成为关键工具。本文提出了一种结合OpenAI Embedding与传统机器学习的方法,实现从文本预处理到智能分析的完整流程。技术方案分为三阶段:1)通过Embedding将文本转化为语义向量;2)采用K-Means等算法进行无监督聚类;3)利用大模型生成可解释的标签和摘要。实验证明,该方法能有效提升信息处理效率,如在新闻聚合系统中自动分类10,000篇文章,准确率较传统方法提高15%。方案包含实用代码示例,涵盖文本清洗、向量化、聚类优化等关键技术细节,可应用于对话记忆、舆情 阅读详情

相关推荐

U盘 未知USB设备 设定地址失败 由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案(做过系统装机盘而无法解决的必看)

U盘由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案 我们在使用U盘的时候偶尔会碰到下列情况 一般是因为传输数据的过程中,死机或未响应直接断点或拔掉设备导致的,U盘再次插上之后出现设定地址失败。无法再次读取设备的数据。 解决方案: 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损伤导致的!!! 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损...

qq_39123987的博客 13万+

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

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

zxt0601的博客 8万+

ThingsBoard - 设备接入

设备接入笔记

qq_53839898的博客 1454

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

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。

2401_84092727的博客 558

高能物理相关软件

国内高能物理实验背景     研究物质最深层次结构及相互作用的前沿基础科学。 现代高能物理实验的要素    实例源 、 探测器、   电子学、  触发 DAQ、  原始数据、 刻度、重建 、物理分析、  成果  。 离线软件的地位和作用。    是硬件设备和物理学家的桥梁,是从数据到物理成果转化中的关键和重要的环节。 高能物理实验及其特点 独一无二性,实验规模越来越大,努力省钱(使用

Alan Zhuang的博客 3298

解决银河麒麟V10分辨率问题:xrandr命令详解与常见错误排查

本文详细解析了在银河麒麟V10系统中使用xrandr命令调整屏幕分辨率的方法,包括核心功能解析、常见问题排查及持久化配置技巧。通过实战指南帮助用户解决分辨率缺失、配置失效等典型问题,提升多显示器环境下的工作效率。

weixin_30642561的博客 502

设计模式-工厂模式

一、概述 回顾:MySQL存储引擎,如何建立个人博客 个人博客:后台建站,适合java程序员 什么是工厂模式? 工厂模式(Factory Pattern)是最常见的一种设计模式之一。它主要是提供一种创建对象的最佳方法! 为什么要学习工厂模式? 与通过new来创建对象不同,使用工厂模式创建对象不会对客户端暴露创建逻辑,并且是通过统一个共同的接口指向新创建的对象。同事工厂模式能将创建对象的代...

weixin_30799995的博客 330

Cadence OrCAD: 层次化设计 Hierarchical Design

详细介绍OrCAD的原理图层次化设计方法。

Fantasy237的博客 1万+

Java实现工厂模式

简单工厂模式,又叫做静态工厂模式(Static Factory Method),由一个工厂对象决定创建出哪一种产品类的实例,传递一个参数进入静态工厂类,然后根据参数动态决定应该创建哪一个产品类。简单工厂模式是另外两种工厂的基础,通过了解简单工厂模式可以让我们对另外两种设计思路有更深入的理解和掌握工厂方法模式是对简单工厂模式的进一步抽象化。简单工厂的对象创建是在工厂类中实现的,而工厂方法模式将对象的创建延迟到子类中进行,从而实现了更好的扩展性,维护起来会更方便。

G81948577的博客 1552

【pprof】简要学习教程

基本介绍 pprof 是在做性能优化前的性能分析工具。 安装: go get -u github.com/google/pprof 分析工具 go tool pprof 是命令行指令,用于分析 Profiling 数据,源数据可以是 http 地址,也可以是已经 dump 下当 profile 文件;查看模式可以命令行交互模式,也可以是浏览器模式(-http 参数)。 两种应用 服务型应用 _ "net/http/pprof" 包,专用于采集 web 服务 运行数据的分析。即在运行的服务中通过 API .

码农印象 883

rk3576 适配摄像头 (mipi 五摄)

在RK3576上实现五路CSI摄像头方案,核心思路是充分复用其视频输入接口,并通过巧妙的软件配置来实现。

weixin_35723192的博客 178

Java 中最常用的设计模式之一,工厂模式模式的写法,

a、简单工厂:不能算是真正意义上的设计模式,但可以将客户程序从具体类解耦。b、工厂方法:使用继承,把对象的创建委托给子类,由子类来实现创建方法,可以看作是抽象工厂模式中只有单一产品的情况。c、抽象工厂:使对象的创建被实现在工厂接口所暴露出来的方法中。工厂模式可以帮助我们针对抽象/接口编程,而不是针对具体类编程,在不同的场景下按具体情况来使用。

weixin_44797327的博客 954

时空智友企业流程化管控系统文件上传漏洞

时空智友企业流程化管控系统是一个功能丰富、灵活可定制的企业管理工具。通过该系统,企业能够实现流程的自动化、协同的提升、数据的洞察和决策的优化,从而提高工作效率、管理水平和企业竞争力。时空智友企业流程化管控系统 formservice接口处存在任意文件上传漏洞,未经认证的攻击者可通过此接口上传后门文件,最终可导致服务器失陷。

holyxp的博客 1029

最通俗易懂的讲解工厂模式

该模式用来封装和管理类的创建,终极目的是为了解耦,实现创建者和调用者的分离。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式可以细分为三种:简单工厂模式工厂方法模式抽象工厂模式.........

weixin_43757333的博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java工厂模式:简单工厂、工厂方法、抽象工厂(通俗易懂)

工厂模式 核心本质: 实例化对象不使用new,用工厂方法创建对象 统一管理对象的创建,将调用者跟实现类解耦 三种模式: 简单工厂模式 建立一个工厂类,对实现了同一接口的一些类进行实例的创建。 工厂方法模式 对简单工厂模式的改进,工厂方法模式是提供多个工厂方法,用来创建不同的对象。 抽象工厂模式 使用一个超级工厂,创建多个工厂类,每个工厂创建对应的对象。 详细代码说明: 简单工厂模式:创建一个共同的手机接口,用两个不同的手机类实现它并重写call方法, 接口类: publ

qq_42804736的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【设计模式】用通俗易懂的方式讲解工厂模式

设计模式在项目中是无处不在的,但是如何在合适的场景选择合适的设计模式却非常考验一个工程师的水平,项目中好的设计模式是非常优美的,我们只需要按照设计好的模式传参即可,试想一下,如果代码里存在大量硬编码的代码,每次改动都小心翼翼,稍有不慎则牵一发而动全身,那无论是对我们还是后来人都是极不友好的。

分享Java硬核干货 1万+

简单工厂模式,工厂方法模式,抽象工厂模式总结-java版

关于简单工厂模式,工厂方法模式,抽象工厂模式的一次总结 模式 定义 简单工厂模式 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。 工厂方法模式 定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类 抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 P...

海旋风的博客 3911

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

工厂模式(Factory Pattern)是一种创建型设计模式,旨在提供一种统一的方式来创建对象,将对象的实例化过程封装在一个单独的类中。工厂模式通过定义一个公共的接口来创建对象,但允许子类决定实例化哪个类。这样可以将对象的实例化与客户端代码的耦合度降到最低,同时也提供了一种可扩展的方式来创建对象。

qq_45929019的博客 1724

简单易懂的工厂模式

工厂 顾名思意 就是用来生产产品的。 通过工厂模式,我们可以减少使用new 的操作。而转而调用工厂帮我们生产对象。 实现 生产者 与调用者的分离。 下面 我们来用实例来写一下三种工厂模式 假设 我们现在去买车。 简单工厂模式 车有不同的型号。 所以 我们给它一个接口 车接口 public interface Car { void name(); } 不同的车实现这个接口 Tesla public class Tesla implements Car { @Override pu

yy的博客 591

设计模式Python版 抽象工厂模式

介绍了GOF设计模式中的抽象工厂模式,抽象工厂模式的Python示例,以及Django框架中抽象工厂模式的应用。

分享、交流、合作 2451

策略模式+工厂模式(案例实践易懂版)

本文通过星巴克点咖啡的案例,生动讲解了策略模式与工厂模式的结合应用。策略模式将不同杯型容量计算逻辑封装成独立类(中杯、大杯、超大杯策略类),实现算法灵活替换;工厂模式则统一管理这些策略对象的创建过程,隐藏实现细节。用户只需选择杯型,系统自动返回对应容量(如大杯473ml)。这种设计既保证了代码灵活性,又降低了客户端复杂度,是处理类似"选择-计算"场景的经典解决方案,适用于需要动态切换算法且不希望暴露实现细节的业务场景。

aristo 1140

工厂模式(简单工厂模式+工厂模式)

工厂模式的在没有工厂模式的时候就是,客户需要一辆马车,需要客户亲自去创建一辆马车,然后拿来用。

m0_62645012的博客 1552

工厂模式通俗易懂

废话不多说,还是三部曲,以下围绕是什么,干嘛用,怎么用展开 1、是什么 顾名思义,工厂模式就是一个工厂去生产和管理各个产品,让外部不用关注产品的细节,只知道和使用最终的产品。属于创造型设计模式 分类: 根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式 根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式 简单工厂模式 简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象,也就是在一个小工厂,啥都做,根据传过来的类型生产不同的产品 uml图 工厂方法模式(F

qinjava的博客 482

设计模式Python版 简单工厂模式

介绍了设计模式中的简单工厂模式,以及用Python实现简单工厂模式的示例。

分享、交流、合作 1326

Java设计模式:工厂模式——图文+代码示例(通俗易懂)

每一种设计模式都有它要解决的问题

m0_59679869的博客 1986

【设计模式】工厂模式——代码示例(通俗易懂)

工厂模式(Factory Pattern)是一种创建型设计模式,旨在提供一个创建对象的接口,而不需要指定具体的类。它可以根据不同的需求动态地创建不同类型的对象,提高代码的可扩展性和维护性。工厂方法模式定义了一个用于创建对象的接口,将实例化的任务交给子类,从而使父类中的代码更具扩展性。抽象工厂模式提供一个接口来创建一系列相关的或相互依赖的对象,而无需指定具体的类。决定创建哪种具体类的实例。它把对象创建的逻辑封装在一个工厂类中,而不是分散在代码的多个位置。你可以根据具体项目需求选择合适的工厂模式!

weixin_43805939的博客 1285

最简单易懂的设计模式——工厂模式

最简单易懂的设计模式之工厂模式工厂模式前言简单工厂模式工厂方法模式抽象工厂模式 工厂模式 前言 在编程中,构建对象最常用的方式是 new 一个对象。其实构建过程可以被封装起来,工厂模式便是用于封装对象的设计模式。 简单工厂模式 比如,直接 new 对象的方式相当于当我们需要一个苹果时,我们需要知道苹果的构造方法,需要一个梨子时,需要知道梨子的构造方法。更好的实现方式是有一个水果工厂,我们告诉工厂需要什么种类的水果,水果工厂将我们需要的水果制造出来给我们就可以了。这样我们就无需知道苹果、梨子是怎么种出来的,只

353
上一篇: 程序员寓言
下一篇: 生命有两层含义
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值