`

创建实例之getinstance()函数

    博客分类:
  • PHP
阅读更多

 

    写在前面:一个类,只是表达对象是怎样的,而如果类实例化之后,它就是一个对象了。也就是说,实体化之后的东西,就是一个东西了。一个客观的实体,可以进 行各种的操作和设置了。而对象的实例化方法,也是比较多的,最常用的方法是直接使用new ,而这是最普通的,如果要考虑到其它的需要,如单实例模式,层次 间调用等等。直接使用new 就不可以实现好的设计好,这时候需要使用间接使用new ,即很多人使用的GetInstance 方法。这是一个设计方式的代表,而不仅仅指代一个方法名。

 

1. new的 使用
Object _object = new Object() ,这时候,就必须要知道有第二个Object 的存在,而第二个Object 也常常是在当前的应用程序域中的,可以被直接调用的

 

2. GetInstance的 使用:

在主函数开始时调用,返回一个实例化对象,此对象是static 的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。

 

3.两者区别对照:

大部分类( 非抽象类/ 接口/ 屏蔽了constructor 的类) 都可以用newnew 就是通过生产一个新的实例对象, 或者在栈上声明一个对象 ,每部分的调用用的都是一个新的对象。
getInstance
是少部分类才有的一个方法,各自的实现也不同。getInstance 在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance 往往是static 的。

 

(1) 对象使用之前通过getinstance 得到而不需要自己定义,用完之后不需要delete;

(2) new 一定要生成一个新对象,分配内存; getInstance () 则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于 new

(3) new 创建后只能当次使用,而 getInstance() 可以跨栈区域使用,或者远程跨区域使用。所以 getInstance() 通常是创建 static 静态实例方法的。

 

分享到:
评论

相关推荐

    根据不同的模式创建单实例应用程序(3kb)

    源码分析可能包括对类的设计,如类的构造函数和析构函数的私有化,`getInstance`方法的实现,以及如何处理多线程环境下的同步问题。同时,还可能涉及到系统相关类的使用,例如Windows的句柄(handle)管理和资源管理...

    单实例模式介绍及应用

    类中定义了私有的构造函数,防止外部直接创建实例,通过静态方法`getInstance()`获取唯一实例。`getInstance()`使用`synchronized`关键字确保线程安全,首次调用时创建实例,之后直接返回已创建的实例。 在`...

    C++ 单一实例

    1. **私有化构造函数和拷贝构造函数**:为了防止外部直接通过`new`关键字创建实例,Singleton类的构造函数和拷贝构造函数通常声明为私有的。 2. **静态成员变量**:定义一个静态的类成员,保存唯一的实例。由于静态...

    C++单实例模式示例代码

    在C++中实现单例模式通常涉及到几个关键点:确保只创建一个实例、隐藏构造函数以防止外部创建实例、提供静态成员函数用于获取唯一实例的访问权。 ### 示例代码解析 下面我们将深入分析提供的代码示例: ```cpp ...

    Qt静态函数发送信号

    在Qt编程中,信号与槽机制是其核心特性之一,它允许对象间进行异步通信。这个机制使得我们可以轻松地连接不同的组件,当一个动作发生时,其他组件能够接收到通知并做出相应。在传统的Qt编程中,信号通常在类的实例...

    singleton、回调函数、sizeof等小结.pdf

    这种实现方式是在类初始化时不实例化对象,而是在第一次调用`getInstance()`方法时才进行实例化。这种方式考虑了性能,因为只有在需要时才会创建对象。但在多线程环境下,如果不进行同步控制,可能会导致多个线程...

    单例代码

    这种方式下,只有在第一次调用getInstance()且实例未创建时,才会创建实例,且使用 volatile 关键字确保编译器不会对指令进行重排序,从而保证线程安全。 ```cpp #include class InstanceCheck { private: ...

    ATL只允许一个实例运行

    4. **提供获取实例的公共接口**:创建一个静态成员函数,供外部代码获取单例实例。 ```cpp static CMyClass* GetInstance() { return g_pSingleton; } ``` 5. **线程安全**:在多线程环境中,上述实现可能不...

    singleton、回调函数、sizeof等小结.docx

    1. 第一种形式的Singleton模式,通过私有构造函数防止直接实例化,同时在类内部创建一个私有的静态实例。通过一个公共的静态方法`getInstance()`返回这个唯一的实例。这种方法简单明了,但在多线程环境中可能存在...

    几种单例模式说明(并有实例)

    懒汉式单例模式是最简单的单例模式之一,它的特点是仅在首次被调用时创建实例。这种方式的优点是延迟加载,节省内存;缺点是在多线程环境下可能会出现问题,因为多个线程可能同时进入判断语句块,导致创建多个实例。...

    Java MessageDigest 的 getInstance 方法:简介、详解、实例代码和运行结果

    首先,创建一个`MessageDigest`实例,指定算法为"SHA-256"。然后,将输入字符串转换为字节数组,接着调用`digest()`方法计算散列值。最后,为了方便阅读,将散列值转换为十六进制字符串并打印出来。 在实际应用中,...

    [综合]设计模式C实现单例模式参考.pdf

    4. **线程安全**:在多线程环境中,为了确保getInstance方法在任何时候都只会创建一个实例,需要对实例化过程进行同步,防止多个线程同时进入创建实例的代码块。这可以通过互斥锁、原子操作或者C++11的std::call_...

    java私有构造函数

    为了实现单例模式,通常会将构造函数设置为私有,防止其他类直接实例化该类,并提供一个静态方法(如`getInstance()`)来获取单例对象。例如: ```java public class Handler { private static Handler handler ...

    java日期格式函数的用法与实例

    本文将深入探讨`java.util.Date`类以及与其相关的日期格式化函数的使用方法,并通过实例进行详细解析。 首先,我们了解`java.util.Date`是Java中的一个核心类,它用于表示特定的瞬间,精确到毫秒。获取系统当前时间...

    C#描述中的单例与多例模式

    唯一获取 `Singleton` 实例的方式是通过 `getInstance()` 方法,该方法会检查是否已经存在一个实例,如果不存在,则创建一个;如果已经存在,则直接返回已有的实例。 ### 多例模式 多例模式是单例模式的一种扩展...

    c#获得mac地址函数

    这里创建了一个`ManagementClass`实例,指定其类名参数为`"Win32_NetworkAdapterConfiguration"`,这是WMI中表示网络适配器配置的类。随后调用`GetInstances()`方法,收集当前系统中所有该类的实例,即所有的网络...

    Qt 单例模式 创建一个连接对象、多次使用sql链接

    如上代码所示,`DBManager`类的构造函数和析构函数都是私有的,确保了不能从类外部创建或删除实例。`getInstance()`方法是静态成员函数,返回的是类的唯一实例。首次调用`getInstance()`时,会创建并初始化`...

    java调用动态库实例

    例如,如果DLL有一个名为`addNumbers`的函数,我们创建一个`AddNumbers`接口,声明`addNumbers`方法,然后通过`NativeLibrary.getInstance()`加载库,最后通过接口实例调用方法。 - web项目中的servlet调用:在Web...

    通过C++实现设计模式-单例模式.rar

    在这个例子中,Singleton 类有一个私有的构造函数和一个私有的析构函数,这防止了外部代码直接创建或销毁实例。getInstance 方法是一个静态方法,它返回一个指向 Singleton 实例的智能指针(std::shared_ptr)。这个...

Global site tag (gtag.js) - Google Analytics