【设计模式】C++单例模式

先看题目:


【设计模式专题之单例模式】1.小明的购物车

时间限制:1.000S  空间限制:256MB

题目描述

小明去了一家大型商场,拿到了一个购物车,并开始购物。请你设计一个购物车管理器,记录商品添加到购物车的信息(商品名称和购买数量),并在购买结束后打印出商品清单。(在整个购物过程中,小明只有一个购物车实例存在)。

输入描述

输入包含若干行,每行包含两部分信息,分别是商品名称和购买数量。商品名称和购买数量之间用空格隔开。

输出描述

输出包含小明购物车中的所有商品及其购买数量。每行输出一种商品的信息,格式为 "商品名称 购买数量"。

输入示例
Apple 3
Banana 2
Orange 5
输出示例
Apple 3
Banana 2
Orange 5
提示信息

本道题目请使用单例设计模式: 

使用私有静态变量来保存购物车实例。

使用私有构造函数防止外部直接实例化。


我的实现:

#include<iostream>
#include<unordered_map>
using namespace std;
class ShoppingCart {
private:
    ShoppingCart() {};
    unordered_map<string, int>cart;
public:
    static ShoppingCart& GetInstance() {
        static ShoppingCart instance;
        return instance;
    };
    void PushGoods(string name, int amount) {
        cart[name] += amount;
    }
    void ShowCart() {
        for (auto it = cart.begin(); it != cart.end(); ++it)
            cout << it->first << ' ' << it->second << endl;
    }
};

int main()
{
    string name;
    int amount;
    while (cin >> name >> amount)
    {
        ShoppingCart& cart = ShoppingCart::GetInstance();
        cart.PushGoods(name, amount);
    }
    ShoppingCart& cart = ShoppingCart::GetInstance();
    cart.ShowCart();

    return 0;
}

GPT对此的点评:

上述代码实现了单例模式(Singleton Pattern)。

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了全局访问点来访问该实例。在这个代码中,ShoppingCart 类的构造函数是私有的,因此外部代码无法直接实例化 ShoppingCart 类的对象。而通过 GetInstance() 方法,可以获取到 ShoppingCart 类的唯一实例。此外,GetInstance() 方法使用了静态变量来保存实例,确保了在程序运行期间只有一个实例存在。

因此,这段代码实现了单例模式,确保了 ShoppingCart 类在程序中只有一个实例存在,并提供了全局访问点来获取该实例。

原文链接:

【设计模式专题之单例模式】1.小明的购物车

Github详解

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值