[Design Pattern]工厂模式

Java 24 Design Pattern 之 工厂模式 工厂模式 阅读详情

工厂模式

当有一些要实例化的具体类,究竟实例化哪个类,要在运行时由一些条件来决定。当代码使用大量具体类时,我们就要考虑使用工厂模式了。

简单披萨工厂生产披萨(简单工厂生产类)。加盟披萨店,对披萨进行质量控制,给披萨店使用的框架,同时允许子类做决定(工厂方法模式)。最后通过抽象工厂模式使得每家披萨店使用的原料一致。

工厂方法模式

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

public abstract class PizzaStore
{
    public Pizza OrderPizza(String type)
    {
        Pizza pizza = createPizza(type);
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
    }

    protected abstract Pizza createPizza(String type)
}

在工厂方法模式中由每个商店自行负责createPizza()方法的行为。在简单工厂中,工厂是另一个由Pizzafore使用的对象。

为了避免字符串传入参数化的类型的危险。我们可以在编译时期就将参数上的错误挑出来。你可以创建代表参数类型的对象和使用静态常量或者enum。

设计原则-依赖倒置原则:要依赖抽象,不要依赖具体类

PizzaStore这个抽象类现在依赖Pizza这个抽象类。
ChicagoStyleChessPizza这个具体类也是依赖Pizza这个抽象类。
在实际运行的时候,根据具体的继承ChicagoPizzaStore和传入的参数type决定生产那些具体的Pizza。

抽象工厂模式(为了控制披萨店只使用工厂生产出的原料)

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

public class NYPizzaStore extends PizzaStore
{
    protect Pizza createPizza(String item)
    {
        Pizza pizza = null;

        PizzaIngredientFactory ingredientFactory = new NYPizzaIngredientFactory();

        if(item.equals("cheese"))
        {
            pizza = new CheesePizza(ingredientFactory);
        }

        return pizza;
    }
}

要点

  • 所有的工厂都是用来封装对象的创建
  • 简单工厂,虽然不是真正的设计模式,但仍不失为一个简单的方法,可以将客户程序从具体类解耦。
  • 工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。
  • 抽象工厂使用对象组合:对象的创建被实现在工厂接口所暴露出来的方法中。
  • 工厂是很有威力的技巧,帮助我们针对抽象编程,而不是针对具体类编程。
RK3588 EVB开发板原理图讲解【六】 该原理图展示了eMMC Flash与主控芯片之间的连接关系,以及相关的电源、信号线路和去耦电容等。 阅读详情

相关推荐

射频电路设计——射频器件基础

本文仅供自己复习使用,请勿转载! 射频电路制作方法 MCM工艺 CMOS工艺 趋肤效应、深度 频率越高趋肤效应越明显 高频器件 高频电阻 绕线的比贴片的多一个电感,是因为绕线的因为是线绕制的,只有有线就会有电感,所以绕线电阻等效模型会比贴片的多一个电感 多晶硅电阻模型 深线性区MOS电阻 高频电阻的频率响应 记忆的话就后面的频率特性有点像电容的 高频电容 作用 单层贴片式电容 多层贴片式电容 MIM电容 MOM电容 由于是并联的,所以总的电容值是单个的直接相加 PN结电容 M.

输出每日所学,供大家学习使用 7142

【Design Pattern】简单工厂模式

工厂模式

Cpp 356

arcgis根据矢量范围统计栅格数据众数、最大值、均值、中位数、最小值、少数等

像元统计数据 根据多个栅格数据计算每个像元的统计数据。 可用的统计数据有:众数、最大值、均值、中位数、最小值、少数、范围、标准差、总和及变异度。 https://desktop.arcgis.com/zh-cn/arcmap/10.3/tools/spatial-analyst-toolbox/an-overview-of-the-local-tools.htm ...

GIS哼哈哈的博客 6万+

Abstract Factory Design Pattern 抽象工厂设计模式 - 总结

Abstract Factory Design Pattern 就是一般的Factory Design Pattern的进一步设计,增加一个抽象工厂,然后利用这个工厂可以创建不同基类的类。 当我们需要创建更多不同类的时候就可以使用这个设计模式了。 这个设计模式的代码相对会多点,但是其中的思想就是一般Factory Design Pattern,然后集合更多的基类,看起来挺大的一个设计模式,其思

靖空间 1617

利用Matlab实现矩形波导电磁场分布图的绘制

