我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中如何使用Factory Method模式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中如何使用Factory Method模式

这篇文章给大家分享的是有关Java中如何使用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。

感谢各位的阅读!关于“Java中如何使用Factory Method模式”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中如何使用Factory Method模式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中如何使用Factory Method模式

这篇文章给大家分享的是有关Java中如何使用Factory Method模式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Q: 阅读 "Polymorphism in its purest form" 一文时,我
2023-06-03

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

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

java中method如何使用

在Java中,方法是一段可重用的代码块,用于执行特定的任务或操作。方法可以接受参数,并可以返回一个值。以下是在Java中使用方法的一般步骤:1. 方法的声明:在类中声明方法的名称、参数类型和返回类型。例如:```public int add
2023-09-23

java如何实现抽象工厂模式Abstract Factory

这篇文章给大家分享的是有关java如何实现抽象工厂模式Abstract Factory的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在工厂类模式中,如果需要新的类时,需要修改工厂类,这样显然不利于扩展。在抽象工厂
2023-06-04

Java中如何使用Observer模式

小编给大家分享一下Java中如何使用Observer模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java Q&A: 使用Observer模式A:我想在自己的
2023-06-03

如何在Java中使用命令模式

如何在Java中使用命令模式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮
2023-06-14

如何在java中使用装饰者模式

如何在java中使用装饰者模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开
2023-06-14

如何在Java项目中使用适配器模式

本篇文章为大家展示了如何在Java项目中使用适配器模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。适配器一共包括3种角色1、目标:目标是一个接口,该接口是客户想使用的接口2、被适配者:被适配者是一
2023-05-31

责任链模式如何在Java项目中使用

责任链模式如何在Java项目中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。责任链模式主要包括以下几个角色1、处理者:处理者是一个接口,负责规定具体处理者处
2023-05-31

eclipse中debug模式如何使用

在Eclipse中使用debug模式可以帮助开发者在程序运行时逐行调试代码,以便于查找和解决问题。以下是在Eclipse中使用debug模式的步骤:1. 打开Eclipse并导入你的Java项目。2. 在Eclipse的导航栏上选择"Deb
2023-10-19

PHP中如何使用模板方法模式?

模板方法模式定义了算法的骨架,具体步骤由子类实现,使子类可自定义具体步骤而无需改变整体结构。此模式用于:1. 定义算法的骨架。2. 将算法的具体行为延迟到子类。3. 允许子类自定义算法的某些步骤,而无需更改算法的总体结构。PHP 中的模板方
PHP中如何使用模板方法模式?
2024-05-21

Spring中如何使用设计模式

关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。1. 策略模式关于策略模式的使用方式,在Spring中其实比较简单,从本质上讲,策略模式就
2023-06-05

PHP中如何使用策略模式?

策略模式允许在不修改客户端代码的情况下选择和更改算法或行为。其组成部分:策略接口定义所有策略必须实现的方法。具体策略类实现策略接口中的方法,执行实际行为或算法。上下文类拥有一个策略对象并委托给该策略执行所需的行为。在 PHP 中运用策略模式
PHP中如何使用策略模式?
2024-05-21

PHP中如何使用工厂模式?

php中的工厂模式允许生成对象而不指定确切类,适合在不知道实际类别的情况下创建大量对象:定义product接口和producta、productb等具体产品类。创建factory类提供createproduct方法,通过指定类型(如'a')
PHP中如何使用工厂模式?
2024-05-21

eclipse中的debug模式如何使用

要在Eclipse中使用调试模式,可以按照以下步骤进行操作:1. 打开Eclipse并导入您的项目。2. 在Eclipse的工具栏中选择“Run”(运行)或“Debug”(调试)。3. 在弹出的菜单中选择“Debug Configurati
2023-09-26

PHP中如何使用单例模式?

php 中的单例模式确保一个类只有一个实例,通过以下步骤实现:创建私有静态属性存储实例。创建私有构造函数防止直接实例化。创建公共静态方法用于获取实例;如果不存在则创建并存储为私有属性。PHP中的单例模式简介单例模式是设计模式的一种,用于
PHP中如何使用单例模式?
2024-05-21

java设计模式中如何实现单例模式

这篇文章将为大家详细讲解有关java设计模式中如何实现单例模式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下面是一个简单的小实例://简单懒汉式 public class Singleton {
2023-05-30

PHP中如何使用责任链模式?

责任链模式允许将处理请求的对象串联成链,请求沿着链条传递,直到有对象能处理它,其好处包括:模块化:可轻松添加和删除处理程序。灵活:可方便地更改处理顺序。可扩展性:可随时添加新处理程序,无需修改现有代码。PHP中的责任链模式简介责任链模式
PHP中如何使用责任链模式?
2024-05-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录