首页 > 其他分享 >设计模式_1_单例模式

设计模式_1_单例模式

时间:2024-09-24 21:15:15浏览次数:7  
标签:模式 购物车 实例 cart 单例 ShoppingCartManager 设计模式

单例模式

什么是单例设计模式

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

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

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

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

  • 全局控制:保证只有一个实例,这样就可以严格的控制客户怎样访问它以及何时访问它,简单的说就是对唯一实例的受控访问(引用自《大话设计模式》第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;
}

标签:模式,购物车,实例,cart,单例,ShoppingCartManager,设计模式
From: https://www.cnblogs.com/milkchocolateicecream/p/18430021

相关文章

  • 饿汉式懒汉式的简单实现 --单例模式001
    单例模式-设计模式--001设计模式与单例模式饿汉式懒汉式的简单实现一、饿汉式二、懒汉式设计模式与单例模式设计模式是软件开发人员在软件设计中,对常见问题的解决方案的总结和抽象。针对软件开发中常见问题和模式的通用解决方案。一种可以被重复利用的解决方案。......
  • 《程序猿之设计模式实战 · 适配器模式》
    ......
  • 设计模式之中介模式(三分钟学会一个设计模式)
    中介模式(Mediator)又称之为调停模式。mediator[ˈmiːdieɪtə(r)]n.调停者;斡旋者;解决纷争的人(或机构);本意就是解决纠纷的中间人它是面向对象六大原则中最少知道原则的一个典型应用。(关于面向对象六大原则,可看前文:https://www.cnblogs.com/jilodream/p/5353512.html)大概意......
  • 函数计算 FC:首发 GPU 极速模式,更弹性、更降本
    函数计算FC作为轻量灵活、事件驱动的全托管计算服务,一直以来以弹得更快、粒度更细、成本更低为广大开发者与企业客户所青睐。2024云栖大会上,函数计算FC为AI加码,首发GPU极速模式,让GPU可以更弹性、更便宜。阿里云智能集团产品专家洪晓龙首发GPU极速模式,分钟级到秒级别......
  • 函数计算 FC:首发 GPU 极速模式,更弹性、更降本
    函数计算FC作为轻量灵活、事件驱动的全托管计算服务,一直以来以弹得更快、粒度更细、成本更低为广大开发者与企业客户所青睐。2024云栖大会上,函数计算FC为AI加码,首发GPU极速模式,让GPU可以更弹性、更便宜。阿里云智能集团产品专家洪晓龙首发GPU极速模式,分钟级到......
  • USB HS PHY的几种模式
    HSPHY(High-SpeedPhysicalLayer)是指在USB2.0规范中定义的高速物理层,它支持高达480Mbps的数据传输速率。HSPHY在USB2.0设备中用于实现高速数据传输,同时也支持USB1.1的低速(LS)和全速(FS)模式。HSPHY在USB2.0中支持多种模式,这些模式定义了PHY在不同状态下的......
  • 【unity进阶知识1】最详细的单例模式的设计和应用,继承和不继承MonoBehaviour的单例模
    文章目录前言一、不使用单例二、普通单例模式1、单例模式介绍实现步骤:单例模式分为饿汉式和懒汉式两种。2、不继承MonoBehaviour的单例模式2.1、基本实现2.2、防止外部实例化对象2.3、最终代码3、继承MonoBehaviour的单例模式3.1、基本实现3.2、自动创建和挂载单例脚本......
  • # 数字化时代的IT行业发展趋势 在全球加速迈向数字化的背景下,信息技术(IT)行业正经历着
    数字化时代的IT行业发展趋势在全球加速迈向数字化的背景下,信息技术(IT)行业正经历着深刻的变革与创新。未来几年,新的技术趋势将塑造行业格局,影响企业运营模式及个人生活方式。本文将探讨几个未来具有重大影响的IT发展趋势。边缘计算的迅速崛起边缘计算正在成为云计算的有力......
  • Linux集群负载均衡DR模式LVS搭建
    负载均衡DR模式LVS搭建1.基础准备(1)准备3台机器DR模式需要三台虚拟机,三台虚拟机只需要有“公网”IP,但在这种模式下又多了一个VIP。对应的机器和IP如下:调度器dir:192.168.147.130真实服务器rs1:192.168.147.131真实服务器rs2:192.168.147.132VIP:192.168.147.110(2)改名分发......
  • 适配器模式详解:解决接口不兼容的利器
    适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式主要用于解决“接口不兼容”问题。一,适配器模式的结构适配器模式主要包含以下几个部分:目标接口(Target):客户期望的接口。......