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...
    }
  • 相关阅读:
    iOS:解决打包可能会出现环境错误问题
    iOS:关于self.perfrom(:_, with: afterDelay: )不执行问题
    docker容器中安装vi命令
    java-1 基础一
    java-0 重拾java
    柯里化函数的实现
    flex布局最后一行列表左对齐的N种方法
    【第一弹】微服务认证与授权企业级理解
    MySQL性能优化(慢查询日志、Explain执行计划、show profile、MySQL服务优化)
    MySQL锁详解
  • 原文地址:https://www.cnblogs.com/sei-cxt/p/8718763.html
Copyright © 2011-2022 走看看