java设计模式——FactoryMethod模式

开源框架openTCS开发者指导手册 立即下载

模式概念

这是工厂模式中比较简单的一种,大致思想和上篇提到的《java设计模式——TemplateMethod模式》 比较像。首先我们看一个图,这个图来自《图解设计模式》一书响应章节:
这里写图片描述
图中,提供了一个生产鱼的模具,然后我们可以使用不同的材料生产颜色,质感不一样的鱼,这个图很好地解释了工厂方法模式。
在Template Method模式中,我们在父类中规定处理流程,在子类中实现具体的细节。如果我们将该模式用于实例的生成,那么它就是Factory Method模式了。
Factory就是工厂的意思,也就是规模化,标准化生产对象实例的地方。用Template Method模式来构建生成的工厂,这就是FactoryMethod模式。
在FactoryMethod模式中,父类决定实例的生成方式,但是不决定需要生成什么类型的实例,具体的处理全部交给子类来负责。这样就可以将生成实例的框架和需要实现的业务细节解耦。

举个例子

我们这里举一个生产id卡的例子,主要用于生产每个人的ID卡。一共有5个类:
AbstractProduct类和AbstractFactory类属于framework包,提供实例生成的框架。
IDCard类和IDCardFactory类是负责实际生产的类,他们在idcard的包下。
Main类是客户端类。
这里涉及的类图如下:
这里写图片描述
代码整体的包结构如下:
这里写图片描述
下面我们看下具体的实现。

AbstractProduct

/*************************************************************************
    > File Name: AbstractProduct.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Thu Mar 15 10:19:14 2018
 ************************************************************************/
package framework;

public abstract class AbstractProduct {
    public abstract void use();
}

AbstractFactory

/*************************************************************************
    > File Name: AbstractFactory.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Thu Mar 15 11:52:57 2018
 ************************************************************************/
package framework;

public abstract class AbstractFactory {
    public final AbstractProduct create(String owner) {
        AbstractProduct product = createProduct(owner);
        registerProduct(product);

        return product;
    }

    protected abstract AbstractProduct createProduct(String owner);
    protected abstract void registerProduct(AbstractProduct product);
}

IDCard

/*************************************************************************
    > File Name: IDCard.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Thu Mar 15 11:56:19 2018
 ************************************************************************/
package idcard;

import framework.*;

public class IDCard extends AbstractProduct {
    private String owner;

    IDCard(String owner) {
        System.out.println("Creating id card, owner: " + owner);
        this.owner = owner;
    }

    @Override
    public void use() {
        System.out.println("Using id card, owner: " + owner);
    }

    public String getOwner() {
        return owner;
    }
}

IDCardFactory

/*************************************************************************
    > File Name: IDCardFactory.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Thu Mar 15 12:28:07 2018
 ************************************************************************/
package idcard;

import framework.*;
import java.util.List;
import java.util.ArrayList;

public class IDCardFactory extends AbstractFactory {
    private List<String> owners = new ArrayList<>();

    @Override
    protected AbstractProduct createProduct(String owner) {
        return new IDCard(owner);
    }

    @Override
    protected void registerProduct(AbstractProduct product) {
        owners.add(((IDCard) product).getOwner());
    }

    public List<String> getOwners() {
        return owners;
    }
}

Main

/*************************************************************************
    > File Name: Main.java
    > Author: CreateChance
    > Mail: createchance@163.com 
    > Created Time: Thu Mar 15 12:35:22 2018
 ************************************************************************/
import framework.*;
import idcard.*;

public class Main {
    public static void main(String[] argvs) {
        AbstractFactory factory = new IDCardFactory();
        AbstractProduct card1 = factory.create("Tom");
        AbstractProduct card2 = factory.create("Jack");
        AbstractProduct card3 = factory.create("Jimmy");

        card1.use();
        card2.use();
        card3.use();
    }
}

运行结果

这里写图片描述

模式角色

在FactoryMethod模式中涉及的角色如下图:
这里写图片描述

OpenTCS从零学起(一) OpenTCS 交通控制系统的简单介绍和源码的简单运行。对源码的编译步骤的介绍。本人也是初学希望大家共同努力 立即下载

相关推荐

MTK MT6833平台屏幕与TP驱动移植实战:从FAE伪代码到内核模块集成

本文详细介绍了在MTK MT6833平台上进行屏幕与TP驱动移植的完整实战流程。文章从解析供应商提供的初始化伪代码入手,逐步拆解了在LK阶段点亮屏幕、在内核层集成Panel驱动以支持休眠唤醒,以及移植并调试sitronix_ts触摸驱动的核心步骤与关键技巧,为嵌入式开发人员提供了从零到一集成新硬件的清晰指南。

rnn9storyteller的博客 441

Java(基础)工厂方法(FactoryMethod)

