单例模式

    科技2022-07-11  91

    单例模式:SingleTon,顾名思义是单个对象的模式,即一个类中只能实例化一个对象。

    我们可以这样做: 1.屏蔽起来对象生成接口,即: private: 构造函数 这样就实现了只能本类类中访问,不能类外访问并生成对象 2.类中生成唯一的对象 提供一个接口返回出去供外部使用

    下面来具体说说这个接口:暂且将这个接口叫做函数getInstance() 1.先说函数getInstance的范围,它的范围应该是全局共享的,最主要的是不依赖对象调用,所以我们才将函数设置成static 2.再来看看它的返回值类型,我们要知道函数的目的就是将这个对象返回出去,所以说现在有三种返回值:SingleTon、SingleTon*、SingleTon&(SingleTon是类名)。看SingleTon,它返回了一个对象,但是还需要一个临时两量把这个对象带出去,这样生成了两个对象,不符合单例模式的核心思想了;反观引用和指针都不用生成临时量把对象带出去,所以说用指针和引用都可以。 综上所述,函数应该设置在public下的:

    static SingleTon* getInstance(){}

    而构造函数设置在私有下:

    private: SingleTon(){}

    在构造函数中,有一种特殊的叫做拷贝构造函数,他也是可以构造对象的,也将它放在私有下,但是不用实现,因为调用它之前肯定会调用构造函数,所以只将它设置成私有的就可以了:

    private: SingleTon(const SingleTon&);

    在私有成员中的最后一项,设置一个标记来标记生成的对象,并且这个标记也是类内共享的,因为后面来的人也需要知道是否已经存在了一个对象:

    privatestatic SingleTon *ptr;

    当然在私有下知识生命,初始化还是要在类外:

    SingleTon* SingleTon::ptr = new SingleTon();

    综上所述,我们可以得到这个类原型:

    class SingleTon { public: static SingleTon* getInstance() { return ptr; } private: SingleTon(){} SingleTon(const SingleTon1&); static SingleTon *ptr; }; SingleTon* SingleTon::ptr = new SingleTon();
    Processed: 0.016, SQL: 8