首页 > 其他分享 >静态工厂和构造器区别

静态工厂和构造器区别

时间:2024-11-08 08:57:11浏览次数:3  
标签:name 静态 构造 id 工厂 public

public class Product {
    private int id;
    private String name;

    // 构造器
    public Product(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // 静态工厂方法
    public static Product createProduct(int id, String name) {
        // 这里可以添加一些额外的逻辑,例如缓存
        return new Product(id, name);
    }

    // Getter 和 Setter 方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Product{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

  

名称

  • 构造器:构造器通常与类名相同,并且每当创建类的新对象时都会被调用。
  • 静态工厂方法:静态工厂方法通常是类中的一个静态方法,可以任意命名。

可见性

  • 构造器:构造器可以是public或private,但通常是public。
  • 静态工厂方法:静态工厂方法可以是public、protected、private或默认的,提供了更多的灵活性。

返回类型

  • 构造器:构造器总是返回类的实例。
  • 静态工厂方法:静态工厂方法可以返回任何子类型的实例,这意味着可以返回类的不同实现,甚至可以返回非公开的类实例。

实例化过程

  • 构造器:每次调用构造器时都会创建一个新的对象。
  • 静态工厂方法:静态工厂方法可以缓存对象并返回已创建的对象,从而实现单例模式或享元模式。

参数

  • 构造器:构造器在创建对象时必须提供所有必需的参数。
  • 静态工厂方法:可以提供多个重载的静态工厂方法,每个方法都可以有不同的参数列表,从而可以返回不同配置的对象。

可读性

  • 构造器:构造器的参数列表必须完整地定义在调用时。
  • 静态工厂方法:静态工厂方法可以有更具描述性的名称,使得代码更加易于阅读和理解。

性能

  • 构造器:每次调用都会创建新对象。
  • 静态工厂方法:可以预先创建对象并在需要时返回,减少了对象创建的开销。

灵活性

  • 构造器:在类定义时就必须确定构造器的参数和逻辑。
  • 静态工厂方法:可以在不修改方法签名的情况下,改变返回对象的逻辑。

缺点

  • 构造器:通常需要更多的代码来处理不同的情况。
  • 静态工厂方法:类如果不包含任何public或protected的构造器,就不能被子类化。

标签:name,静态,构造,id,工厂,public
From: https://www.cnblogs.com/Gaze/p/18534406

相关文章

  • [题目总结 #1] 静态序列区间查询问题(未完)
    [题目总结#1]静态序列区间查询问题前言不久前遇到一批这种题,我发现自己思路很单一,只想着莫队、分块、线段树,但是其实可能有其他巧妙的做法,而且就算是用分块、线段树维护的东西也有我没想到的。总体来说,在这种题上,自己的思维太固化、自己太依赖思维惯性,又不熟悉各种套路。于是......
  • HTML静态页面进阶版
    目录1.文档的嵌入2.嵌入矢量图形上篇提到了制作一个静态网页基本的一些元素,而本文则会介绍更多的元素来完善你的页面!1.文档的嵌入在上篇文章中提到了如何用某些标签来进行图片、音频、视频的嵌入,但如果我们想在我们的页面中显示别人的页面或者自己的一个文档呢?这时候就......
  • Day31--构造器详解
    Day31--构造器详解使用new关键字创建对象。使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:必须和类的名字相同;\2.......
  • 构造函数原型对象语法、原型链、原型对象
    目录一、前言二、编程思想面向过程面向对象三、构造函数四、原型对象constructor属性对象原型原型继承原型链一、前言  通过本篇博客,我们将了解面向对象编程的一般特征,掌握基于构造函数原型对象的逻辑封装,掌握基于原型对象实现的继承,理解什么原型链及其作用......
  • P10161 [DTCPC 2024] 小方的疑惑 10 [构造 + 背包DP]
    P10161[DTCPC2024]小方的疑惑10Solution一开始看这题的时候,我们可能会觉得无从下手,这时不妨列出几种方案,计算它们的贡献,尝试得到一些启发。画来画去,发现无非就是并列和包含两种情况,并列就是()()()(),设它一共由\(x\)对括号组成,那么它的总贡献是\(x\times(x+1)\div......
  • 为什么前端打包出来的静态文件名字是一串 Hash 值 ?
    前端打包出来的静态文件名带有一串Hash值,主要是为了实现以下几个目的:缓存有效性:当文件内容发生变化时,Hash值也随之改变,这意味着浏览器能够识别文件的更新。如果文件内容没有变化,Hash值保持不变,浏览器可以从缓存中加载文件,节省网络带宽和提高加载速度。避免缓存问题:在......
  • 思科设备配置静态路由
    1.环境搭建2.基础配置 地址从左到右分别为192.168.1.0/24,192.168.2.0/24 ,192.168.3.0/24 ,192.168.4.0/24PC0路由器0路由器1路由2PC23.配置路由分析:静态路由每一跳都需要你手写,所以在路由器上0要配置去往192.168.3.0192.168.4.0的地址,环回口地址是单独......
  • 静态路由规则配置
    静态路由配置本质上通过配置虚拟机实现不同网段之间进行通信第一步:准备3台虚拟机第一台网卡配置NAT模式;第二台配置两个网卡,分别为配置NAT模式+LAN区段;第三台配置LAN区段第二步:配置网卡相关信息先查看宿主机(物理机)VMnet8网卡的IP和子网掩码配置网卡相关信息【具体的......
  • PHP常见设计模式应用:单例、工厂、观察者等
    在PHP的开发过程中,设计模式作为一种解决方案,能够帮助开发者简化代码结构、提高系统的可维护性和扩展性。常见的设计模式如单例模式、工厂模式和观察者模式,它们在不同的业务场景下各有其独特的应用价值。单例模式(SingletonPattern)是PHP开发中常用的设计模式之一。它确保一个类只......
  • 代码分析——构造huffman树(本质建立小根堆)
    (2023)n个不等长的非空表,n-1次两两合并合成一表,设计一种方案,使总比较次数T最小并求出T的值。如abc合并,a和b比较x次,ab和c比较y次,则T=x+y审题容易想到每次比较最小的两个表,再递增比较后面的,即使用哈夫曼树(HuffmanTree)的思想。哈夫曼树是一种最优二叉树,用于数据压缩和......