Java Q&A: 使用Factory Method模式

保姆级教程:手把手教你用Factory IO搭建虚拟工厂(附永久激活与S7-1200仿真连接) 本文提供了一份详细的Factory IO虚拟工厂搭建教程,涵盖从软件安装到与西门子S7-1200 PLC仿真连接的全过程。通过分步指导和实用技巧,帮助工业自动化新手快速掌握虚拟仿真技术,实现安全高效的PLC程序验证与教学培训。 阅读详情

Java Q&A: 使用Factory Method模式

Q: 阅读 "Polymorphism in its purest form" 一文时,我看到了一个不熟悉的术语 "Factory method"。你能解释一下什么是Factory method并说明如何使用它吗?

A: Factory method(工厂方法)只不过是实例化对象的一种方法的名称。就象工厂一样,Factory method的任务是创建--或制造--对象。

让我们看一个例子。

每个程序要有一种报错的方式。看看下面的接口:

代码清单1
public interface Trace {

      // turn on and off debugging
      public void setDebug( boolean debug );

      // write out a debug message
      public void debug( String message );

      // write out an error message
      public void error( String message );

}

假设写了两个实现。一个实现(代码清单3)将信息写到命令行,另一个(代码清单2)则写到文件中。

代码清单2
public class FileTrace implements Trace {
         
      private java.io.PrintWriter pw;
      private boolean debug;

      public FileTrace() throws java.io.IOException {
            // a real FileTrace would need to obtain the filename somewhere
            // for the example I'll hardcode it
            pw = new java.io.PrintWriter( new java.io.FileWriter( "c:/trace.log" ) );
      }

      public void setDebug( boolean debug ) {
            this.debug = debug;
      }

      public void debug( String message ) {
            if( debug ) {  // only print if debug is true
                  pw.println( "DEBUG: " + message );
                  pw.flush();
            }
      }
      public void error( String message ) {
            // always print out errors
            pw.println( "ERROR: " + message );
            pw.flush();
      }

}

代码清单3
public class SystemTrace implements Trace {

      private boolean debug;

      public void setDebug( boolean debug ) {
            this.debug = debug;
      }

      public void debug( String message ) {
            if( debug ) {  // only print if debug is true
                  System.out.println( "DEBUG: " + message );
            }
      }
      public void error( String message ) {
            // always print out errors
            System.out.println( "ERROR: " + message );
      }

}

要使用这两个类中的任一个,需要这样做:

代码清单4
//... some code ...
SystemTrace log = new SystemTrace();
//... code ...
log.debug( "entering loog" );
// ... etc ...

现在,如果想改变程序中用到的 "Trace实现",就需要修改实例化 "Trace实现" 的每个类。使用了Trace的类的数量可能很多,这种修改就需要大量的工作。而且,你一定也想尽可能地避免大量修改你的类。

代码清单5
public class TraceFactory {
      public static Trace getTrace() {
            return new SystemTrace();
      }
}

getTrace()是一个Factory method。这样,无论什么时候你想得到一个Trace的引用,只用简单地调用TraceFactory.getTrace():

代码清单6
//... some code ...
Trace log = new TraceFactory.getTrace();
//... code ...
log.debug( "entering loog" );
// ... etc ...

使用Factory method来获得实例可以大量节省以后的工作。上面的代码中,TraceFactory返回的是SystemTrace实例。假设需求发生了变化,需要将信息写到文件中。如果是使用Factory method来获得实例,只用在一个类中修改一次就可以满足新的需求。你就不用在使用了Trace的的每个类中进行修改了。也就是说,只用简单地重定义getTrace():

代码清单7
public class TraceFactory {
      public static Trace getTrace() {
            try {
                  return new FileTrace();
            } catch ( java.io.IOException ex ) {
                  Trace t = new SystemTrace();
                  t.error( "could not instantiate FileTrace: " + ex.getMessage() );
                  return t;
            }
      }
}

当不能确定一个类的什么具体实现要被实例化时,Factory method会很有用。你可以将那些细节留给Factory method。

在上面的例子中,你的程序不知道要创建FileTrace还是SystemTrace。因而,你可以只是用Trace来处理对象,对具体实现的实例化则留给Factory method。

16、Factory Method设计模式详解 本文详细介绍了Factory Method设计模式的概念、应用场景及实现方法。通过具体示例,如Java中的迭代器和信用检查服务,展示了如何使用Factory Method模式提高代码的灵活性和可扩展性。同时,还探讨了其在并行层次结构中的应用以及与其他模式(如Abstract Factory)结合使用的可能性。 阅读详情

相关推荐

Setup_Factory使用教程(超详细版,带图解说明)

我们在用VB等语言编写并编译成程序后,往往会希望制作一个精美的安装程序来发布自己的软件。在这里推荐使用Setup Factory 7.0,这是一款强大的安装程序制作工具。该软件提供了安装制作向导界面,即使你对安装制作不了解,也可以生成专业性质的安装程序。可建立快捷方式,也可直接在 Windows 系统的注册表加入内容,还能在 Win.ini 和 System.ini 内加入设定值,更可以建立反安装选项等等。这里给出了详细的解释和图解说明

