zoukankan      html  css  js  c++  java
  • 辛格尔顿2

    1、架构定义
    辛格尔顿(Singleton Pattern):Singleton模式保证一个类只有一个实例,和自我实例化整个系统的一个实例,并提供,这个类被称为单例类。它提供全球接入方式。


    单例模式的要点有三个:一是某个类仅仅能有一个实例。二是它必须自行创建这个实例。三是它必须自行向整个系统提供这个实例。

    单例模式是一种对象创建型模式。

    单例模式又名单件模式或单态模式。

    2、模式结构
    单例模式包括例如以下角色:
    Singleton:单例

    3、模式分析
    单例模式的目的是保证一个类仅有一个实例,并提供一个訪问它的全局訪问点。单例模式包括的角色仅仅有一个,就是单例类——Singleton。单例类拥有一个私有构造函数,确保用户无法通过newkeyword直接实例化它。

    除此之外,该模式中包括一个静态私有成员变量与静态公有的工厂方法,该工厂方法负责检验实例的存在性并实例化自己。然后存储在静态成员变量中。以确保仅仅有一个实例被创建。

    public class Singleton
    {
    private static Singleton instance=null;  //静态私有成员变量
    //私有构造函数
    private Singleton()
    {
    }

           //静态公有工厂方法,返回唯一实例
    public static Singleton getInstance()
    {
    if(instance==null)
       instance=new Singleton();
    return instance;
    }
    }


    在单例模式的实现过程中,须要注意例如以下三点:
    单例类的构造函数为私有。
    提供一个自身的静态私有成员变量;
    提供一个公有的静态工厂方法。

    4、模式优缺点
    单例模式的长处
    提供了对唯一实例的受控訪问。由于单例类封装了它的唯一实例,所以它能够严格控制客户如何以及何时訪问它,并为设计及开发团队提供了共享的概念。


    因为在系统内存中仅仅存在一个对象。因此能够节约系统资源,对于一些须要频繁创建和销毁的对象,单例模式无疑能够提高系统的性能。
    同意可变数目的实例。我们能够基于单例模式进行扩展,使用与单例控制相似的方法来获得指定个数的对象实例。

    单例模式的缺点
    因为单例模式中没有抽象层。因此单例类的扩展有非常大的困难。
    单例类的职责过重,在一定程度上违背了“单一职责原则”。由于单例类既充当了工厂角色,提供了工厂方法,同一时候又充当了产品角色。包括一些业务方法,将产品的创建和产品的本身的功能融合到一起。


    滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如今非常多面向对象语言(如Java、C#)的执行环境都提供了自己主动垃圾回收的技术。因此,假设实例化的对象长时间不被利用,系统会觉得它是垃圾。会自己主动销毁并回收资源,下次利用时又将又一次实例化,这将导致对象状态的丢失。


    5、模式适用环境
    在下面情况下能够使用单例模式:
    系统仅仅须要一个实例对象,如系统要求提供一个唯一的序列号生成器。或者须要考虑资源消耗太大而仅仅同意创建一个对象。
    客户调用类的单个实例仅仅同意使用一个公共訪问点,除了该公共訪问点。不能通过其它途径訪问该实例。
    在一个系统中要求一个类仅仅有一个实例时才应当使用单例模式。反过来,假设一有一类的几个实例可以共存,对需要改进的Singleton模式,使之更案例模式。

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    linux下文本处理
    JSON对象的序列化和反序列化
    大整数相加的js实现
    前端日志格式化
    对象deepcopy
    基于vue实现的小程序管理后台图文编辑器
    原型和原型链
    函数声明、函数表达式及函数立即执行
    网址
    判断日期是否相等
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4805082.html
Copyright © 2011-2022 走看看