zoukankan      html  css  js  c++  java
  • 【读书笔记

    实现Singleton(代表本质上唯一的系统组件)的三种方法:

    1. 保持私有构造器,导出公有的静态成员,客户端访问该类的唯一实例。

    2. 保持私有构造器,公有的成员是静态工厂方法。

    3. 单元素的枚举类型已经成为实现Singleton的最佳方法

    前两种方法有两点注意:

    1. 享有特权的客户端可以通过反射机制调用私有构造器。如果需要抵御这种攻击,可以修改构造器,让它在被要求创建第二个实例的时候抛出异常。

    2. 如果要使其变成可序列化的,需要:

    (1) implement Serializable;

    (2) 声明所有实例域是瞬时(transient)的;

    (3) 提供一个返回唯一实例instance的readResolve方法(因为每次反序列化一个序列化的实例时,都会创建一个新的实例)。

    示例1:公有域——性能没有优势,但是组成类的成员声明清楚表明这是一个单例类。公有静态域是final的,总是包含相同的对象引用。

    public class Elvis {
        public static final Elvis instance = new Elvis();
        private Elvis() { }
        // method...
    }

    示例2:静态工厂方法——提供了灵活性,改变是否是单例类。但是很容易被修改。

    public class Elvis {
        private static final Elvis instance = new Elvis();
        private Elvis() { }
        public static Elvis getInstance() {
            return instance;
        }
        // method...
    }

    示例3:单元素枚举——与公有域方法相近,但没有前面说的两个注意。无偿提供了序列化机制,绝对防止多次实例化。

    public enum Elvis {
        instance;
        // method...
    }
  • 相关阅读:
    java项目中文件含义
    关于反射技术
    Subversion Edge部署
    svn Edge访问规则配置
    redhat开启端口
    关于Ant脚本
    Maven
    版本控制工具
    Oracle了解(一)
    java 空格替换%20
  • 原文地址:https://www.cnblogs.com/sei-cxt/p/8718763.html
Copyright © 2011-2022 走看看