【factoryio】虚拟工厂 的安装和使用

factoryio软件是一个虚拟仿真实验室,工业场景仿真的软件,它可以与真实硬件连接也可以通过仿真进行连接,和PLC在一起有很大的发挥空间,在这里提供软件的安装和使用,如何和1200PLC进行仿真,仿真编写正反转。这里讲解了factorio的安装和激活步骤,以及和PLC的仿真连接,软件的激活和工程模板的导入不太容易完成!大家可以按照步骤多看几遍,多试几次!是可以完成的!

weixin_67913271的博客 9万+

oracle 11.2.0.3.0 client下载,oracle64位客户端 Instant Client

oracle64位 客户端安装程序,Instant Client v11.2.0.3.0(64-bit)可以用,bo客户端需要配这个的,所以装了一个,64位操作系统中、不安装Oracle-32bit客户端,方便使用PLSQL Developer(不支持64bit位Oracle客户端)安装教程安装配置instantclient下载后,解压到D:\Oracle\instantclient_11_2(特...

weixin_42573757的博客 4516

【factoryio】虚拟仓储实现(入仓&出仓)

注: 本文仅个人思路,仅供参考!如有错误,还望指出!1.急停实现不了(大家有没有什么好的办法?可以和我说一下。2.按照思路一步一步来实现,如果程序出现错误,要先找到是哪里出现了错误,找到后再想办法解决,最后调试!(要相信,办法总比困难多!3.程序要多调试几遍,有些问题可能会在调试多遍后才出现。4.记得写注释!(时间久可能会忘记)5.程序每写好一点,都要记得保存!保存!保存!以上就是本文的所有内容了!

weixin_67913271的博客 1万+

kubeadm init 运行时kebelet启动失败问题

解决k8s kubeadm init时遇到的kubelet问题

ZDPZN的博客 6074

伺服驱动器485通信

485通信使用方法,485通信在上位机和伺服驱动器之间的应用,根据需要驱动电机旋转。

haipi511715316的博客 1万+

Python连接FactoryIO仿真控制练习

Python连接FactoryIO仿真控制练习 概述: 今天下午没什么事,又看了一下FactoryIO仿真软件,以前做这种控制总是用PLC去做,使用PLC做逻辑控制的时候,定时器计数器什么的都是既有的功能块,直接调用就可以了,相对逻辑实现不用考虑那么多底层逻辑的细节,最近正在学习python,差不多有三个月了,所以找了个简单的控制例程,打算用python写一下控制逻辑,思考的过程挺有意思,和大家分享一下。使用的例程是FactoryIO自带的一个简单例程“Sort by Weight”,即使用称重皮带检测重量

冰河世纪 8926

Java服务端实现Google Pay支付功能

全网最全代码、最清晰服务端处理Google Pay,最清晰讲解Google Pay集成逻辑。

jack2350536098的博客 1万+

Factory IO的应用(一)

Factory IO的应用(一) Factory IO的介绍 FACTORY I/O 提供超过20个典型的工业应用场景让您如身临其境般地练习控制任务。选择一种场景直接使用或以其作为一个新项目的开端。 系统包含一个完整且具有典型工业设备的部件库,用户可以启用任何一个预先构建的场景或者在一个空旷的场景中通过拖拽的方式选择部件库中所包括的传感器、传送带、按钮、开关等部件创建一个新的工业系统,同时具有数字量和模拟量不同I/O点配置。 搭建自己的工业场景 FACTORY I/O 的智能编辑工具让您以更简易、更逼真

m0_46233224的博客 2万+

LM Studio中文版零基础入门:从安装到模型下载的保姆级教程(附国内镜像源配置)

本文提供LM Studio中文版的零基础入门教程,涵盖从软件安装、中文界面切换到国内镜像源配置的全流程。特别针对模型下载速度慢的问题,详细介绍了如何通过修改配置文件使用国内镜像站,并推荐适合新手的入门模型及硬件配置建议,帮助用户快速上手本地大模型运行。

pz890123456的博客 2603

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3014

java factory method_Java Q&A: 使用Factory Method模式 (转)

Java Q&A: 使用Factory Method模式 (转)[@more@]Java Q&A: 使用Factory Method模式Q: 阅读 "Polymorphism in its purest form" 一文时,我看到了一个不熟悉的术语 "Factory method"。你能解释一下什么是Factory method并说明如何使用它吗?A: Factory method...

weixin_27188815的博客 114

[企业AI落地] RAG 知识库系统在多租户环境下的细粒度权限隔离设计

多租户 RAG 系统真正的风险不只是搜不到,而是把不该看到的内容查出来、说出来、写回去。本文结合多客户售后知识助手场景,用元数据结构、向量检索过滤、回答策略和审计回写示例拆解租户、资源、检索、生成、审计五层权限边界。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 221

java factory用法_Java Q&A: 使用Factory Method模式(转)

Q: 阅读 "Polymorphism in its purest form" 一文时,我看到了一个不熟悉的术语 "Factorymethod"。你能解释一下什么是Factory method并说明如何使用它吗?A: Factory method(工厂方法)只不过是实例化对象的一种方法的名称。就象工厂一样,Factorymethod的任务是创建--或制造--对象。让我们看一个例子。每个程序要有一种...

weixin_39819661的博客 91

量化 insider 爆料! 散户打板必亏?(打板必看!量化资金如何“隔日砸盘”收割散户)

量化开发 insider 爆料💥 散户追的涨停板📉,可能是机构故意做的陷阱!本文从技术视角拆解“涨停陷阱”,帮你看清市场真实逻辑🧠。

XiaoqiangClub的博客 454

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java Q&A: 使用Factory Method模式 (转)

Java Q&A: 使用Factory Method模式 (转)[@more@]Java Q&A: 使用Factory Method模式 Q: 阅读 "Polymorphism in its purest fo...

csd3176的博客 86

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java Q&A: 使用Factory Method模式(转)

Q: 阅读 "Polymorphism in its purest form" 一文时,我看到了一个不熟悉的术语 "Factory method"。你能解释一下什么是Factory method并说明如何使用它吗? A: ...

cqwf95925的博客 115

IDEA的使用指南

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

spring中factory-method使用

spring中factory-method使用 文章目录spring中factory-method使用一、简介二、factory-method属性创建对象2.1 定义类Stu.java2.2 定义工厂类StuFactory.java2.3 定义spring配置文件springFactoryMethodConfig.xml2.4 使用 一、简介 这里介绍下在spring中,通过factory-met...

panda-star的博客 1万+

Design Pattern: Factory Method 模式

学习是分享和合作式的! 转载请注明出处:http://blog.youkuaiyun.com/wdzxl198/article/details/9219421;  文章摘自: http://www.riabook.cn/doc/designpattern/;  考虑一个状况,您所经营的工厂正在生产一个新的电视机产品,现在有一个问题发生了,您的电视机产品所有的组件都可以自行生产,像是操作面版、电源、摇控装

Atlas2013的专栏 1267

java design pattern (1. Factory Method pattern)

、设计模式Factory Method 此模式属于创建型设计模式,它只定义创建对象的接口,而由它的子类负责创建具体的对象,利用子类实例化不同的对象。图一是Factory Method 模式结构的类图(Class Diagram),其中: Product 定义了由factory method所创建对象的统一接口。 ConcreteProduct 具体的类,实现Product接口。

zs12344444的专栏 833

java static factory_Static Factory Method

今天我们来聊一聊static factory method,它是factory method pattern轻微的变种。解决的问题/例子想象一下这个应用场景:我们需要建立一个class来代表笛卡尔坐标系。我们可以用x和y坐标来表示一个点,也可以用角度和长度来表示。如果我们用常规的constructor,如何区分两个表示方式呢?public Class Coordinate {public Coor...

weixin_42116794的博客 230

在Java中应用设计模式 - Factory Method

在Java中应用设计模式 - Factory Method(来源:http://www.cn.ibm.com/developerWorks) 内容:基本概念简单分析具体实施后话:参考资料关于作者<!-- Start Related Content Area -

Eric.Jonah! 907

GOF设计模式——Factory Method模式

一、什么是Factory Method模式         Factory Method模式是用来构建生成实例的工厂,在该模式下,父类决定实例生成的方式,但并不决定所要生成的具体类。这样的设计思想,就跟Template Method模式相似(具体参考:https://blog.youkuaiyun.com/weixin_39400271/article/details/86565016),因为Factory...

weixin_39400271的博客 418

factory java_在 Java 中应用设计模式 - Factory Method

在 Java 中应用设计模式 - Factory Method刘湛2001 年 9 月 06 日发布基本概念FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需要用到FactoryMethod 模式了.简单说来,FactoryMethod可以根据不同的条件产生不...

weixin_32953571的博客 214

factory-bean,factory-method的使用

factory-bean:用于实例化工厂类 factory-method:用于调用工厂类方法。 对于静态方法: public class MyBeanFactory { /** * 创建实例 ***/ public static UserService createService(){ return new UserServiceImpl(); } } UserServicei...

qq_41258326的博客 657

模式:FACTORY

目录 模式:FACTORY 选择FACTORY及其应用位置 有些情况下只需使用构造函数 接口的设计 固定规则的相关逻辑应放置在哪里 ENTITY FACTORY与VALUE OBJECT FACTORY 重建已存储的对象 模式:FACTORY 当创建一个对象或创建整个AGGREGATE时,如果创建工作很复杂,或者暴露了过多的内部结构,则可以使用FACTORY进行封装。 对...

Star_Inori的博客 484
上一篇: Java Tip: 用Reflection实现Visitor模式
下一篇: Java Q&A: 使用Singleton模式?给我一个理由先!
lostmouse
博客等级 码龄26年 22粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值