首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

静态工厂方法的现实用例?

静态工厂方法是一种创建对象的设计模式,它通过在类中定义一个静态方法来创建对象,而不是通过直接调用构造函数。静态工厂方法可以根据传入的参数来决定返回的对象类型,从而提供更灵活的对象创建方式。

现实生活中,静态工厂方法有很多实际应用场景,以下是一些常见的例子:

  1. 日志记录器:在软件开发中,我们经常需要记录日志信息。通过使用静态工厂方法,可以根据不同的参数配置返回不同类型的日志记录器,如文件日志记录器、数据库日志记录器等。这样可以方便地切换和扩展日志记录方式。
  2. 数据库连接:在开发数据库相关应用时,我们需要获取数据库连接对象。通过使用静态工厂方法,可以根据不同的参数配置返回不同类型的数据库连接对象,如MySQL连接、Oracle连接等。这样可以方便地切换和管理数据库连接。
  3. 缓存管理器:在应用中使用缓存可以提高性能。通过使用静态工厂方法,可以根据不同的参数配置返回不同类型的缓存管理器,如内存缓存、Redis缓存等。这样可以方便地切换和管理缓存方式。
  4. 消息队列:在分布式系统中,消息队列被广泛应用于解耦和异步处理。通过使用静态工厂方法,可以根据不同的参数配置返回不同类型的消息队列对象,如Kafka、RabbitMQ等。这样可以方便地切换和管理消息队列。

腾讯云相关产品推荐:

以上是静态工厂方法的一些现实用例和相关腾讯云产品推荐。静态工厂方法可以根据具体需求灵活创建对象,提供了一种简洁、可扩展的对象创建方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

js单_简单工厂模式是静态工厂模式

目录 工厂模式 单模式 策略模式 适配器模式 观察者模式 工厂模式 工厂模式原理 作用: 就是你只要传你需要类进去,你就能得到他实例化对象 其实工厂就是帮你实例化你所需要类 area(); 单模式 单模式原理 作用: 当你实例化多次类时候,让其只存在在唯一内存空间中,减少资源消耗 普通类实例化,一个 new 将会创建一个实例化内存空间,因为空间不同,...($a); // object(A)#1 (0) {} var_dump($b); // object(A)#2 (0) {} 单模式定义 单模式入门口诀是:三私一公 私有的构造方法: 防止人为外部使用...new 进行创建这就是上面普通内实例化了 私有的克隆方法: 防止人为外部使用 clone 方法后进行实例化 私有的静态属性: 用来存储单一实例化对象 公有的静态方法: 用来实现单一实例化逻辑 从结果来看...情景: 一个用户去某酒店网站定住宿为,页面上根据你历史消费记录,会为你显示高等住宿和丰富晚餐,或者仅仅显示大众住宿和廉价自助餐 我们先定义接口去实现住房和晚餐方法 然后定义两个群里类去实现这个接口

68510

静态工厂方法

当然这只是抛砖引玉,只阐述了静态工厂方法一个优点,看过《高效java》读者都知道开篇就是说“ 1、考虑使用静态工厂方法替代构造方法 ” (滑稽一下:用大字表示对文章引用),同时也阐述了具体优点...除了这常规优势,总结自己在工作中以及学习过程中吸取他人习惯发现:使用静态工厂方法能够增强作者对当前类控制力。...其实静态工厂方法也不是什么神秘技术,它更多地是一种思想,一种模式,一种治理手段,像是Integer.valueOf(1),String.valueOf(),都是静态工厂方法典型案例,深刻理解并将其运用到实际项目中去...借用《Effective Java》中的话: 简而言之,静态工厂方法和公有构造器都各有用处,我们需要理解它们各自长处 静态工厂经常更 合适,因 切忌第一反应就是提供公有的构造器, 不先考虑静态工厂 这样我们离架构师又近了一步...附录:针对java中有关静态工厂方法一些通俗约定 1、from一一类型转换方法,它只有单个参数,返回该类型一个相对应实例, 2、of 聚合方法,带有多个参数,返回该类型一个实例,把它们合并起来,

