精华内容
下载资源
问答
  • 也可以用静态工厂方法新建静态工厂方法就是一个方法,但是返回一个新实例。我们通过静态工厂方法来代替构造器,我们首先需要知道的是静态工厂方法只是一个“普通的方法”。的确,我们将具有:返回这个对象的一个实例...

    我们想新建一个对象的话可以用new 构造器的方法

    Date d=new Date();

    也可以用静态工厂方法新建

    静态工厂方法就是一个方法,但是返回一个新实例。

    我们通过静态工厂方法来代替构造器,我们首先需要知道的是静态工厂方法只是一个“普通的方法”。

    的确,我们将具有:返回这个对象的一个实例这种特点的静态方法叫做静态工厂方法,它在理论上与其他方法并没有什么不同。

    但是也正是因为他是一种”普通的方法“,它具有很多构造器不具备的优点。

    LocalDate ld=new LocalDate.now();

    5c063f2d6b6346d3b71589304b707960.png

    每当我们调用构造器,每当我们使用new来初始化一个对象时,都无疑是在堆上创建了一个新的对象。

    而有些不可变的类、不希望被实例出多个对象的类不用也不必每次都创建一个对象。

    通过静态工厂方法,我们可以直接向客户端返回一个我们早已创建好的对象,对于有些不可变的类,比如基本类型包装类,这样做可以极大地节省我们的开销。

    单例模式的类,只允许每个类中存在一个已经实例化的对象。

    对于单例模式来说,构造器都会被声明为private,我们不能也无法构造一个对象,只能通过静态工厂方法来获取他的对象。

    展开全文
  • 转载请注明出处:https://www.cnblogs.com/rolayblog/p/10531374.html什么是静态工厂方法获取一个类实例最直接的方式就是使用new关键字,通过构造函数来创建对象,比如: 1 Date date=newDate();23 Person person=...

    转载请注明出处:https://www.cnblogs.com/rolayblog/p/10531374.html

    什么是静态工厂方法

    获取一个类实例最直接的方式就是使用new关键字,通过构造函数来创建对象,比如:

    be7ea7d30b32d61328a996285858d167608.jpg

    00949779d2e97a3ce276b7466f0bc758306.jpg

    1 Date date=newDate();2

    3 Person person=new Person()

    new关键字创建对象

    或许你见过这种获取类实例的写法:

    c68fdfab0484a677d1ae1adcfc8a82800dc.jpg

    f24c5db83e549f2f9cd7da4b155691bde14.jpg

    1 Calendar calendar=Calendar.getInstance();2

    3 Integer integer=Integer.valueOf("233");

    静态工厂方法创建对象

    上面这种就是我们的静态工厂方法,看源码可以看到里面的实现。下面说说静态工厂方法的优缺点。

    优点1 它们可以有自己的名字

    都知道在java里面,我们构造函数的名称和类名是一样的,这导致的一个问题是构造函数的名称不够灵活,经常不能准确地描述返回值,在有多个重载的构造函数时或者参数类型、数目又比较相似的话,那看起来就很打脑壳,头晕,比如下面这种写法:

    ed8c765626d1565c465bcf80b2d67a23336.jpg

    980aaf330e4c30ceca37fdd3bd598a362b8.jpg

    1 Integer integer1=Integer.valueOf("233");2 Integer integer2=Integer.valueOf(5);3 Integer integer3=Integer.valueOf("1",10);

    构造方法创建对象

    可以看到上面这种,多个重载函数,需要找到合适的函数调用。如果采用静态工厂方法起一个有意义的名字,就很清晰,例如:

    366311385def0c6b9d87f76a2930d185b66.jpg

    3958b2897f9c0909f87960d16a19d806be6.jpg

    1 Integer integer1=Integer.valueOfByString("233");2 Integer integer2=Integer.valueOfByInt(5);3 Integer integer3=Integer.valueOfByStringAndRadix("1",10);

    静态工厂方法

    优点2 不用每次调用都创建新的对象

    有时候外部调用者只需要拿到一个实例,而不关心是否是新的实例;又或者我们想对外提供一个单例时 —— 如果使用工厂方法,就可以很容易的在内部控制,防止创建不必要的对象,减少开销。

    优点3 可以返回原返回类型的子类

    fbf99606e23e8d887d400066bf39fad8518.jpg

    0d5a890e87d914091170c6cc8abb3adc16e.jpg

    1 classPerson{2 publick staticPerson getInstance()3 {4 return newPerson();5 //获取返回 new Man(); new WoMan();

    6 }7 }8 Class Man extendsPerson{9 }10 Class WoMan extendsPerson{11 }

    返回原返回类型的子类

    优点4 在创建带泛型的实例时,能使代码变得简洁

    72bf66c49c57cbfe074d9744202a3e66299.jpg

    850c0dc069f3545e6b8a840a3ab89ce3725.jpg

    1 HashMap map=new HashMap();2 在java 7后已经优化为:3 HashMap map=new HashMap<>()4 这里只是举例说明

    泛型实例

    优点5 可以有多个参数相同,但名称不同的静态工厂方法

    构造方法虽然可以有多个,但是需要参数类型不同,才能重载,比如:

    57ca3227ce97f218a3feae03aad70bc0026.jpg

    1b59478dfc1ee9035b7093213e51b158f04.jpg

    1 classPerson{2 int age = 10;3 int weight = 30;4 public Person(int age, intweight) {5 this.age =age;6 this.weight =weight;7 }8 public Person(intage) {9 this.age =age;10 }11 }

    构造方法

    此时,如果我要加一个Child( int weight)方法就会编译报错了。但是这时候如果我们用静态工厂方法就可以避免这种情况了:

    fb5aeede59e0590197ab67ac5d9efc5d11d.jpg

    6d6ee6d76038621711eb38b7ca692338fd9.jpg

    1 classPerson{2 int age = 10;3 int weight = 30;4 public static Person newPerson(int age, intweight) {5 Person person= newPerson();6 person.weight =weight;7 person.age =age;8 returnperson;9 }10 public static Person newPersonWithWeight(intweight) {11 Person person= newPerson ();12 person.weight =weight;13 returnperson;14 }15 public static Person newPersonWithAge(intage) {16 Person person= newPerson ();17 person.age =age;18 returnperson;19 }20 }

    静态工厂方法

    缺点1 类如果不含公有的或者受保护的的构造器,就不能被子类实例化。

    缺点2 与其他静态方法没什么区别

    总结

    公有构造方法和静态工厂方法各有用处,但是就上面的优点来看,静态工厂方法更加适用。

    ps:参考地址:https://www.jianshu.com/p/ceb5ec8f1174

    展开全文
  • 小编典典该静态工厂方法模式是一种封装对象的创建。如果没有工厂方法,则只需直接调用类的构造函数:Foo x = new Foo()。使用这种模式,你可以改为调用factory方法: Foo x = Foo.create()。构造函数被标记为私有,...

    小编典典

    该静态工厂方法模式是一种封装对象的创建。如果没有工厂方法,则只需直接调用类的构造函数:Foo x = new Foo()。使用这种模式,你可以改为调用factory方法: Foo x = Foo.create()。构造函数被标记为私有,因此只能从类内部调用它们,并且将工厂方法标记为,static以便无需首先具有对象就可以对其进行调用。

    这种模式有一些优点。一种是工厂可以从许多子类(或接口的实现者)中进行选择并返回。这样,调用者可以通过参数指定所需的行为,而不必了解或理解潜在的复杂类层次结构。

    正如Matthew和James指出的那样,另一个优势是控制对有限资源(例如连接)的访问。这是一种实现可重用对象池的方法-而不是构建,使用和拆除对象,如果构建和销毁是昂贵的过程,则一次构建并回收它们可能更有意义。工厂方法可以返回一个现有的,未使用的实例化对象(如果有),或者如果对象计数低于某个下限阈值则构造一个实例,或者如果该对象null高于上限阈值则抛出异常或返回。

    根据Wikipedia上的文章,多种工厂方法还允许对类似参数类型进行不同的解释。通常,构造函数与类具有相同的名称,这意味着你只能有一个具有给定签名的构造函数。工厂并不是那么受约束,这意味着你可以有两种接受相同参数类型的不同方法:

    Coordinate c = Coordinate.createFromCartesian(double x, double y)

    Coordinate c = Coordinate.createFromPolar(double distance, double angle)

    正如Rasmus指出的那样,这也可以用来提高可读性。

    2020-02-29

    展开全文
  • 这就是我所得到的: public class Node { // instance variables ... } 我的问题真的只是关于泛型的语法以及静态工厂方法的语法.我真的不明白为什么我们把之前返回类型的方法声明.有没有类型转换?任何帮助将不胜感激!

    这就是我所得到的:

    public class Node {

    // instance variables

    private Node next;

    private T data;

    // construct with data

    private Node(T data){

    next = null;

    this.data = data;

    }

    // construct without data

    private Node(){

    next = null;

    this.data = null;

    }

    // static factory method

    public static Node newNodeWithData(T data){

    return new Node(data);

    }

    // static factory method

    public static Node newNode(){

    return new Node();

    }

    ...

    }

    我的问题真的只是关于泛型的语法以及静态工厂方法的语法.我真的不明白为什么我们把< T>之前返回类型的方法声明.有没有类型转换?任何帮助将不胜感激!

    展开全文
  • 工厂模式是一种设计模式(创意模式),用于根据我们提供的数据创建多个对象。在其中,我们创建了一个抽象...我们使用名为的方法创建了一个工厂类(EmployeeFactory)getEmployee()。此方法接受String值,并根据给定的...
  • 前言 最近因为疫情和年底的原因,有大量的时间来做一些自己的事,便在京东上买了一本 Effective Java 中文第三版,零散的读完全本后...本文将重点介绍用静态工厂方法代替构造器。 静态工厂方法概述 Java 中获取一个类的
  • 静态工厂方法模式

    2021-04-17 06:40:11
    静态工厂方法模式2015/3/30 9:23:09 zftzyw 程序员俱乐部 我要评论(0)摘要:1抽象产品角色(即父类)packagecom.diermeng.designPattern.SimpleFactory;/**产品的抽象接口*/publicinterfaceFood{/**获得相应的食物*/...
  • java静态工厂代替构造函数使用方法和优缺点1. 形式复制代码 代码如下:public static Boolean valueOf(boolean b) {return b ? Boolean.TRUE : Boolean.FALSE;}2. 优点:可以有名称不一定要创建新对象,可以返回已...
  • java静态工厂

    2021-08-17 10:35:33
    但是一个类可以提供公共静态工厂方法,它只是一个返回类实例的静态方法。下面是一个来自 Boolean (boolean 的包装类)的简单示例。该方法将 boolean 基本类型转换为 Boolean 对象的引用: public static Boolean ...
  • 简单工厂的构成包括三个角色:1)抽象产品类2)具体产品类(继承抽闲产品类)3)工厂类(生产具体产品)具体代码实现 1、抽象产品类/*** 抽象类*/public abstract class Car {/*** 产品抽象方法,将会由具体产品类实现*/...
  • 静态工厂方法代替构造器优势1、静态工厂方法有名称2、不必每次调用它们的时候都创建一个新对象3、可以返回原返回类型的任何子类型4、所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值5...
  • 简单工厂模式简单工厂模式也叫做静态工厂方法模式。简单工厂模式组成:•工厂类角色:本模式的核心,含有一定的商业逻辑和判断逻辑,是由一个具体类实现。•抽象产品角色:具体产品抽象出来的父类或者接口,用于子类...
  • Java 9在集合API中引入了新的工厂方法,使开发人员更容易创建不可变的集合。在本文中,我将首先解释包含新工厂方法的动机,然后介绍所有方法、它们的用法和实现细节。告诉我,如何用Java 8或更少的初始键值对创建不...
  • Java 的 16 进制与字符串的相互转换函数 JAVA 时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 用Hibernate 实现分页 35 选 7 彩票程序 获取 GMT8 时间 中文乱码转换 小标签 Big5 字与 ...
  • 工厂方法模式( FactoryMethod ):定义一个用于创建对象的接口 IFactory,在具体的ConcreteFactory子类中根据传进的参数即具体子类ConcreteProduct决定实例化哪一个IProduct产品,该模式使得一个类(即IProduct)的实例...
  • tem 1:考虑静态工厂方法而不是构造函数您已经通过在工厂方法后面隐藏构造函数来实现这一点了,因此不需要在这里添加另一个工厂方法。所以你可以用一个工厂界面和一个地图来完成。(基本上每个人都已经说过了,但有区别...
  • 该书建议使用静态工厂方法而不是构造函数。所以我有这样的Groovy代码:public class Anto {public static void main(String[] args) {println Java.javaInstance()}}class Java {public static Java javaInstance() ...
  • Java静态工厂方法

    2021-12-07 16:03:59
    序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 2.2 第二个优势,不用每次被调用时都创建新对象 2.3 第三个优势,可以返回原返回类型的子类 2.4 第四...
  • Spring的实例工厂方法和静态工厂方法都可以用来实例化bean,本文我们就来看看相关实例。静态工厂方法:直接调用静态方法可以返回Bean的实例package com.zhu.string.factory;import java.util.HashMap;import java....
  • 所以我们使用一个静态工厂方法getDbConnection,如果我们低于限制创建一个连接。否则,它会尝试提供一个“备用”连接,如果没有则会出现异常。public class DbConnection{private static final int MAX_CONNS = 100;...
  • Java静态工厂模式和抽象工厂模式1、静态工厂模式1.1、优缺点1.2、实现案例1.2.1、抽象类1.2.2、实现类1.2.3、静态工厂类1.2.4、测试类2、抽象工厂模式2.1、适用场景2.2、案例介绍2.2.1、抽象类2.2.2、实现类2.2.3...
  • 使用PowerMock可以模拟静态方法.请考虑以下来自Wiki page的示例:@Testpublic void testRegisterService() throws Exception {long expectedId = 42;// We create a new instance of test class under test as ...
  • 1:构造器不同的第一优势在于,它们有名字,更容易知道想要表达的是啥,比如代理模式中生成代理类就是用的静态工厂方法Proxy.newProxyInstance 2:不用每次被调用时都创建新对象,减少内存开销,单例的写法也大都...
  • 本文实例讲述了Java设计模式之静态工厂模式。分享给大家供大家参考,具体如下:静态工厂模式(static factory)也叫简单工厂模式。涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角色。抽象产品类可以使用...
  • 1 用静态工厂方法替代构造器 主要内容:讲述静态工厂方法与构造器方法的优劣 主要目标:在实际开发的时候,优先考虑静态工厂方法,然后考虑有条件的构造器方法,最后才是最简单的构造器方法 实际应用场景:工厂模式...
  • Java 静态工厂方法详解 什么是静态工厂?: 在实际的开发中,我们经常会见到一种获取类实例的方法 Fragment fragment = MyFragment.newIntance(); // or Calendar calendar = Calendar.getInstance(); // or ...
  • Java工厂方法

    2021-03-05 15:56:47
    普通工厂模式:第一步:定义接口,坚持面向接口编程,package dp;public interface Sender{public void send();}第二步:实现接口:package dp;public class MailSender implements Sender{public void send(){...
  • Java8中,你可以为接口添加静态方法。从技术角度来说,这是完全合法的。只是它看起来违反了接口作为一个抽象...以Paths类为例,它只有一些工厂方法。你可以通过一组字符串来构造一个路径,例如Paths.get("jdk1.8....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,184
精华内容 52,473
关键字:

java静态工厂方法

java 订阅