首页 > 编程语言 >C++设计模式

C++设计模式

时间:2022-10-16 15:59:07浏览次数:60  
标签:Singleton return 创建 singleton C++ 实例 设计模式 public

简单工厂模式

简单工厂模式就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。不需要管它内部的具体实现,只要告诉它你的需求即可,就可以在不同条件下创建不同实例。

优点:

  • 工厂类含有必要的判断逻辑,知道时候创建什么样的实例,客户端可以直接不用管,仅仅“消费”产品。
  • 客户端无须知道内部具体实现,只需要知道参数即可
  • 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性

缺点:

  • 不易拓展,如果添加新的产品类型,就得改变工厂的创建逻辑,不符合开闭原则;
  • 产品类型较多时,工厂的创建逻辑可能过于复杂,一旦出错,所有产品可能都创建失败,不利于系统的维护
#include <bits/stdc++.h>
using namespace std;


class pen{
public:
    virtual int write() = 0;
};

class pencil : public pen{
public:
    int write()
    {
        cout << "i am a pencil" << endl;
    }
};
class brush : public pen{
public:
    int write()
    {
        cout << "i ams a brush" << endl;
    }
};


class factory{
public:
    static pen* CreatePen(string name)
    {
        if(name == "pencil")
        {
            return new pencil();
        }
        else if(name == "brush")
        {
            return new brush();
        }
    }
};

int main()
{
    pen* p = factory::CreatePen("pencil");
    p->write();
    delete p;
    p = factory::CreatePen("brush");
    p->write();
    delete p;

    
    return 0;
}

 

 

单例模式

在应用这个模式时,单例对象的类必须保证只有一个实例存在,整个系统只能使用一个对象实例。

优点:不会频繁地创建和销毁对象,节省系统资源。

使用场景:IO 、数据库连接、Redis 连接等。

 

#include <bits/stdc++.h>
using namespace std;

// 懒汉式,只有在使用到的时候才会构造
class Singleton{

public:
    static Singleton* getInstance()
    {
        if(singleton == NULL)
            singleton = new Singleton();
        return singleton;
    }
private:
  Singleton(){} static Singleton* singleton; }; // 静态成员在类外初始化 Singleton* Singleton::singleton = NULL; int main() { Singleton* p = Singleton::getInstance(); return 0; }

 

#include <bits/stdc++.h>
using namespace std;

// 饿汉式,类一旦加载就创建实例
class Singleton{

public:
    static Singleton* getInstance()
    {
        return singleton;
    }
private:
    Singleton(){}
    static Singleton* singleton;

};
// 静态成员在类外初始化
Singleton* Singleton::singleton = new Singleton();


int main()
{
    Singleton* p = Singleton::getInstance();

    return 0;
}

 

标签:Singleton,return,创建,singleton,C++,实例,设计模式,public
From: https://www.cnblogs.com/WTSRUVF/p/16796328.html

相关文章

  • C++学生管理系统
    C++学生管理系统学生管理系统:1.设计要求角色划分:管理员、老师、学生。登录管理:根据用户名、密码、用户类型进行登录验证,登录后可以修改密码。档案管理:实现对用户个人......
  • c++入门
    一共包含三个部分:1-c++基础语法;2-c++核心编程;3-c++提高编程准备阶段:visualstudio:创建项目:创建新项目->visualC++->空项目->名称(自定义)......
  • 入门C++
    前言对于奥赛而言,入门C++,可以从写出一个能输出hello,world!的程序开始,在本文中,主要介绍如何从0开始编写一个简单的程序。编译器要想编写出一个能正常运行的程序,你需......
  • C++补丁
    目录文件in/out文件in/out读取数组整行读取字符串......
  • C++ 实现随机数生成(Windows、Linux)
    1、简介计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意:小M多项式序列的周期是65535,即每次利用一个随机种子生......
  • 第4章 C++ STL无序关联式容器总结
    除了序列式容器和关联式容器之外,C++11标准库又引入了一类容器,即无序关联式容器。 无序关联式容器,又称哈希容器。和关联式容器一样,此类容器存储的也是键值对元素;不同之......
  • 掌握C++的左值引用和初识右值引用
    一、引用和指针的区别?1、左值引用和右值引用2、引用的实例 1、引用是更安全的指针(1)安全性:引用是必须初始化的,指针可以不初始化。 引用能够保证一定能够引用到一个......
  • C++内存泄漏
        程序在堆中申请的动态内存,在程序使用完成时没有得到及时的释放。当这些变量的生命周期已结束时,该变量在堆中所占用的内存未能得到释放,从而就导致了堆中可使用的......
  • C++大端与小端
    字节序:字节顺序又称端序或尾序(Endianness),在计算机科学领域中,指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。在几乎所有的机器上,多字节对象都被存储为连......
  • C/C++ 变量的四种存储类型
    所有的数据都有两种类型数据类型:如int,float等存储类型:总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。(1......