前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >创建型之单例模式C++实现

创建型之单例模式C++实现

作者头像
用户9831583
发布2022-06-16 14:49:55
2510
发布2022-06-16 14:49:55
举报
文章被收录于专栏:码出名企路

创建型模式

创建型模式的关注点是“怎样创建对象?”,降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。

包括:

单例模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。

原型模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。

工厂方法模式:定义一个用于创建产品的接口,由子类决定生产什么产品。

抽象工厂模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。

建造者模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。

1.单例模式

单例模式:为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例。

实现:普通类的构造函数是公有的,外部类可以通过“new 构造函数()”来生成多个实例。但是,如果将类的构造函数设为私有的,外部类就无法调用该构造函数,也就无法生成多个实例。这时该类自身必须定义一个静态私有实例,并向外提供一个静态的公有函数用于创建或获取该静态私有实例。

具体应用:

在每一届任期内,美国的总统只有一人,适合用单例模式实现。

第一步:类函数定义

代码语言:javascript
复制
#pragma once
#include <iostream>
using namespace std;
#include <mutex>
std::mutex mt;

class President
{  
    private:

         static President *instance;
        //避免类在外部实例化
        President(){}
        
    public:
        //在方法上加同步
       static President* getInstance();
        void getName();
    
};

第二步: 类函数实现

代码语言:javascript
复制
//在此处初始化
President* President::instance = new President();
President* President::getInstance()
{    
            mt.lock();
            if(instance==NULL)
            {
                instance=new President();
            }
        
            else
            {
                cout<<"已经有一个总体,不能产生新总统!"<<endl;
            }
             mt.unlock();
            return instance;
}

 void President::getName()
        {
            cout<<"我是美国总统!"<<endl;
        }

第三步: 主函数实现

代码语言:javascript
复制
int main()
{
    President *p1=President::getInstance();
   // p1->getInstance();
    p1->getName();
    President *p2=President::getInstance();
   // p2->getInstance();
    p2->getName();
    
    if(p1==p2)
    {
        cout<<"他们是同一个人"<<endl;
    }
    else
    {
        cout<<"他们不是同一个人"<<endl;
    }

}

结果显示:


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建型模式
    • 1.单例模式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档