单例模式
什么是单例设计模式
单例模式是一种创建型设计模式, 它的核心思想是保证一个类只有一个实例,并提供一个全局访问点来访问这个实例。
- 只有一个实例的意思是,在整个应用程序中,只存在该类的一个实例对象,而不是创建多个相同类型的对象。
- 全局访问点的意思是,为了让其他类能够获取到这个唯一实例,该类提供了一个全局访问点(通常是一个静态方法),通过这个方法就能获得实例。
为什么要使用单例设计模式呢
简易来说,单例设计模式有以下几个优点让我们考虑使用它:
- 全局控制:保证只有一个实例,这样就可以严格的控制客户怎样访问它以及何时访问它,简单的说就是对唯一实例的受控访问(引用自《大话设计模式》第21章)
- 节省资源:也正是因为只有一个实例存在,就避免多次创建了相同的对象,从而节省了系统资源,而且多个模块还可以通过单例实例共享数据。
- 懒加载:单例模式可以实现懒加载,只有在需要时才进行实例化,这无疑会提高程序的性能。
单例设计模式的基本要求
想要实现一个单例设计模式,必须遵循以下规则:
- 私有的构造函数:防止外部代码直接创建类的实例
- 私有的静态实例变量:保存该类的唯一实例
- 公有的静态方法:通过公有的静态方法来获取类的实例
题目描述
输入描述
输出描述
输入示例
输出示例
注意
- 本道题目请使用单例设计模式。
- 使用私有静态变量来保存购物车实例。
- 使用私有构造函数防止外部直接实例化。
#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;
}
标签:模式,购物车,实例,cart,单例,ShoppingCartManager,设计模式
From: https://www.cnblogs.com/milkchocolateicecream/p/18430021