设计模式_1_单例模式

单例模式

什么是单例设计模式

单例模式是一种创建型设计模式, 它的核心思想是保证一个类只有一个实例,并提供一个全局访问点来访问这个实例。

  • 只有一个实例的意思是,在整个应用程序中,只存在该类的一个实例对象,而不是创建多个相同类型的对象。
  • 全局访问点的意思是,为了让其他类能够获取到这个唯一实例,该类提供了一个全局访问点(通常是一个静态方法),通过这个方法就能获得实例。

为什么要使用单例设计模式呢

简易来说,单例设计模式有以下几个优点让我们考虑使用它:

  • 全局控制:保证只有一个实例,这样就可以严格的控制客户怎样访问它以及何时访问它,简单的说就是对唯一实例的受控访问(引用自《大话设计模式》第21章)
  • 节省资源:也正是因为只有一个实例存在,就避免多次创建了相同的对象,从而节省了系统资源,而且多个模块还可以通过单例实例共享数据。
  • 懒加载:单例模式可以实现懒加载,只有在需要时才进行实例化,这无疑会提高程序的性能。

单例设计模式的基本要求

想要实现一个单例设计模式,必须遵循以下规则:

  • 私有的构造函数:防止外部代码直接创建类的实例
  • 私有的静态实例变量:保存该类的唯一实例
  • 公有的静态方法:通过公有的静态方法来获取类的实例

题目描述

输入描述

输出描述

输入示例

输出示例

注意

  1. 本道题目请使用单例设计模式。
  2. 使用私有静态变量来保存购物车实例。
  3. 使用私有构造函数防止外部直接实例化。
#include <iostream>
#include <map>
#include <string>
#include <vector>
 
using namespace std;
 
class ShoppingCartManager {
public:
    //获取购物车实例
    static ShoppingCartManager& getInstance() {
        static ShoppingCartManager instance;
        return instance;
    }
     
    void addToCart(const string& itemName, int quantity) {
        cart[itemName] += quantity;
        orderList.push_back(itemName);
    }
     
    void viewCart() const {
        if (!orderList.size()) {
            return;
        }
        else {
            for (const auto& name : orderList) {
                cout << name << " " << cart.at(name) << endl;
            }
        }
    }
private:
    //私有构造函数
    ShoppingCartManager() {}
    //购物车存储商品和数量的映射
    map<string, int> cart;
    vector<string> orderList;
};
 
int main() {
    string itemName;
    int quantity;
     
    while (cin >> itemName >> quantity) {
        ShoppingCartManager& cart = ShoppingCartManager::getInstance();
        cart.addToCart(itemName, quantity);
    }
     
    const ShoppingCartManager& cart = ShoppingCartManager::getInstance();
    cart.viewCart();
     
    return 0;
}
posted @   牛奶巧克力冰糕  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示