• 单例设计模式


    • 概念:

    单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

    优点:减少内存开支、减少系统性能开销、避免对资源的多重占用、全局的访问点,优化和共享资源访问。

    缺点:

    1. 单例模式一有接口,扩展困难,若要扩展,除了修改代码基本上没有第二种途径
    2. 单例模式对测试是不利的。
    3. 单例模式与单一职责原则有冲突
    • 应用场景:

      1. WEB站点的配置类(一般来讲全站只会有一个配置文件,或者只实例化一次configuration类)
      2. windows的Recycle Bin(回收站)
      3. Windows的Task Manager(任务管理器)
    • 实现方式:

    饿汉实现方式(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)

    关键点:(代码注释已写)

    1)私有构造函数

    2)静态私有成员--在类加载时已初始化

    3)公开访问点getInstance-----不需要同步,因为在类加载时已经初始化完毕,也不需要判断null,直接返回

    懒汉实现方式(类加载时不初始化)

    2种实现方式比较:

    1. 饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。
    2. 从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题,写法简单明了,能用则用。真正用到的时候才去建这个单例对象,“饿汉式”是在不管用不用得上,一开始就建立这个单例对象。
    • 单例模式的扩展:

    如果要求实现一个类只能产生两三个对象,应该怎么办?(具体方法见设计模式之禅)

    • 最佳实践:

    • 要考虑对象的复制情况(克隆):c#中对象默认是不可以复制的,如果实现了克隆接口,则可以直接通过对象创建一个新对象,对象实现复制是不用调用类的构造函数,因此即使是私有的构造函数,对象任然可以被复制。所以最好的方法是就单例不要实现克隆接口。
    • 注意垃圾回收机制:如果我们的单例在内存长久不用,可能会被运行时进行垃圾回收。这时对象的状态可能会出现问题,应用也会出现问题,有2种办法可以解决
      • 由容器管理单例的生命周期
      • 状态随时记录:使用数据库或者将状态写入文件。
  • 相关阅读:
    [kuangbin带你飞]专题二十一 概率&期望
    [kuangbin带你飞]专题二十 斜率DP
    POJ——3984迷宫问题(BFS+回溯)
    POJ——2251Dungeon Master(三维BFS)
    HDU——2647Reward(DFS或差分约束)
    HDU——4549M斐波那契数列(矩阵快速幂+快速幂+费马小定理)
    PAT天梯赛练习题——L3-008. 喊山(邻接表+BFS)
    Opencv学习笔记——视频高斯模糊并分别输出
    Opencv学习笔记——视频进度条的随动
    NYOJ——239月老的难题(二分图最大匹配)
  • 原文地址:https://www.cnblogs.com/gougou1981/p/12245707.html
Copyright © 2020-2023  润新知