自学内容网 自学内容网

设计模式练习(一) 单例模式

设计模式练习(一) 单例模式

题目来源:卡玛网

题目描述

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

输入描述

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

输出描述

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

输入示例
Apple 3
Banana 2
Orange 5
输出示例
Apple 3
Banana 2
Orange 5

code:

#include <iostream>
#include <vector>
#include <string>
#include <map>

using namespace std;

class shoppingCar{
public:
    std::map<string, int> goods;
    std::vector<string> goodOrder;
    
    void addGoods(const string& name, int quantity)
    {
        if(goods.find(name) == goods.end())
        {
            goodOrder.push_back(name);
        }
        goods[name] += quantity;
    }
    
    void printGoods()
    {
        for(const auto& name: goodOrder)
        {
            cout << name << " " << goods[name] << endl;
        }
    }
    
    static shoppingCar& getShoppingCar()
    {
        static shoppingCar instance;
        return instance;
    }
private:
    shoppingCar(){}
    ~shoppingCar(){}
    shoppingCar(const shoppingCar&);
};

int main()
{
    shoppingCar& mycar = shoppingCar::getShoppingCar();
    string name;
    int quantity;
    
    while(cin >> name >> quantity)
    {
        mycar.addGoods(name, quantity);
    }
    mycar.printGoods();
    return 0;
}

特点:

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

使用static变量和static函数获取唯一对象

shoppingCar& mycar = shoppingCar::getShoppingCar();

这里接收返回对象时,也必须使用引用,应该单例对象只有一份,不能够复制


原文地址:https://blog.csdn.net/qq_44348970/article/details/143782569

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!