概述: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,FactoryMethod使一个类的实例化延迟到子类。 适用性: 1.当一个类不知道它所必须创建的对象的类的适合 2.当一个类希望由它的子类来指定它所创建的对象的时候 3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你 希望将哪一个帮助子类是代理者这一信息局部化的时候 package com.day13.abstractTest; import com.sun.xml.internal.ws.api.model.wsdl

asd623444055的博客 1049

【迁移学习】域对抗迁移网络 DANN

Domain-Adversarial Training of Neural Networks

这个博客太懒了什么都没说 8416

Java设计模式之—Factory Method模式(工厂模式)

Java设计模式之—Factory Pattern模式(工厂模式) 工厂模式(Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方式;定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 应用场景 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统...

weixin_40649194的博客 329

RabbitMq安装

本文详细介绍了在CentOS7系统上离线部署RabbitMQ4.3.2的完整流程。主要内容包括:1)准备RabbitMQ安装包、Erlang依赖和socat网络工具;2)安装系统编译依赖并编译安装Erlang;3)部署RabbitMQ服务,配置环境变量和socat依赖;4)启用Web管理插件并创建管理员账号;5)配置防火墙放行端口;6)设置Systemd开机自启服务;7)提供常用运维命令。文档特别强调离线部署注意事项,包括socat依赖、版本兼容性、账号安全及主机名配置等问题,为生产环境部署提供完整解决方案

sinat_25821779的博客 323

【COMSOL】修改内置物理场方程 模拟水沸腾的蒸汽泡运动

在COMSOL中通过弱贡献(weak contribution)节点,可以向任何内置模型方程中添加约束。这里,以模拟水沸腾的蒸汽泡运动为例,来讲一讲当我们研究的方程与模块方程不一样时,应该怎么增加新的贡献项。

u012161192的博客 9007

设计模式学习---Java工厂模式(Factory)

