创建对象时, 应该优先选用静态工厂方法,其具有以下几个优势:
1. 静态工厂方法与构造器不同之一在于静态工厂方法有名字。
2. 静态工厂方法与工早起不同之二在于静态工厂方法不必在每次调用他的时候都创建一个新的对象。
3. 静态工厂方法与工早起不同之三在于静态工厂方法可以返回该类的任何子类对象。
interface Service {
// specify methods go here
}
interface Provider {
Service newService();
}
public class Services {
private Services() {
}
private static final Map<String, Provider> providers = new ConcurrentHashMap<String, Provider>();
public static final String DEFAULT_PROVIDER_NAME = "<def>";
public static void registerDefaultProvider(Provider p) {
registerProvider(DEFAULT_PROVIDER_NAME, p);
}
public static void registerProvider(String name, Provider p) {
providers.put(name, p);
}
public static Service newInstance() {
return newInstance(DEFAULT_PROVIDER_NAME);
}
public static Service newInstance(String name) {
Provider p = providers.get(name);
if (p == null) {
throw new IllegalArgumentException(
"No provider registered with name: " + name);
}
return p.newService();
}
}
4. 静态工厂方法与工早起不同之四在于创建参数化类型实例的时候, 他们使代码变得更加简洁。
class MyHashMap<K,V>{
public static <K,V> HashMap<K,V> newInstance(){
return new HashMap<K,V>();
}
public static void main(String[] args){
Map<String, List<String>> m = MyHashMap.newInstance();
}
}
静态工厂方法缺点1.类如果不含共有的或者受保护的构造器,就不能被子类化。
2. 它们与其他的静态方法实际上没有任何区别。
总结: 因为我的编码经验不是很多, 个人认为静态构造方法应该用在比较常用的工具类里面,过多的使用静态工厂方法会造成内存泄露问题,详见JDBC驱动注册的源码。请指正。
分享到:
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
以上只是《Effective Java》笔记中可能包含的部分关键知识点,实际笔记会更详细地探讨每个主题,并给出具体的代码示例和实践建议。通过深入学习这些内容,开发者可以提升自己的Java编程技艺,编写出更加高效、可维护...
总结来说,静态工厂方法在Java中提供了一种比构造方法更加灵活和高效的方式来创建对象实例,特别是在需要实例控制、性能优化或API设计简洁时。文档《effective-java.pdf》详细地探讨了静态工厂方法在设计和实现上的...
### 第二章 创建和销毁对象 这一章深入探讨了对象的生命周期管理,包括: 1. **静态工厂方法**:相比构造器,静态工厂方法有优点如可以不返回新实例、允许返回同一实例(单例)、可以有更具选择性的访问控制,并且...
在 Java 中,创建和销毁对象是非常重要的。静态工厂方法可以代替构造器,提供了更多的灵活性和性能优势。静态工厂方法可以返回原类型的任何子类型,且可以将构建好的实例缓存起来,方便重复利用,不用每次调用都创建...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
《Effective Enterprise Java》是一本由James Gosling、Bill Venners和Cay S. Horstmann合著的经典著作,旨在帮助Java开发者深入理解和利用企业级Java技术。这本书提供了78条具体的建议,涵盖了从设计模式到并发编程...
整体而言,Finix的精版《Effective STL》读书笔记覆盖了STL的关键知识点,包括各种容器的特性、迭代器的使用、以及如何高效地操作和管理容器。这对于任何想要深入了解并有效应用STL的C++程序员来说,都是宝贵的资源...
4. **可变与不可变对象(Mutable vs Immutable Objects)**: 通过示例代码展示了如何创建不可变对象,以及不可变对象的益处和实现策略。 5. **泛型(Generics)**: 书中深入讲解了Java泛型的用法,包括类型擦除、...
《Effective Enterprise Java》、《Ant权威指南》以及《Sleepless in Java》这三本书涵盖了广泛的Java开发和企业级应用实践的知识。以下是对这些书籍主要内容的详细解析: 《Effective Enterprise Java》是一本关于...
《Effective C++》是一本由Scott Meyers所著的关于C++编程的书籍,该书广泛被认为是对C++程序员提高编程水平和解决实际问题提供了极好的指导。从给出的部分内容来看,读书笔记主要聚焦于以下几个知识点: 1. C++...
记录了我的effective-Python学习笔记,精简了effective-Python中重要的部分。effective-Python是一本值得多看几遍的书,但是看后面的几遍的时候完全可以直接看自己的学习笔记。此学习笔记侧重与比较实用的部分即前四...
在编程领域,特别是Java开发中,"Effective Java"是一本非常经典的书籍,由Joshua Bloch撰写,书中提出了一系列最佳实践和设计原则,以帮助开发者编写出更高效、更安全的代码。根据提供的标题和描述,我们将探讨三个...
构建高效的Java企业级系统是项困难的工作。本书详细介绍企业级计算技术中的常见问题,并描述使用企业级Java平台技术处理这些问题的方法。本书以若干条建议、揸南的形式,言简意赅地介绍了J2EE开发中的微妙之处。无论...
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...