zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

    单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。

    作用(解决的问题):保证1个类只有1个对象,降低对象之间的耦合度

    优点:
    1、提供了对唯一实例的受控访问;
    2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象, 单例模式无疑可以提高系统的性能;
    3、可以根据实际情况需要,在单例模式的基础上扩展做出双例模式,多例模式;

     缺点:
    1、单例类的职责过重,里面的代码可能会过于复杂,在一定程度上违背了“单一职责原则”。
    2、如果实例化的对象长时间不被利用,会被系统认为是垃圾而被回收,这将导致对象状态的丢失。

    实现:

    饿汉式单例模式

     1 public class Singleton1
     2     {
     3         //饿汉式单例模式实现(无论系统在运行时是否需要使用该单例对象,由于在类加载时该对象就需要创建,因此从资源利用效率角度来讲,饿汉式单例不及懒汉式单例)
     4         private static Singleton1 mInstance = new Singleton1();
     5 
     6         private Singleton1()
     7         { }
     8 
     9         public static Singleton1 instance
    10         {
    11             get
    12             {
    13                 return mInstance;
    14             }
    15         }
    16     }

    懒汉式单例模式

     1 public class Singleton2
     2     {
     3         //懒汉式单例模式实现(在多线程的情况下有可能会出问题)
     4         private static Singleton2 mInstance = null;
     5 
     6         private Singleton2()
     7         { }
     8 
     9         public static Singleton2 instance
    10         {
    11             get
    12             {
    13                 if (mInstance == null)
    14                 {
    15                     mInstance = new Singleton2();
    16                 }
    17                 return mInstance;
    18             }
    19         }
    20     }
  • 相关阅读:
    洛谷P5661 公交换乘(二分)
    洛谷P4047 [JSOI2010]部落划分(最小生成树)
    洛谷P2872 [USACO07DEC]Building Roads S(最小生成树)
    卸载重装VirtualBox回滚报错
    POJ1151 Atlantis(扫描线+线段树+离散化)
    QT入门-信号槽拓展
    Vue模板语法与常用指令总结
    Vue 生命周期
    querySelector和getElementById方法的区别
    ES6 Class(类)的继承与常用方法
  • 原文地址:https://www.cnblogs.com/xiaoyulong/p/9420511.html
Copyright © 2011-2022 走看看