我喜欢的两种单例写法

1,第一种:

 1 package ToolPackage
 2 {
 3  /**
 4   * 提示
 5   * @author tqr <br />
 6   * 创建时间:2014-11-7 下午6:27:10
 7   */
 8  public class Tip
 9  {
10   private static  var instanceB:Boolean=true;
11   private static var instance:Tip;
12
13   public function Tip()
14   {
15    if (instanceB) {
16     throw new Error("该类为单例,只能用getInstance()来获取实例");
17    }
18   }
19
20   public static function getInstance():Tip{
21    if (!instance) {
22     instanceB = false;
23     instance = new Tip();
24     instanceB = true;
25    }
26    return instance;
27   }
28
29  }
30 }

2,第二种:

 1 package ToolPackage
 2 {
 3  /**
 4   * 提示
 5   * @author tqr <br />
 6   * 创建时间:2014-11-7 下午6:27:10
 7   */
 8  public class Tip
 9  {
10   private static var instance:Tip = new Tip();
11
12   public function Tip()
13   {
14    if (instance) {
15     throw new Error("该类为单例,只能用getInstance()来获取实例");
16    }
17   }
18
19   public static function getInstance():Tip{
20    return instance;
21   }
22
23  }
24 }
时间: 2024-10-29 10:46:37

我喜欢的两种单例写法的相关文章

Egret中的三种单例写法

1 普通的单例写法 class Single{ private static instance:Single; public static getInstance():Single{ if(this.instance == null){ this.instance = new Single(); } return this.instance; } public run(){ } } Single.getInstance().run(); 2 Module写法.仿照的Egret中Res资源类写法.

使用单例时的三种单例写法

单例:一个类只有一个实例,在外部创建对象时,不能用alloc.(只要alloc,就会在堆区开辟空间,就意味着有多个对象)所以我们要提供一个创建对象的方法: 1.加号方法 2.返回值类型为当前类 3.方法名以default ,standared,main,shared等开头 + 当前类名 下面以Person类为例 在.h文件中声明 + (Person *)sharePerson; 在.m文件实现 第一种模式(单线程使用这种模式) + (Person *)sharePerson { 声明为stati

两种单例方式的对比

1.加互斥锁的单例(因为在多线程的情况下,不枷锁的情况线程是不安全的) + (instancetype)shaerdNetTool; // 实现 + (instancetype)shaerdNetTool{ static NetToll *tool = nil; @synchronized(self) { if (tool == nil) { tool = [NetToll new]; } } return tool; } 2.通过GCD的一次执行 (一次执行线程是安全的,整个运行过程只执行一次

C++两种单例(饿汉式,懒汉式)

俄汉式 #include <iostream> using namespace std; class A{ public:     static A& getInstance(void){         return s_instance;     } private:     A(int data=0):m_data(data){}     A(A const& that);     int m_data;     static A s_instance; }; A A::

单例写法 转

如何正确地写出单例模式 1.懒汉式,线程不安全 这段代码简单明了,而且使用了懒加载模式,但是却存在致命的问题.当有多个线程并行调用 getInstance() 的时候,就会创建多个实例.也就是说在多线程下不能正常工作 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == nu

有一鲜为人知的单例写法-ThreadLocal

还有一鲜为人知的单例写法-ThreadLocal 源码范例 当我阅读FocusFinder和Choreographer的时候,我发现这两类的单例实现和我们平常用双重检查锁很不一样.而是用来一个ThreadLocal,这个也可以实现单例啊,那这个与双重检查锁实现的单例有什么区别呢? 1.FocusFinder /** * The algorithm used for finding the next focusable view in a given direction * from a view

java中的四种单例实现方式

在java中,单例设计模式是非常常见的设计模式,对单例设计模式的概念,不做过多的介绍,下面将逐一介绍四种单例设计模式: 1.第一种单例设计模式 1.1 代码实现 package com.singleton.one; /**  * 第一种单例设计模式  * @author Administrator  *  */ public class SingleTonOne { // 实例化 private static SingleTonOne instance = new SingleTonOne();

另一鲜为人知的单例写法-ThreadLocal

另一鲜为人知的单例写法-ThreadLocal 源代码范例 当我阅读FocusFinder和Choreographer的时候,我发现这两类的单例实现和我们寻经常使用双重检查锁非常不一样.而是用来一个ThreadLocal.这个也能够实现单例啊,那这个与双重检查锁实现的单例有什么差别呢? 1.FocusFinder /** * The algorithm used for finding the next focusable view in a given direction * from a v

性能比较好的单例写法

2019/10/27, .Net c#代码片段 摘要:一种性能比较好的单例写法 参考来源 其他单例思路: 1.使用依赖注入,注册为单例模式 2.使用双重锁机制 public sealed class SingletonBase//应该使用密封类防止派生 { //写单例的方法 //public string Getxxx(){ } private SingletonBase() { } public static SingletonBase Instance { get { return Nest