首页 > 其他分享 >单例模式

单例模式

时间:2023-09-22 18:34:01浏览次数:35  
标签:std username string 数据库 模式 单例 password conn

工作场景:配置文件

 比如redis的配置文件redis.conf里面包涵连接数据库需要的连接信息、用户名、用户密码等配置信息,每个用户都有这个可修改的配置文件进行数据库连接个性化配置(这份文件不能写死但大体内容类似),所以需要使用设计模式思想进行代码复用,这里采将会用设计模式里的单例模式

数据库配置文件复用写法(简化版)
#include <iostream>
//给用户一个config.txt文件,由用户自己修改文件需要个性化的值,只需要在当前代码中调入完成数据库的初始化配置
class SqlQuery
{
public:
    //在构造类的时候传入连接信息,用户名,密码
    SqlQuery(const std::string& conn, const std::string& username, const std::string& password)
    {
        m_conn = conn;
        m_username = username;
        m_password = password;
    }
    //一个查询数据库操作的成员函数
    int query()
    {
        // 假装这里有实现。
        return 0;
    }

    std::string m_conn;
    std::string m_username;
    std::string m_password;
};
//打开文件流的必要头文件
#include <fstream>
#include <iostream>

int main()
{
    for (int i = 0; i < 100; i++) {
        //数据库信息默认值
        std::string conn = "mysql://localhost:3306/db/";
        std::string username = "user";
        std::string password = "password";
        //一行一行的读取给用户个性化配置的文件的内容
        std::fstream fs("D://Config/config.txt");
        //读取数据的缓冲区
        char tempStr[1024];
        //当前读取数据的行数
        int index = 0;
        while (fs.getline(tempStr, 1024)) {
            if (index == 0) {
                conn = tempStr;
            }
            else if (index == 1) {
                username = tempStr;
            }
            else if (index == 2) {
                password = tempStr;
            }
            //循环读取每次加一行,直到读完
            index++;
        }
        //打印数据
        printf("conn: %s\n", conn.c_str());
        printf("username: %s\n", username.c_str());
        printf("password: %s\n", password.c_str());
        //构建对象传入参数
        SqlQuery query(conn, username, password);

        // 查询操作
        query.query();
    }


    std::cout << "C3_1\n";
}

上述传统文件配置是一种可行的方案,但存在缺点:同一用户每次连接相同的数据库的时候都需要从文件(磁盘中)中读取个性化的数据库配置文件,其实只需要保存一次或者从内存读取,否则数据库连接效率会大大降低

标签:std,username,string,数据库,模式,单例,password,conn
From: https://www.cnblogs.com/Gal0721/p/17723115.html

相关文章

  • 设计模式序言
    1.设计模式和编程语言的规范不同编程语言大多有以下共同点: 编程语言规范严格:编译器严格规定语法,如条件判断语句if()不可以加分号,标识符不能在变量声明占用等等,否则编译会报错 设计模式模式繁多:有多种设计模式,想使用哪种就哪种,更像是一门经验学科2.学生的思维方式 为了考......
  • Flink的部署模式:Local模式、Standalone模式、Flink On Yarn模式
    Flink部署、执行模式Flink的部署模式Local本地模式、Standalone模式和FlinkonYARN模式是Flink的三种常见部署模式。1.Local本地模式:在本地模式下,Flink以单机模式运行,无需启动分布式资源管理器。这种模式适用于本地开发和测试,用于验证Flink代码的正确性和性能。2.Standalon......
  • 软件设计模式系列之十二——外观模式
    在软件设计中,经常会遇到需要与复杂子系统进行交互的情况。为了简化客户端与子系统之间的交互,提高系统的可维护性和可用性,外观模式应运而生。外观模式(FacadePattern)是一种结构型设计模式,它提供一个统一的界面,用于访问系统中的一组相关接口,从而隐藏了系统的复杂性。在本文中,我们将......
  • GPIO的八种工作模式
    STM开发方式基于寄存器--->程序员直接配置寄存器基于标准库--->利用ST官方封装好的库函数基于HAL库--->图形化界面我目前主要学习基于标准库的,STM32库是由ST公司针对STM32提供的函数接口,即API(ApplicationProgramInterface),开发者可调用这些函数接口来配置STM32的寄存器,使开......
  • 记录常用设计模式
    策略模式+工厂模式1.四种玩法,玩法出入参类型一致,根据类型区分具体玩法。/***玩法枚举类**@authorjiangym*@version1.0*@date2022/9/2820:10*/publicenumTricksEnum{/***vip身份用户*/VIP_USER(1,"vip身份用户"),/**......
  • 软件设计模式系列之十一——装饰模式
    当谈到设计软件系统时,经常需要考虑如何使系统更加灵活、可扩展和易维护。设计模式是一种被广泛采用的方法,用于解决常见的设计问题,并提供了一套可重用的解决方案。装饰模式(DecoratorPattern)是一种结构型设计模式,它允许您在不改变对象接口的情况下动态地添加对象的功能或责任。在本......
  • 设计模式
    1.设计模式分为:设计:a.就是设计原则b.设计模式的来源依据,是怎么来的.c.是一种指导思想.什么是设计?a.设计按照哪一种思路或标准来实现功能.b.根据指导思想,结合开发经验总结的"模板".c.关联:从设计到模式.为什么有设计?a.功能相同,但有不同的实现方案.b.前提是......
  • HeadFirst设计模式学习之责任链模式
    【一】介绍引入当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式(ChainofResponsibilityPattern)。【二】场景引入自从推出Java版本的糖果机之后,万能糖果公司收到的电子邮件数量已超出他们所能处理的范围。据他们自己分析,所收到的电子邮件有四类:......
  • 设计模式
      设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。     毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件......
  • 趣解设计模式之《珍爱生命,远离只狼》
    〇、小故事小王最近打算入手一款叫《只狼》的游戏,这款游戏特别的硬核,也就是说,普通的小怪战斗力都特别的强,而作为主角的我们,也很容易被小兵打败。除了游戏中的小兵和Boss很难打败之外,如果在游戏中被杀了,也需要从这章的开头开始打,没办法直接从死亡点附近复活,这个就又为游戏增加了......