`
ifoggy
  • 浏览: 23338 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

创建和销毁对象:考虑使用静态方法代替构造方法

 
阅读更多

Item1:考虑使用静态方法代替构造方法

    通常客户端都是通过类的构造方法来获得一个类的实例,另外一种方式则是给该类添加一个静态的工厂方法(并非工厂模式),例如下面的方式:

public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}

这样的做法有优点也有弊端

    优点之一是静态方法可以有自己的方法名,从而让代码的可读性更好,也避免了重载的构造方法不便区分的缺点

    优点之二是利用静态的构造方法,可以避免每次调用都新建一个类的实例,这样可以实现immutable类的对象的复用。就像上面所示的Boolean.valueOf(boolean)方法,这点和享元模式(Flyweight )有类似之处。

    优点之三是静态方法可以返回一个类的子类的对象,这样可以充分利用Java的多态特性,对于基于抽象编程思想而言是非常有利的。

    优点之四是可以避免构造方法冗长的参数列表(美观?)。

静态方法代替构造方法有两个缺陷

    其一是没有public和protected构造方法的类,不能够有使用这样的方式。

    其二是静态工厂方法不容易和其它的静态方法做区分。

下面是静态工厂方法命名的一些建议:

    valueOf

    of

    getInstance

    newInstance

    getType

    newType

 

分享到:
评论

相关推荐

    Java高效编程指南.doc

    - **静态工厂方法**:使用静态工厂方法代替构造函数,因为它们可以拥有特定的名字,避免不必要的对象创建,且可以返回任何子类的对象,增加灵活性。 - **Singleton模式**:用于确保一个类只有一个实例,并提供一个...

    Effective-Java读书笔记(上)

    ##### 用静态工厂方法代替构造器 在面向对象编程中,对象的创建通常是通过构造器来完成的。然而,在某些情况下,使用静态工厂方法来创建对象可能会更加灵活和高效。 **静态工厂方法的优势**: 1. **命名清晰**:...

    java7hashmap源码-Effective-Java-3th:Effective-Java-3th

    考虑使用静态工厂方法代替构造方法 优点: 有名字 每次调用的时候,不一定要创建新的对象 可以返回一个类型的子类型 Collections就是这种用法 返回对象的类可以随调用的不同而变化(用输入的参数值决定返回哪个),如...

    C#与.NET3.5高级程序设计(中文版第4版)A

    - 构造函数和析构函数:创建和销毁对象的过程,以及何时使用默认和自定义构造函数。 - 访问修饰符:public、private、protected和internal的用法。 4. **第4章:C#核心编程结构Ⅱ** - 集合:介绍ArrayList、...

    Effective Java第三版1

    ### 第二章 创建和销毁对象 这一章深入探讨了对象的生命周期管理,包括: 1. **静态工厂方法**:相比构造器,静态工厂方法有优点如可以不返回新实例、允许返回同一实例(单例)、可以有更具选择性的访问控制,并且...

    《Effective Java》读书分享.pptx

    静态工厂方法可以代替构造器,提供了更多的灵活性和性能优势。静态工厂方法可以返回原类型的任何子类型,且可以将构建好的实例缓存起来,方便重复利用,不用每次调用都创建新对象,从而提高性能。 静态工厂方法的...

    非常实用的java代码优化详解

    - 避免无用的对象创建:频繁创建和销毁对象会增加垃圾收集的压力,考虑使用对象池或者重用已有的对象。 - 使用静态内部类:如果内部类不会引用到外部类的实例变量,可以声明为静态,减少内存占用。 - 尽量使用...

    java编码注意点

    3. **减少对象创建**:频繁地创建和销毁对象会消耗大量内存和CPU资源。尽量重用对象,避免在循环或高频调用的方法中创建新对象,特别是使用基本数据类型或数组代替对象。 4. **使用final修饰符**:final关键字可以...

    创建型设计模式(下)

    这种模式适用于那些需要频繁创建和销毁的对象,例如日志管理器、线程池、对话框、注册表设置等。 ##### 应用场景 以 Sunny 软件公司的服务器负载均衡软件为例,该软件的核心功能之一是确保负载均衡器的唯一性。在...

    iOS代替单例的方法

    这种方式可以结合使用工厂模式,确保在需要时创建和销毁对象。 6. **懒加载(Lazy Loading)** 如果一个对象只有在特定条件下才会被用到,可以使用懒加载技术。在首次使用时才创建对象,这可以避免在程序启动时...

    C语言面向对象库.zip

    这些函数通常在创建和销毁对象时调用。 6. 静态和动态绑定:C语言中的函数调用是静态绑定的,即在编译时确定。为了实现动态绑定,需要编写一些间接调用的机制,如函数指针数组或虚拟函数表。 "C语言面向对象库...

    C++优化方法C++有效使用内存

    6. **对象复用**:如果可能,复用已存在的对象而不是频繁创建和销毁。 三、编译器优化 1. **编译器开关**:开启编译器的优化选项,如GCC的-O2或-O3,可以让编译器对代码进行优化。 2. **内联函数**:内联函数能...

    怎样提高代码效率(Java).do

    重用对象可以减少对象的创建和销毁,提高性能。特别是在 String 对象的使用中,出现字符串连接情况时应用 StringBuffer 代替。这样可以减少对象的创建和销毁,提高性能。 3. 使用局部变量 使用局部变量可以提高...

    java性能优化借鉴

    - **实例管理**:对于那些频繁创建和销毁成本较高的对象,可以通过单例模式保持单一实例,提高系统的整体性能。 - **数据共享**:单例模式可以让不同线程或进程间共享同一份数据,简化通信过程。 #### 二、谨慎...

    Java性能优化

    频繁地创建和销毁对象会增加垃圾回收的压力,从而影响程序性能。可以通过以下方式减少对象创建: 1. **对象复用**:尽可能复用已有的对象而不是创建新的。 2. **使用基本数据类型或数组**:在适当的情况下使用基本...

    C++改善程序的一些方法

    27. **异常安全的资源分配**:使用异常安全的构造函数和析构函数,确保即使在异常发生时也能正确释放资源。 28. **理解编译器警告**:将警告视为错误,及时修复潜在的问题。 29. **使用`const`和`constexpr`进行...

    java基础优化编程

    通过对象池,可以避免频繁创建和销毁对象带来的性能开销,尤其是在高并发环境下效果显著。 #### 六、序列化优化 序列化大变量时,如果该变量在序列化后不再使用,可以使用`transient`关键字声明,避免序列化过程中...

    第六次作业1

    在`main` 函数中,我们看到如何创建和初始化类的对象。例如,`CPU cpu(P2, 1200, 100.0)` 就是使用参数调用构造函数创建了一个`CPU`对象。在实验三中,`CLIENT` 类也展示了如何通过成员初始化列表进行对象初始化。 ...

Global site tag (gtag.js) - Google Analytics