`
- 浏览:
6671641 次
- 性别:
- 来自:
武汉
-
几大优势:
静态工厂方法与构造器不同的第一大优势在于,他们有名称。
静态工厂方法与构造器不同的第二大优势在于,不必在每次调用他们的时候都创建一个新对象。
静态工厂方法与构造器不同的第三大优势在于,他们可以返回原返回类型的任何子类型的对象。
demo:
-
-
-
publicinterfaceService
{
-
-
}
-
-
-
publicinterfaceProvider
{
-
Service
newService();
-
}
-
-
-
-
-
importjava.util.*;
-
importjava.util.concurrent.*;
-
-
publicclassServices
{
-
privateServices()
{ }
-
-
-
privatestaticfinalMap<String,
Provider> providers =
-
newConcurrentHashMap<String,
Provider>();
-
publicstaticfinalString
DEFAULT_PROVIDER_NAME ="<def>";
-
-
-
publicstaticvoidregisterDefaultProvider(Provider
p) {
-
registerProvider(DEFAULT_PROVIDER_NAME,
p);
-
}
-
publicstaticvoidregisterProvider(String
name, Provider p){
-
providers.put(name,
p);
-
}
-
-
-
publicstaticService
newInstance() {
-
returnnewInstance(DEFAULT_PROVIDER_NAME);
-
}
-
publicstaticService
newInstance(String name) {
-
Provider
p = providers.get(name);
-
if(p
==null)
-
thrownewIllegalArgumentException(
-
"No
provider registered with name: "+
name);
-
returnp.newService();
-
}
-
}
-
-
-
publicclassTest
{
-
publicstaticvoidmain(String[]
args) {
-
-
Services.registerDefaultProvider(DEFAULT_PROVIDER);
-
Services.registerProvider("comp",COMP_PROVIDER);
-
Services.registerProvider("armed",
ARMED_PROVIDER);
-
-
-
Service
s1 = Services.newInstance();
-
Service
s2 = Services.newInstance("comp");
-
Service
s3 = Services.newInstance("armed");
-
System.out.printf("%s,
%s, %s%n",
s1, s2, s3);
-
}
-
-
privatestaticProvider
DEFAULT_PROVIDER =newProvider()
{
-
publicService
newService() {
-
returnnewService()
{
-
@OverridepublicString
toString() {
-
return"Default
service";
-
}
-
};
-
}
-
};
-
-
privatestaticProvider
COMP_PROVIDER =newProvider()
{
-
publicService
newService() {
-
returnnewService()
{
-
@OverridepublicString
toString() {
-
return"Complementary
service";
-
}
-
};
-
}
-
};
-
-
privatestaticProvider
ARMED_PROVIDER =newProvider()
{
-
publicService
newService() {
-
returnnewService()
{
-
@OverridepublicString
toString() {
-
return"Armed
service";
-
}
-
};
-
}
-
};
-
}
-
静态工厂方法与构造器不同的第四大优势在于,在创建参数化类型实例的时候,他们使代码变得更加简洁。
静态工厂方法的主要缺点在于,类如果不含公有的或者受保护的构造器,就不能被子类化。
静态工厂方法的第二个缺点在于,他们与其他的静态方法实际上没有任何区别。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本文目录一、什么是静态工厂方法?二、静态工厂方法的优势三、静态工厂方法的缺点四、总结 一、什么是静态工厂方法? 对于类而言,在我们需要获取一个实例时,最传统的方法都是通过new新建一个对象,这是jvm通过调用...
声明的返回类型的任何子类都是允许的。返回对象的类也可以随每次发布而不同。EnumSet 类(详见第 36 条)没有公共构造方法,只有静态工厂。在 OpenJDK
声明的返回类型的任何子类都是允许的。返回对象的类也可以随每次发布而不同。EnumSet 类(详见第 36 条)没有公共构造方法,只有静态工厂。在 OpenJDK
主要介绍了java用静态工厂代替构造函数使用方法和优缺点,需要的朋友可以参考下
理解构造器--构造器和方法的区别 要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。 我们说构造器是一种方法,就象讲澳大利亚的...
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
告诉你:static就是在类被第一次加载的时候执行,以后就不再执行。 4.知道了static的作用,那么X类被加载,那么就会先执行X类的静态属性和静态语句块(static),执行先后顺序看谁在前面就先执行谁。只在此时执行...
java 构造器初始化成员变量 是否提供默认构造器 继承中构造器的调用
java 静态块实例块构造器调用在继承中的调用顺序,包括代码及注释
【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 ) https://hanshuliang.blog.csdn.net/article/details/113746569 博客源码快照
包括Class类的模板、new对象的内存分配方式、实例和静态。
构造器和方法的区别,欢迎与大家一起分享
2021中考数学分类练习:初中数学解题方法之一构造法之构造方程
c#面向对象静态类、构造方法、静态方法介绍,有功能介绍,详细的执行方法和过程,可以让新人对编程语言快速入门。熟悉应用变量、静态变量、方法、静态方法,读取、处理、写入等功能实现,实现举一反三。
主要介绍了C#的静态工厂方法与构造函数对比的优缺点,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
java构造方法是java类中最重要的一个概念,这篇文档涵盖了,java对象初始化过程中构造器调用的顺序,及作用。
3. 静态of 方法代替构造函数。 二、具体使用方法 1、方法引用 方法引用是一种函数式接口的另一种书写方式,其通过一对双冒号:: 来表示,分为以下三种: 静态方法引用,通过类名::静态方法名, 如 Integer::...
毕业论文:哈希函数的构造方法,仅供参考。毕业论文 哈希函数
NX10.0后处理构造器,覆盖安装目录下面的同名文件夹即可
Python构造器用法解析全文共7页...Python中的构造器由特殊方法`__init__`定义,它具有以下特点: -名称必须是`__init__` -第一个参数必须是`self` -不能有返回值 Python构造器用法解析全文共7页,当前为第2页。Python构