普通工厂模式 概念 普通工厂方法模式就是建立一个工厂类,对实现了同一接口的不同实现类进行实例的创建。实际上就是new对象 类图 右侧一个接口(Sender)两个实现类(MailSender、SmsSender),左侧工厂类(SendFactory)produce方法有一个String类型的参数type,返回值为Sender(构成多态)。代码如下: Sender public interface Sender { // 自定义抽象方法 void send(); } MailSender p

weixin_43420351的博客 1645

通过CN3口直接控制台达伺服电机A2-M(二)

既然可以通过RS485与伺服驱动器进行通讯,那么就肯定可以控制转速 首先,需要了解下 ‘控制模式及控制命令输入源设定’ 依据以上资料,速度控制模式有两种,S和SZ模式,分别对应模式选择中的02和04,对P1-01的地址0102进行写地址操作即可实现,一开始我使用了S模式,但是这个模式在寸动模式下会自动运转,不符合我控制的要求,后面改用SZ模式,就可以实现零速度。 使用串口工具发送命令:“01 06 01 02 00 04 28 35”即可以实现设置,设置完成后可以手动在伺服驱动器的按键面板上进行确

HKing_evil的博客 6825

【设计模式】Java 设计模式之工厂模式(Factory Pattern)

工厂模式是一种创建型设计模式,用于封装对象的创建过程,降低系统耦合度,提高可扩展性和可维护性。它通过将对象的创建逻辑抽象到工厂类中,使客户端代码与具体实现解耦。工厂模式有多种变体,如多重工厂和静态工厂,可根据需求选择。在实际应用中,工厂模式可与其他设计模式结合,如原型、单例和依赖注入,形成更强大的解决方案。然而,过度使用可能导致系统复杂,需谨慎评估。现代框架和库常内置工厂模式,提供便捷的对象创建机制。总之,工厂模式是构建高质量软件系统的有效工具,需结合实际情况灵活运用。

新手村长的专栏 2843

Zemax显微镜设计:从物镜到目镜的完整光学系统优化

本文详细介绍了使用Zemax进行显微镜光学系统设计的完整流程,从物镜到目镜的优化技巧。通过实战案例和关键参数设置,帮助读者掌握数值孔径、视场角等核心概念,实现高分辨率显微镜设计。文章特别强调了系统级优化和公差分析的重要性,为科研和工业检测提供可靠的光学解决方案。

weixin_42549451的博客 437

网络摄像头(IPC)介绍:类型、供电、镜头、夜视等

IPC(Internet Protocol Camera,网络摄像头),它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。它可以将视频、音频、报警及控制信号通过网络传输,接受网络监控主机(NVR或监控管理平台)的管理。IPC可与路由器、交换机、NVR等设备组建成为监控系统。

学无止境,Fighting! 1万+

java中factory_《JAVA设计模式》中的工厂方法模式 Factory

工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。那么工厂方法模式是在什么场景下使用呢,下面就以本人的理解举例说明:相信很多人都做过导入导出功能,就拿导出功能来说。有这么一个需求:XX系统需要支持对数据库中的员工薪资进行导出,并且支持多种格式如:HTML、CSV、PDF等,每种格式导出的结构有所不同,比如:财务跟其他人对导出薪资的HTML格式要求可能会不一样,因为财务...

weixin_34778803的博客 647

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

Java设计模式之FactoryMethod

一、简介Factory意思为“工厂”,使用上一篇文章介绍的Template Method 模式来构建生成实例的工厂,这就是本文的主角FactroyMethod。在Factory Method模式中,父类决定实例的生成方式,但并不所要生产的具体类,具体的类全部交给子类负责。二、工厂模式的类图逻辑1、所需的类Factory :抽象类,定义生成产品的方法,以及使用Template Method的业务逻辑...

浅谈Android 298

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

设计模式(JAVA)——FactoryMethod模式

设计模式(JAVA)之FactoryMethod模式

读书 好学 求知 285

VC中sqlite的使用

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

java 工厂方法设计模式 FactoryMethod

我们创建一个抽象类来声明工厂方法 ,并可选择包括共享行为,例如定义使用任何对象提供的任何对象发送通知的高级逻辑。但是,随着您的产品不断增长并且您不断添加新的通知类型,有些事情又开始感觉不对劲。因此,您可以添加一个新类,并通过添加一个新块来更新您的 NotificationService 类,以创建 SMS 通知对象,并发送该对象。现在,您的通知代码开始看起来像一个巨大的控制塔。工厂方法设计模式是一种创建设计模式,它提供了一个用于在超类中创建对象的接口,但允许子类更改将要创建的对象的类型。

long316的专栏 541

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 工厂模式(FactoryMethod) - Java实现

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 工厂模式(FactoryMethod) 是一种代替new的操作的一种模式。可以给系统带来更大的可扩展性和尽量少的修改量。工厂模式分为三种:普通工厂、多个工厂、静态工厂。

Z 525

java设计模式读书笔记[1]——FactoryMethod模式

模式概念 这是我在读的《图解设计模式》一书上的一张图,最能体现工厂方法模式的效果与内涵。 在Factory Method模式中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责。这样就可以生成实例的框架和实际负责生成实例的类结构。 书中案例 书上的是一个生产id卡的例子,主要用于生产每个人的ID卡。一共有5个类: AbstractProduct类和AbstractF...

weixin_43917604的博客 163

浅谈JAVA设计模式之——工厂方法(FactoryMethod)

一、概述             定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。       二、适用性  当一个类不知道它所必须创建的对象的类的时候。  当一个类希望由它的子类来指定它所创建的对象的时候。 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

冰河的专栏 2676

在JAVA中应用设计模式FactoryMethod

 FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需要用到Factory Method 模式了.简单说来,Factory Method可以根据不同的条件产生不同的实例,当然这些不同的实例通常是属于相同的类型,具有共同的父类.Factory Method把创建这...

做真正的自己 269

Java类库看设计模式Command,AbstractFactory,Singleton

http://www.ibm.com/developerworks/cn/java/l-jdkdp/part2/   简介:  在 上一部分的内容中,我们讲到什么是模式,什么是设计模式,以及对一个设计模式Observer的详细阐叙。相信大家对于模式的概念应该是比较的理解了。这 部分及以后的内容,将会步入正题,从Java类库的分析入手,来阐叙设计模式是如何应用到一个完美的设计中的。实际上,...

sqcwfiu 184

java中createfactory_Java设计模式 create FactoryMethod

工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A()工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽...

weixin_36005427的博客 142

Java设计模式 create FactoryMethod

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33716154的博客 125

java设计模式之工厂方法(FactoryMethod)

工厂方法 解决创建对象的时机问题 将所要创建的对象延迟到子类创建 public interface BMW { //产品的信息介绍、发动方式 void showInfo(); } class BWM3 implements BMW{ @Override public void showInfo() { System.out.println("这是宝马3系"); } } class BWM5 implements BMW{ @Override

weixin_43239397的博客 175

设计模式-工厂方法模式(FactoryMethod)-Java

设计模式-工厂方法模式-Java 目录 文章目录1、示例案例1.1、日志记录器的设计2、工厂方法模式概述2.1、工厂方法模式定义2.2、工厂方法模式要点2.3、工厂方法模式结构图中角色2.4、工厂方法模式使用2.5、思考3、工厂方法模式完整解决方案4、方案的改进4.1、反射与配置文件4.2、修改客户端代码4.3、新增日志记录方式4.4、重载的工厂方法4.5、工厂方法的隐藏5、总结5.1、优缺点5.2、适用场景***后记*** : 内容 1、示例案例   简单工厂模式虽然简单,但存在一个很严重的问题

gaogzhen的博客 484
上一篇: java设计模式——TemplateMethod模式
下一篇: Kotlin lambda学习
createchance
博客等级 码龄15年 156粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值