1.利用Matlab实现矩形波导电磁场分布图的绘制;2.学会使用 Matlab 进行数值计算,并绘出相应的图形;通过Matlab 计算并绘出任意时刻金属矩形波导的主模 TE10 模的电磁场分布图。波导尺寸、工作频率及时刻均由外部给定。(1)矩形波导中传输的主模为TE10模。设金属波导尺寸为a*b,TE10模的截止波长为2*a。其电磁场分量可推导表示如下:.......1-1上式中各参量如下:......1-2。

qq_26335381的博客 3058

sdio wifi 移植

介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3

Enosji的博客 9607

工厂模式 (Factory Design Pattern)

工厂模式 (Factory Design Pattern) 案例一:订购披萨(传统写法) //将Pizza 类做成抽象 public abstract class Pizza { protected String name; //名字 //准备原材料, 不同的披萨不一样,因此,我们做成抽象方法 public abstract void prepare(); public void bake() {System.out.println(name + " baking;");} public void

jsxllht的博客 261

PostgreSQL向量数据插件--pgvector安装(附PostgreSQL安装)

本文为本人在安装pgvector中踩过的坑,已找到解决方法,现向大家分享。

m0_62627802的博客 2万+

『Java』设计模式(Design pattern)之工厂模式(Factory Pattern)

# 前言 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。工厂模式属于创建型模式。工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为**简单工厂模式和工厂方法模式**,根据工厂的抽象程度可分为**工厂方法模式和抽象工厂模式**。 **工厂模式的本质就是对获取对象过程的抽象。** 工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

Ho1aAs‘s Blog 1086

ubuntu20.4源码安装最新gcc(gcc V12.2)

Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新gcc12.2版本源码,并进行本地编译、安装。本节内容包括gcc12.2的必备库安装和gcc12.2安装两部分内容组成。

q544344318的博客 1万+

CloudCompare 和 PCL:点云网格化分析与处理

点云网格化是将点云数据转化为规则网格的过程,其主要思想是将离散的点云投影到一个平面上,然后对该平面进行划分,形成一系列小区域。在点云网格化方面,PCL 提供了各种算法和工具,可以实现高效的点云网格化操作。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化算法参数,如搜索半径和最大三角形边长等,执行了网格化操作,最后将网格化结果保存到输出文件中。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化参数,如分辨率等,执行了网格化操作,最后将网格化结果保存到输出文件中。

TechPulseZ的博客 1289

Thinking In Design Pattern——工厂模式演绎

我始终认为学习设计模式需要怀着一颗敬畏的心去探索,这一系列23种设计模式并不是一蹴而就,都是前人根据自己的经验逐渐演化出来,所以才会形成非常经典的理论。学习设计模式,我想最好的方式是根据自己的经验逐渐来推导它,这样你才理解了其中奥妙,而不是靠记忆背住了它,所以,这篇博文主要分析三种工厂模...

chichengbu3180的博客 109

【电动汽车再生制动控制技术(万字长文,图文并茂)】

电动汽车再生制动的基本原理是:通过具有可逆作用的电动机/发电机来实现电动汽车动能和电能的转化。在汽车减速或制动时,可逆电机以发电机形式工作,汽车行驶的动能带动发电机将汽车动能转化为电能并储存在储能器(蓄电池或超级电容器)中;在汽车起动或加速时,可逆电机以电动机形式工作,将储存在储能器中的电能转化为机械能给汽车。这对于改善汽车的能量利用效率,延长电动汽车的行驶距离是至关重要的。

优快云-新能源汽车研发测试专业博主 1574

Design Pattern之工厂方法模式

在本文之前,已经介绍过简单工厂模式,简单工厂模式只有一个工厂,该工厂负责产生所有的运算类,如果增加一个运算类,不仅需要修改工厂类,还需要修改客户端类,这违反了设计模式所提倡的开放-封闭原则。本文所说的工厂方法模式就是在之前的简单工厂模式前提下增加了各种运算方法的工厂类,UML图如下: 相比较简单工厂模式,只增加了运算符的工厂类,下面是代码demo,运算符类这里就不列举,只给出工厂类以及客户端代

delongwang520的博客 238

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Design Pattern之简单工厂模式

简单工厂模式顾名思义,就是专门负责生产的,我们需要什么,就让其生产什么。该模式在开发过程中经常会用到,其好处就是在于设计的类能够达到可维护、可复用、可扩展、灵活性好的目的。 例如,利用C++设计一个加减乘除的小程序,直观的思维直接通过输入判断符号类型(+、-、*、/),然后根据不同的类型,直接算出结果,这样有一个问题,如果以后要修改的时候,需要在同一个文件里找到需要增加判断的地方,容易出错。因此...

