博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟刺猬哥一起学习设计模式【Singleton模式】
阅读量:4356 次
发布时间:2019-06-07

本文共 1493 字,大约阅读时间需要 4 分钟。

设计模式的分类

从目的来看:

创建型模式:负责对象创建

结构性模式:处理类与对象间的组合

行为型模式:类与对象交互中的职责分配

从范围来看:

类模式处理类与子类的静态关系

对象模式处理对象间的动态关系

动机

在软件系统中,经常有这样的一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性以及良好的效率。

如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例呢?其实这应该是类设计者的责任,而不是使用者的责任。

意图

保证一个类仅有一个实例,并提供一个该实例的全局访问点。  -----《设计模式》 Gof

单线程Singleton 模式实现

public class Singleton{      private static Singleton instance;      private Singleton() {}         public static Singleton Instance      {           get           {                if(instance == null)                {                      instance = new Singleton();                }                return instance;           }      }}

单线程Singleton模式有以下几个要点:

Singleton模式中的实例构造器可以设置为protected以允许子类派生。

Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与模式初衷违背。

Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,与初衷违背。

Singleton模式只考虑了对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,一般没有必要对其销毁进行特护的管理。

不能应对多线程环境,在多线程环境下,使用可能得到多个实例对象。

二、多线程下的Singleton模式

public class Singleton{        private static volatile Singleton _instance=null;        private static readonly object syslock = new object();          private Singleton() {}             public static Singleton Instance()        {            if (_instance == null)            {                lock (syslock)                {                    if (_instance == null)                    {                        _instance = new Singleton();                    }                }            }            return _instance;        } }

 

转载于:https://www.cnblogs.com/HedgehogBlog/p/5840013.html

你可能感兴趣的文章
playbook部署nginx
查看>>
一段有用的javascript加密解密
查看>>
[Source] 温柔的图片
查看>>
hexo+github搭建个人博客
查看>>
网络层
查看>>
3-----Docker实例-安装MySQL
查看>>
20172310 2017-2018-2 《程序设计与数据结构》第六周学习总结
查看>>
安卓学习第22课——seekBar
查看>>
iOS中的一些 第三方库 -
查看>>
2015/11/1用Python写游戏,pygame入门(1):pygame的安装
查看>>
123
查看>>
HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理...
查看>>
HDU 5308 规律+模拟
查看>>
json常用工具
查看>>
【Leetcode】120.Triangle
查看>>
Hibernate 检索策略
查看>>
HDU1875 畅通工程再续
查看>>
网络流之增广路算法
查看>>
Maven构建多模块项目
查看>>
我就是试试看,
查看>>