辛格尔顿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模式,使之更案例模式。

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

时间: 2024-12-16 06:50:05

辛格尔顿2的相关文章

辛格尔顿和Android

辛格尔顿(Singleton) 一个.  什么是单例模式 单例模式.简单点来说就是设计一个类,使其在不论什么时候,最多仅仅有一个实例,并提供一个訪问这个实例的全局訪问点. 二.  为什么要单例 在程序中的非常多地方.仅仅有一个实例是非常重要的.比如,在windows中.任务管理器仅仅有一个.不管你点击多少次打开任务管理器,任务管理器也仅仅会生成一个窗体.再比如,在一些软件中,工具箱是唯一的,不管你点击多少次打开工具箱.工具箱也仅仅一个. 为什么要这样设计呢?由于像任务管理器或工具箱这种程序,仅仅

创建模式--辛格尔顿

 一个类仅有一个实例,并提供一个訪问它的全局訪问点. 适用场所: 当类仅仅能有一个实例并且适用者能够从一个訪问点訪问它时. 当这个唯一实例应该是通过子类化可扩展的.而且客户应该无需更改代码就能使用一个扩展的实例时. 类图:                                               代码描写叙述: <pre name="code" class="java">/** * 定义一个Instance操作,同意客户訪问它的唯一实例

Objective-C辛格尔顿

单例类是一种特殊的类.在一个进程种仅仅会存在一个该类的对象,在iOS应用中仅仅会出现一个对象.这样的设计模式在系统框架中很多地方都使用了.如NSFileManager.UIApplication等. 在ARC的环境下,接口文件为: // // DVISingleton.h // // Copyright (c) 2014 长沙戴维营教育. All rights reserved. // #import <Foundation/Foundation.h> @interface DVISingle

Swift辛格尔顿设计模式(SINGLETON)

本文已更新为2.0语法,具体查看:一叶单例模式 一.意图 保证一个类公有一个实例.并提供一个訪问它的全局訪问点. 二.使用场景 1.使用场景 当类仅仅能有一个实例并且客户能够从一个众所周知的訪问点訪问它时 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 2.实现的重要三个步骤 私有化构造方法(Swift不支持) 使用一个静态变量保存实例的引用 提供一个全局的訪问方法 三. Swift语言下的实现 Swift语言不支持变量及方法的权限,没有办法隐藏变量及

JAVA设计模式--辛格尔顿

Singleton模式可以作为一种编程技术,让我们先从理论上说代码 单例模式三个关键点: 1).某个类仅仅能有一个实例 2).该类必须自行创建这个实例 3).该类必须自行向整个系统提供这个实例 应用场景: 1).window的任务管理器就是非常典型的单例模式,你肯定不能同一时候打开两个任务管理器 2).数据库连接池技术一般採用的都是单例模式.由于数据库连接是一种数据库资源.系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的 效率损耗.这样的效率上的损耗还是很昂贵的,用单例模式来维护

Javascript 设计模式 辛格尔顿

转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/30490955 我一直很喜欢Js,,,今天写JsSingleton模式来实现,以及如何使用. 1.单身写 当简单: var singleTon = { m1: "memeber first ", m2: "memeber second ", f1: function () { console.log("fun1 "); } };

java线:辛格尔顿隐藏ThreadLocal实现线程数据共享

效果图分享: A和B需要共享同一线程,还有一组的相同A和B共享还有一组线程,两组相互之间不受影响. 代码: package cn.itcast.lesson6; import java.util.Random; public class ThreadLocalTest { public static void main(String[] args) { for(int i=0;i<2;i++){ new Thread(new Runnable() { public void run() { in

亮点面试题&amp;amp;&amp;amp;实现Singleton(辛格尔顿)模式-JAVA版本

称号:设计一个类.我们只能产生这个类的一个实例.(来自<剑指Offer>) 解析:仅仅能生产一个实例的类是实现Singleton(单例)模式的类型.因为设计模式在面向对象程序设计中起着举足轻重的作业,在面试过程中非常多公司都喜欢问一些与设计模式相关的问题. 在经常使用的模式中,Singleton是唯一一个可以用短短几十行代码完整实现的模式. 因此,写一个Singleton的类型是一个非经常见的面试题. 下面我们给出几种解法.供大家參考. *不好的解法一:仅仅适用于单线程环境. 因为要求仅仅能产

我学的是设计模式的视频教程——辛格尔顿,生成器VS工厂方法

课程视频 单例模式 建造者VS工厂方法 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博客原创文章,博客,未经同意,不得转载.