先看题目:
【设计模式专题之单例模式】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
类在程序中只有一个实例存在,并提供了全局访问点来获取该实例。