GOF设计模式一: 单实例模式 SingleTon
   整个美国,只有一个“现任美国总统”

   比如,在学校,“老师”,有数百个;“校长”,只有一个

   系统运行时,如何保证某个类只允许实例化一个对象?
2.1 类的多重性

   类的多重性 multiplicity

     在对软件系统进行逻辑设计时,在某些情形之下,可能需要限制类的实例 在软件系统中存在的数目   

   多重性的图形表示

      在类图上,类的多重性表达式被放置在类的图标的右上角

     如果类的多重性表达式在类图上被省略,那么此类的多重性缺省为n,即 对此类的可同时存在的对象的数目没有限制

2.2 类的实例化

   当类(class)不希望被实例化时

     不提供构造函数

     缺省的构造函数

     定义成抽象类

   要确保类不被实例化

     类包含显式的构造函数

     将构造函数声明为私有(private),在该类的外部就不可能访问,也就不能被实例化了 
     另外要注意的是,这种用法有点副作用,那就是它不能被子类化

       因为 superclass 不可访问
2.3 单实例模式 The Singleton Pattern
  Intent 目的
    You want to have only one of an object, but there is no global object that controls the instantiation of this object.

    You also want to ensure that all entities are using the same instance of this object,

    without passing a reference to all of them

    只希望有一个 对象,系统所有地方都可以用到这个对象,又不使用全局变量,也不需要传递对象的引用
  Problem 问题
    Several different client objects need to refer to the same thing, and you want to ensure that you do not have more than one of them

    几个不同的客户对象都希望引用同一 个对象,如何保证?

  Solution解决方案

    Guarantees one instance 确保单实例

  Participants and collaborators 参与方

    Clients create an instance of the Singleton solely through the getInstance method

  Consequences 结果

    Clients need not concern themselves whether an instance of the Singleton exists. This can be controlled from within the Singleton
  Implementation 实现
    • Add a private static member of the class that refers to the desired object (Initially, it is null)

    • Add a public static method that instantiates this class if this member is null (and sets this member's value) and then returns

      the value of this member

    • Set the constructor's status to protected or private so that no one can directly instantiate this class and bypass the static

      constructor mechanism
2.3单实例模式 解决方法: Java为例

  1、公有的成员函数,创 建并供客户获取该单实例
  2、私有的构造函数
  3、私有的静态成员变量
  4、该单实例唯一的 创建之处
2.4 单实例模式 结构

   单实例结构

     锁住某类的实例化功能。客户类只能使用某类自身实例化的唯一实例
2.5 单实例模式 小结

   单实例模式要点 There are two forces that affect the Singleton

     只能有一个实例 There must be exactly one instance of the class

     这个实例能够方便地被所有客户访问 The instance must be (easily) accessible to all potential clients

    解决方法 Solution (Check list)  定义私有的静态成员变量,保存单实例的引用 Define a private static attribute in the "single instance" class

     定义公有的Getter函数 Define a public static getter function in the class

     该类自己负责“第一次使用时”实例化对象 Do "lazy initialization" (creation on first use) in the getter function

       Class itself responsible for creating, maintaining, and providing global access to its own single instance

     定义私有的构造函数 Define all constructors to be protected or private

     客户对象只能通过 getter 函数获得该单实例

8.2 GOF设计模式一: 单实例模式 SingleTon的更多相关文章

  1. 设计模式之单实例模式(Singleton)

    原理:将类的构造函数由pubic变为private或者protect,添加获取对象的public 成员函数,返回指向对象的静态指针. 首先来一段简单的代码实现 代码一 class Singleton ...

  2. xadmin系列之单实例模式

    先看下单实例的定义 python的模块实现单例模式是python语言特有的,python的模块天然就是单例的,因为python有个pyc文件,导入一次后,第二次导入直接从pyc中取数据了 这里我们主要 ...

  3. Python静态方法实现单实例模式

    单实例模式 当程序中需要同一个实例就可以解决问题的场景,可以使用单实例模式

  4. 23种设计模式之单例(Singleton Pattern)

    单例 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例(eg:应对一些特殊情况,比如数据库连接池(内置了资源)  全局唯一号码生成器),才能确保它们的逻辑正确性.以及良好的效率 ...

  5. .Learning.Python.Design.Patterns.2nd.Edition之单实例模式

    可以慢慢理解.. 对照JAVA class Singleton(object): def __new__(cls): if not hasattr(cls, 'instance'): cls.inst ...

  6. 设计模式学习心得<单利模式 Singleton>

    概述 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 主要解决 一个全局使用的类频繁地创建与销毁. 何时使用 当您想控制实例数目,节省系统资源的时候. 如何解决 判断系统是否已经有这个单 ...

  7. 设计模式之单例(singleton)设计模式代码详解

    单例有两种:懒汉式和饿汉式 /** * 懒汉式的单例模式 * 这种单例模式如果采用到多线程调用该方法,有可能会产生多个实例,原因是: * 当线程一进入了①处,此时轮到线程二的时间片,线程二也来到①处, ...

  8. [HBase Manual]CH5 HBase运行模式:单实例和分布式

    HBase运行模式:单实例和分布式 HBase运行模式:单实例和分布式 1.单实例模式 1.1 单实例在HDFS下 2.分布式 2.1 伪分布式 3完全分布式 HBase有2种运行模式,单实例和分布式 ...

  9. C#设计模式-单实例

    单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 1.经典的模式 namespace singleClass { class ...

随机推荐

  1. windows 下安装weblogic

    下载weblogic安装文件 https://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 在目录下, 下载后 ...

  2. [CentOS] rsync同步目录进行备份文件

    操作不难,网上一堆.这里列几个 CentOS7 参考地址: https://www.server-world.info/en/note?os=CentOS_7&p=rsync Copy fil ...

  3. spring boot + vue + element-ui全栈开发入门——项目部署

     前言 常用的部署方式有两种: 1.是把生成好的静态页面放到spring boot的static目录下,与打包后的spring boot项目一起发布,当spring boot运行起来后,自然而然就能访 ...

  4. WPF Combobox数据绑定 Binding

    combobox数据绑定List链表集合区分显示值与选择的值 整体效果: 根据combobox选择情况分别打印选取值与显示值 代码: Windows窗体: <Window x:Class=&qu ...

  5. spring里的事物设置

    有的人说事物在spring里设置有两种,其实事物设置在spring配置文件中共有五种方式:第一种方式:每个Bean都有一个代理第二种方式:所有Bean共享一个代理基类第三种方式:使用拦截器第四种方式: ...

  6. Lua 哑变量

    [1]哑变量 哑变量,又称为虚拟变量.名义变量. 还得理解汉语的博大精深,‘虚拟’.‘名义’.‘哑’等等,都是没有实际意义.所以,哑变量即没有现实意义的变量. 哑变量的应用示例如下: local fi ...

  7. ftp 上传和下载

    ftp 下载 #!/bin/bash #auth liwei #date DATE=$(date -d today +%Y%m%d) #data files path SRCDIR=/home/web ...

  8. Flask实战-留言板-使用Flask-DebugToolbar调试程序、Flask配置的两种组织形式

    使用Flask-DebugToolbar调试程序 扩展Flask-DebugToolbar提供了一系列调试功能,可以用来查看请求的SQL语句.配置选项.资源加载情况等信息.这些信息在开发时会非常有用. ...

  9. 最短路径 SPFA P3371 【模板】单源最短路径(弱化版)

    P3371 [模板]单源最短路径(弱化版) SPFA算法: SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复 ...

  10. MySQL ERROR 1698 (28000): Access denied for user 'root'@'localhost'

    今天在安装MySQL的过程中竟然没有让我输入密码,登录的时候也不需要密码就能进入,这让我很困惑. 进了数据库就设置密码,用了各种方式都不行. 虽然我这数据库没啥东西但也不能没有密码就裸奔啊,有点丢人是 ...