设计模式(五)Singleton模式

  Singleton模式就是确保只生成一个实例的模式。这里有两个意思,即想确保任何情况下都绝对只有一个实例和想在程序上表现出“只存在一个实例”。

  下面通过一个实例来说明这种设计模式。

  

 1 package BigJunOba.bjtu.Singleton;
 2
 3 public class Singleton {
 4
 5     private static Singleton singleton = new Singleton();
 6
 7     private Singleton() {
 8         System.out.println("生成了一个实例");
 9     }
10     public static Singleton getInstance() {
11         return singleton;
12     }
13 }

  Singleton类只会生成一个实例。主要方法是在声明实例域时,使用static将singleton初始化为Singleton的示例。初始化仅仅在类被加载时进行一次。由于Singleton的构造器是private的,是因为这样可以禁止从Singleton外部调用构造器,也就是说,不能从Singleton类以外的代码中调用构造器new Singleton()。

 1 package BigJunOba.bjtu.Singleton;
 2
 3 public class Main {
 4
 5     public static void main(String[] args) {
 6         System.out.println("Start.");
 7         Singleton obj1 = Singleton.getInstance();
 8         Singleton obj2 = Singleton.getInstance();
 9         if(obj1 == obj2) {
10             System.out.println("是相同的示例");
11         } else {
12             System.out.println("是不相同的示例");
13         }
14         System.out.println("End.");
15     }
16 }

  这里是用来观察是否只生成了一个实例,如果只调用了一次构造器,那么就只会打印出一句“生成了一个实例。”

Start.
生成了一个实例
是相同的示例
End.

  通过输出结果我们可以看到,确实是只生成了一个实例。这个设计模式的关键就是构造器使用private来声明。

  单例模式类图如下。

 

原文地址:https://www.cnblogs.com/BigJunOba/p/8674354.html

时间: 2024-11-06 03:41:46

设计模式(五)Singleton模式的相关文章

跟刺猬哥一起学习设计模式【Singleton模式】

设计模式的分类 从目的来看: 创建型模式:负责对象创建 结构性模式:处理类与对象间的组合 行为型模式:类与对象交互中的职责分配 从范围来看: 类模式处理类与子类的静态关系 对象模式处理对象间的动态关系 动机 在软件系统中,经常有这样的一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性以及良好的效率. 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例呢?其实这应该是类设计者的责任,而不是使用者的责任. 意图 保证一个类仅有一个实例,并提供一个该实例的全局访问点. 

菜鸟学设计模式系列笔记之单例设计模式(Singleton模式)

特殊的类: (1)类和它的实例间一般是一对多的关系.对大多数的类而言,都可以创建多个实例. 在需要这些实例时创建它们,在这些实例不再有用时删除它们.这些实例的来去伴随着内存的分配和归还. (2)但是有一些类,应该只有一个实例. 这个实例似乎应该在程序启动时被创建出来,且只有在程序结束时才被删除. Intent : 一个类仅有一个实例,自行实例化并向整个系统提供一个访问它的全局访问点 Motivation : 对于一些类来说,只有一个实例是很重要的 Singleton (1)定义一个Instanc

PHP设计模式 五 (代理模式 装饰器模式)

代理模式 在客户端和实体之间建立一个代理对象,客户端对实体的操作全部委派给代理对象,隐藏实体具体实现细节. Proxy还可以与业务代码分离,部署到另外的服务器,业务代码中通过RPC来委派任务. 代理Proxy.php: <?php namespace Components\Proxy; class Proxy implements IUserProxy { function get($id) { $db = \Components\Register::get('slave'); $db->qu

设计模式&lt;五&gt;——状态模式

类图 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类[DP].主要解决的就是当控制一个状态的条件表达式过于复杂的时候,把状态转移到表示不同状态的一系列类当中.目的是把复杂而冗长的条件判断简化.好处便是将与特性状态相关的行为局部化,并且将不同状态的行为分割开来.

设计模式之Singleton模式(笔记)

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 定义一个Singleton单例类 public class Singleton { public Singleton(){ } //通过静态初始化方法定义一个单例对象 private static Singleton instance=new Singleton(); public static Singleton getInstance(){ return instance; } }

4.泡妞与设计模式(五) 原型模式

PROTOTYPE 原型模式 原型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构.缺点是每一个类都必须配备一个克隆方法.(简单点说就是调用的都可以找到原型,比如你和MM聊天,事先设计好一些情话,需要的时候copy就可以了,这时候情话就是原型) 原型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象. 代码示例 1 #include <stdio.h> 2 #include <

设计模式之Singleton模式

作用:只生成一个实例 public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { System.out.println("get a new object"); } public static Singleton getInstance() { return singleton; } } 要点:类自身的构造函数为private(防止自己生成实例)

设计模式之单件模式(Singleton Pattern)

一.单件模式是什么? 单件模式也被称为单例模式,它的作用说白了就是为了确保“该类的实例只有一个” 单件模式经常被用来管理资源敏感的对象,比如:数据库连接对象.注册表对象.线程池对象等等,这种对象如果同时存在多个的话就会造成各种不一致的麻烦(你总不希望发生数据库重复连接的异常吧) 二.如何保证类的实例只有一个? (这个问题看似简单,但如果没有接触过单件模式的话,要自己想出来解决方案还是需要一些天赋的..不信的话,可以试着想想..) 1.类的实例可能只有一个吗?貌似只要知道类名就可以随便new了吧?

设计模式--singleton模式

使用单件模式的意图是保证一个类只有一个实例,并提供一个访问它的全局访问点. 将单件定义为全局或静态对象,然后依赖于自动的初始化,并不能完全实现上述意图.虽然可以提供全局访问点,但这是不够的.原因如下: 1)我们不能保证静态对象只有一个实例会被声明. 2)我们可能没有足够信息在静态初始化时实例化每个单件,单件可能需要在程序运行中稍后被计算出来的值. 3)c++没有定义转换单元上全局对象的构造器的调用顺序.这意味着单件之间不存在依赖关系:如果有,那么错误将是不可避免的. 4)使用全局或静态对象的实现