• Effective Java 1:创建和销毁对象-续


    第二条:遇到多个构造器参数时,要考虑用构建器

      静态工厂方法和构造器都不能很好的扩展到大量的可选参数,如果用构造函数,需要采用重叠构造器模式,缺点,当有很多参数时,客户端代码,很难调试,难以阅读,

      第二种代替方法是JavaBean模式,缺点:构造过程被分到几个调用中,在构造过程中JavaBean,可能处于不一致的状态,而且阻止了把类变成不可变得可能,

      第三种方法:Builder模式,能够保证像重叠构造器模式那样安全性,builder模式模拟了具名的可选参数,就像Ada和Python中的一样,

      总结:如果类的构造器或者静态工厂方法中具有多个参数,设计这种类时,BUilder模式是个很好的选择,特别是大多数参数是可选的

    第三条:用私有构造器或者枚举类型强化Singleton属性

      三种方法:(1). public static final ClassName instanceName=new ClassName();  (2). 前面是private类型,public static getInstance(){return instanceName;}  

           序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据

      为了利用其中一种方法实现singleton 类变成可序列化(Serializable),声明中加上implements Serializable ,必须声明所有实例域都是舜时(tranient),并提供一个readResolve()方法,

      控制序列化就是有选择的序列化对象,而不是把对象的所以内容都序列化,前篇我们的例子中介绍了transit变量和类变量(static)不被序列化,现在我们还有一种更为灵活的控制对象序列化和反序列方法,可以在序列化过程中储存其他非this对象包含的数据

      我们现在再来介绍一个接口 java.io.Externalizable 。当对象实现了这个接口时,就可以灵活的控制它的序列化和反序列过程,这个接口继承了java.io.Serializable

      Externalizable 接口定义了两个方法,writerExternal方法在序列化时被调用,可以再该方法中控制序列化内容,readExternal方法在反序列时被调用,可以在该方法中控制反序列的内容

      (3)只需要编写一个包含单个元素的枚举类型,

      Java的枚举类型实质上是功能齐全的类,因此可以有自己的属性和方法。

      Java枚举类型的基本思想是通过公有的静态final域为每个枚举常量导出实例的类。

      从某个角度讲,枚举是单例的泛型化,本质上是单元素的枚举。

      用枚举来实现单例非常简单,只需要编写一个包含单个元素的枚举类型即可。示例代码如下:

       public enum Evils{

          INSTANCE;

      }

      优点:更加简洁,无偿提供了序列化机制,绝对放在多次实例化,单元素枚举类型已经成为实现Singleton的最佳方法  

  • 相关阅读:
    过程作为黑箱抽象——《计算机程序的构造和解释》
    过程与它们所产生的计算——《计算机程序的构造和解释》
    重构手法(四)之在对象之间搬移特性
    重构手法(三)之简化条件表达式
    重构手法(二)之简化函数调用
    重构手法(一)之重新组织函数
    代码的坏味道
    泛型算法(二十三)之排列算法
    泛型算法(二十二)之集合操作算法
    泛型算法(二十一)之比较算法
  • 原文地址:https://www.cnblogs.com/csxf/p/3280026.html
Copyright © 2020-2023  润新知