52420
  • Spring - 静态工厂方法、实例工厂方法创建Bean(6)

    通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建过程封装到静态方法中,当客户端需要对象时,只需要简单地调用静态方法,而不同关心创建对象细节 要声明通过静态方法创建Bean,...需要在Beanclass属性里指定拥有该工厂方法类,同时在factory-method属性里指定工厂方法名称,最后,使用元素为该方法传递方法参数 // Car public...-- 通过静态工厂方法来配置bean。注意不是配置静态工厂方法实例,而是配置bean实例--> <!...实例工厂方法:将对象创建过程封装到另外一个对象实例方法里,当客户端需要请求对象时,只需要简单调用该实例方法而不需要关心对象创建细节 // StaticCarFactory public class

    1.1K10

    设计模式之静态工厂工厂方法和抽象工厂联系与区别

    静态工厂增加需要是修改源代码,对修改不封闭,不符合开闭原则。...---- Simple Factory 简单工厂模式(静态工厂) 1)Simple Factory模式属于创建型模式 2)简单工厂模式是由一个工厂(注意是一个!)...---- 工厂方法模式 UML类图如下: ? 这个和简单工厂有区别,简单工厂模式只有一个工厂工厂方法模式对每一个产品都有相应工厂。...好处:增加一个运算类(例如N次方类),只需要增加运算类和相对应工厂,两个类,不需要修改工厂类。 缺点:增加运算类,会修改客户端代码,工厂方法只是把简单工厂内部逻辑判断移到了客户端进行。...② 工厂方法模式具体工厂类只能创建一个具体产品类实例,而抽象工厂模式可以创建多个。 ----

    1.5K20

    模式与静态方法_静态内部类单模式原理

    大家好,又见面了,我是你们朋友全栈君。 本文主要介绍java模式,以及详细剖析静态内部类之所以能够实现单原理。OK,废话不多说,进入正文。...首先我们要先了解下单四大原则: 1.构造私有。 2.以静态方法或者枚举返回实例。 3.确保实例只有一个,尤其是多线程环境。 4.确保反序列换时不会重新构建对象。...修饰、已在编译期把结果放入常量池除外)、调用一个类静态方法时。...,在实际应用中,这种阻塞往往是很隐蔽。 故而,可以看出INSTANCE在创建过程中是线程安全,所以说静态内部类形式可保证线程安全,也能保证单唯一性,同时也延迟了单实例化。...其实不然,静态内部类也有着一个致命缺点,就是传参问题,由于是静态内部类形式去创建单,故外部无法传递参数进去,例如Context这种参数,所以,我们创建单时,可以在静态内部类与DCL模式里自己斟酌

    49410

    考虑用静态工厂方法代替构造器

    于是从网上看了一些关于静态工厂方法资料,下面来分享一下。 首先来看一下什么是静态工厂方法: 在 Java 中,获得一个类实例最简单方法就是使用 new 关键字,通过构造函数来实现对象创建。...不通过 new,而是用一个静态方法来对外提供自身实例方法,即为我们所说静态工厂方法(Static factory method)。...Effective Java中静态工厂方法特点: 1.静态工厂方法与构造器不同第一大优势在于,他们有名称。...这个很容易理解了,有时候外部调用者只需要拿到一个实例,而不关心是否是新实例;又或者我们想对外提供一个单时 —— 如果使用工厂方法,就可以很容易在内部控制,防止创建不必要对象,减少开销。...实际场景中,单写法也大都是用静态工厂方法来实现。 3.静态工厂方法与构造器不同第三大优势在于,他们可以返回原类型任何子类型对象。

    62430

    考虑使用静态工厂方法替代构造方法

    类可以为其客户端提供静态工厂方法,而不是公共构造方法。提供静态工厂方法而不是公共构造方法有优点也有缺点。 静态工厂方法一个优点是,不像构造方法,它们是有名字。...这样做类被称为实例控制( instance-controlled)。编写实例控制类原因有很多。实例控制允许一个类来保证它是一个单 (3) 项或不可实例化 (条目 4)。...例如,Java 集合框架有 45 个接口实用工具实现,提供不可修改集合、同步集合等等。...Javadoc 工具可能有一天会引起对静态工厂方法注意。与此同时,可以通过将注意力吸引到类或接口文档中静态工厂以及遵守通用命名约定来减少这个问题。下面是一些静态工厂方法常用名称。...通常,静态工厂更可取,因此避免在没有考虑静态工厂情况下提供公共构造方法

    68730

    Effective Java--第1条静态工厂方法代替构造方法

    为什么要用静态工厂方法代替构造方法??? 静态方法有名称。构造器名和类名一致,静态方法名可以自己定义,例如,BigInteger.probalePrime,可读性强....静态方法, 不必每次调用他时候都新建一个对象。这也是为啥推荐使用Boolean.valueOf(),不推荐new 静态方法有返回值,可以返回原返回类型任何子类对象,有更大灵活性。...IllegalArgumentException("No provider registered with name: " + name); } return p.newService(); } } 静态工厂方法代替构造器去创建对象...测试类: public class Test { /** * 静态工厂方法主要缺点,类如果不含公有的或者受保护构造器,就不能子类话。...* 静态工厂第二个缺点在于,他们与其他静态方法实际上没有其他区别。

    41720

    Python面向对象3:静态动态字段、静态动态方法、单模式

    () 执行结果: 案例3:静态字段与动态字段调用,在不用方法时调用时,最好是自己成员自已访问。...)#对访问,但最好不要使用 案例4:字段加载时间:静态字段在代码加载时,就已经创建完成,但动态字段只在调用方法时才创建 2、静态方法、动态方法、类方法 普通方法静态方法、类方法,都属于类,但调用方法不同...普通方法,就是在类中形如def 方法(self,参数1,参数2)方法,对象是用来封装数据,普通方法就是为了去对象中取数据。...() 执行结果: 案例2:应用类方法,创造单模式。...单模式是设计模式中一种。 单模式:指创建唯一对象,单模式设计类只能实例 实例化1个对象。

    1.2K80

    Java二十三种设计模式(单模式、工厂方法模式、抽象工厂模式)

    到这儿,单模式基本已经讲完了,结尾处,笔者突然想到另一个问题,就是采用类静态方法,实现单模式效果,也是可行,此处二者有什么不同? 首先,静态类不能实现接口。...(从类角度说是可以,但是那样就破坏了静态了。因为接口中不允许有static修饰方法,所以即使实现了也是非静态) 其次,单可以被延迟初始化,静态类一般在第一次加载是初始化。...再次,单类可以被继承,他方法可以被覆写。但是静态类内部方法都是static,无法被覆写。...3、静态工厂方法模式,将上面的多个工厂方法模式里方法置为静态,不需要创建实例,直接调用即可。...在以上三种模式中,第一种如果传入字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

    36230

    抽象工厂方法工厂方法区别

    假如我们现在有一个功能,使用Sqlserver保存User数据,单一方式比较简单,可以封装并在方法里实现与Sqlserver连接,但是我们现在又增加了Access 同样保存User数据,通过封装类方法不能满足需要了...,这个时候可以通过工厂方法来实现,如下图所示,创建IUser接口Sqlserver和Access分别去实现,并创建工厂接口类,Sqlserver和Access实现工厂类 每个实现类职责都是单一,实现单一对象...这种方式就是工厂方法。 ?...这个时候,我们不仅要要保存User数据,还要保存Department数据,此时,这个时候需要利用到抽象工厂方法,抽象工厂方法工厂类里会实现不同对象,这是工厂方法不同地方,工厂方法实现是单一对象...在抽象工厂方法里不仅要实现createUser也要实现createDepartment,这就是抽象工厂方法 ?

    52520

    Effective.Java 读书笔记(1)静态工厂和构造方法

    那么工厂方法拥有自己名字,静态工厂方法就没有我们前面所说限制了 所以,当有需要多种构造方法时候,去创建静态工厂方法,然后用特殊名字来区分它们是一种更加优策略 第二个优点是,当这些静态工厂方法被使用时候...,可以对这些你所需要实例有着严格控制,不会造成资源浪费等问题,这被称为“实例控制”,这样实例控制使得一个类可以是单模式(Singleton)或者 非实例化模式(noninstantiable),...),这里接口提供了静态工厂方法自然返回类型,接口是不能有静态方法,故Type接口静态方法被放在一个非实例化模式(noninstantiable)类里面,叫做Types 举个例子,Java里面的Collections...使用这样静态工厂方法呢使得用户利用接口而不是实现化类来引用返回对象 当然,使用静态工厂方法不仅仅能够使得返回类是非public,还能根据静态工厂参数不同来使调用不同,任意声明了返回类型子类型类是被允许...第二个缺点是,静态工厂方法不容易和其他静态方法区分,它们并没有在API文档中如同构造器一样,所以可能去解决怎样去初始化一个提供静态工厂方法而不是构造器时候会有点困难,javadoc工具可能有一天可以关注一下这些静态工厂方法

    36920

    简单工厂工厂方法、抽象工厂比较与分析

    比较: 简单工厂:定义一个工厂类,根据应用端传入不同参数创建不同业务实例。也可以理解为统一静态方法工厂,该工厂类负责所有不同业务类型封装。...工厂方法:将简单工厂进行优化,定义多种业务类,并定义每种业务相对应工厂类,即不同工厂类各自封装对应业务,由应用端按需创建工厂及调用工厂封装业务方法。...抽象工厂:将工厂方法进行抽象及优化,定义多种业务类,定义多个工厂类,工厂类可以封装多种业务类型,由应用端按需创建工厂及调用工厂封装多种不同业务类型。 代码分析: 简单工厂代码 ?...PhoneFactory(); Phone phone1=phoneFactory.getPhone("huawei"); phone1.produce(); } } 工厂方法代码...PhoneFactory phoneFactory1 = new HuaweiPhoneFactory(); phoneFactory1.getPhone().produce(); } } 抽象工厂代码

    50920

    Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器

    但还有一种技术,一个类可以提供public静态工厂方法,只是一个返回类实例静态方法静态工厂方法与设计模式工厂方法模式不同。在设计模式中并无直接等价说法。...静态工厂方法在重复调用下返回相同对象,这样类能严格控制存在实例。这样类称为实例受控类。编写实例受控类有几个原因。 允许一个类来保证它是一个单或不可实例化。...这适用于基于接口框架,其中接口为静态工厂方法提供了自然返回类型。 Java 8 前,接口不能有静态方法。...例如,Java Collections 框架有 45 个接口实用工具实现,提供了不可修改集合、同步集合等。...通过在类或接口文档中多关注静态工厂方法,遵守通用命名约定方式来减少这个困扰。 下面是一些静态工厂方法习惯命名。

    55320

    静态类、静态方法静态变量区别

    引言 一直疑惑静态类、静态方法静态变量内存驻用情况。今天就写了个Demo来深入八一八他们区别和注意点。...为了演示方便,方法名和变量名采取中文命名 先上结论 静态变量 只在类初始化时加载一次 静态方法静态方法语法糖 实时加载里面的内容 只读属性 实时加载里面的内容 附有初始值属性语法糖 只在类初始化时加载一次...(应该是set里面处理,而不是get里面处理静态有参方法 实时加载里面的内容 无图我还说什么?....标准属性=111 TestCommonService.静态有参方法(true)=true:111 TestCommonService.静态有参方法(false)=false:111 ---------....静态方法()=222 TestStaticService.静态方法语法糖=>()=222 TestStaticService.只读属性=222 TestStaticService.属性语法糖=111

    1.6K10

    抽象工厂模式——工厂方法大结局

    回顾之前设计模式,简单工厂模式所有逻辑都封装在工厂类中,工厂根据客户提供产品名字创建对应产品对象实例;工厂方法模式将产品创建过程放到了具体工厂类中,每一个工厂可以创建一个具体产品,由此可能会创建许多工厂类...简言之,一个工厂可以提供创建多种相关产品接口,而无需像工厂方法一样,为每一个产品都提供一个具体工厂。...02 抽象工厂模式结构 抽象工厂模式结构与工厂方法模式结构类似,不同之处在于,一个具体工厂可以生产多种同类相关产品: 抽象工厂(AbstractFactory):所有生产具体产品工厂基类,提供工厂公共方法...; 具体工厂(ConcreteFactory):生产具体产品 抽象产品(AbstractProduct):所有产品基类,提供产品类公共方法 具体产品(ConcreteProduct):具体产品类...由此,Jungle总结了抽象工厂模式特点: 优点: 工厂方法用于创建客户所需产品,同时向客户隐藏某个具体产品类将被实例化细节,用户只需关心所需产品对应工厂; 新加入产品系列时,无需修改原有系统,增强了系统可扩展性

    52220

    类中静态静态方法

    C#类中可以包含两种方法静态方法和非静态方法。   使用了static 修饰符方法静态方法,反之荝是非静态方法。   ...静态方琺是①種 特殊成園方琺,它不属纡类某一个具体实唎,而是属于类本裑。葰以对静态方法不需要首先创建一个类哋实例,而是采用类名.静态方法格式 。   ...洏且static方法中还不能使用this....等关键字..因为它湜属于整个类!   2.静态方法效率上要比实例化高,静态方法缺点是不洎动进垳销毁,洏实例化则可以做销毁。   ...3.静态方法静态变糧创建后始终使用哃一赽内存,而使用實方式会创建多个内存.   4.C#中哋方法有两种:实例方法,靜态方法.   ...类方法笩码只有一份,它们生命周期和类是一致哋.实例方法是通过对象名调用,静态方法与类关联而不是与对象名关联.   5.哪么在程序狆什么地方可以利用静态字段和静态构造方法,通常适用于于一些不会经常变化而又频繁使用数据

    1.5K20
    领券