delongwang520的博客 256

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Design Pattern - Factory Pattern (设计模式 - 工厂模式)

工厂模式工厂模式是用来封装 对象的实例化的 一种模式。通俗来说,就是有同一类对象,但是我们需要根据不同的情境 比如 输入请求类别的不同来选择不同的 对象去实例化。兄dei有什么例子没?当然有,有两个例子一个是书里面的一个是工作中实际接触到的。例子1 - PizzaStore 披萨饼店情境介绍: 我们现在需要给一个披萨饼店设计系统,系统需要能够完成点餐和制作披萨的需求。package Chap4Fa...

YtdxYHZ的专栏 1128

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Design Pattern - 工厂模式

本质上而言, 这种模式就是用类来封装和拆分条件分支(if else, switch case), 带来的问题就是其实用类封装也是很麻烦的. 其实对于更高级的语言, 如动态语言python(通过eval, 如下例), 或FP语言(通过pattern match), 这种模式根本就没有存在的价值.   工厂模式概述 工厂模式, 包括简单工厂, 工厂方法, 抽象工厂, 为什么叫工厂, 因为工...

weixin_33905756的博客 91

design pattern-工厂模式Factory

定义一个创建对象的接口, 但是让实现这个接口的类来决定实例化哪个类。工厂方式让类的实例化推迟到子类中进行。

qq_40897124的博客 104

设计模式-工厂模式上(Factory Design Pattern)

1、工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。 2、简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点,在实际的项目中相对也不常用。 3、详细介绍: 3.1、简单工厂: 在下面这段代码中,我们根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser……),将存储在文件中的配置解析成内存对象 RuleConfig。 p...

Java开发者Peng博客 266

从壹开始 [ Design Pattern ] 之三 ║ 工厂模式 与 小故事

正文 编者按: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到子类。 工厂模式,是迄今为止,使用最多,最广泛的设计模式之一,它的身影几乎出现在每一个框架和个人代码之中。 它是基石,只有充分了解并掌握了工厂模式,才能继续的向更深层的设计模式进发和努力。 今天的可能有点儿绕,如果有不懂的,可以在文章下边留言,如果有三个以上评论要我讲课的话,我...

老张的哲学 358

design pattern-简易工厂模式

简单工厂模式专门定义一个类来负责创建其他类实例, 被创建的实例通常都具有共同的父类。可以根据阐述的不同返回不同类的实例。

qq_40897124的博客 114

[Design-Pattern]工厂模式

Java版本 1 package interfaces; 2 3 interface Service { 4 void method1(); 5 void method2(); 6 } 7 8 interface ServiceFactory { 9 Service getService(); 10 } 11 12 ...

weixin_30240349的博客 72

设计模式之工厂模式(Factory Design Pattern)

工厂模块就是为了创建一类对象而设计的模式,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。 一个普通人,白手起家,在服装厂工作几年后,想自己当老板,但是又没有太多的资金。只能租个小厂房(作坊)帮别人加工产品。所有的产品不管是生产衣服、帽子、袜子还是内裤都这个小厂房里生产。 简单工厂模式,可以理解为一个作坊模式。简单工厂模式平时是用的最多最常见的。 //服装 interface Clothing { //... } //夹克 class Jacket implements Clo

xjj1314的专栏 499

[Design Pattern]Python设计模式——工厂方法

需求:有一个学雷锋活动,有买米和扫地两个内容,参与的人有大学生和社区志愿者,他们各自的方法不一样。 如果用简单工厂模式实现: #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' class LeiFeng(): def buy_rice(self): pass def sweep(self):

cn_wk的专栏 634

design pattern——抽象工厂模式

 针对问题:和工厂方法模式类似,用一个继承体系来实现创建对象的多变性。不同的是,抽象工厂模式针对的是产品族(许多个产品).           抽象工厂模式结构图:             抽象工厂模式实现代码: /** * 产品A接口 * @author bruce * */ public abstract class ProductA ...

给自己的情书 117

design pattern - 简单工厂模式

开闭原则:OCP,open-closed principle 对修改关闭,对扩展开放。 设计模式是为了,降低耦合和提高程序的可维护性和可扩展性。 CHANGE带给我们的噩梦 面向基类编程。 1、简单工厂模式 简单工厂模式中,工厂负责生产的产品的抽象基类,也可以是接口 [code="java"] /** * abstract base class ...

pingxumeng的专栏 151
上一篇: [DesignPattern]DecoratorPattern
下一篇: [DesignPattern]命令模式
xy_cpp
博客等级 码龄10年 119粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值