Python 设计模式(创建型)

文章目录

  • 抽象工厂模式
    • 场景
    • 示例
  • 单例模式
    • 场景
    • 实现方式
  • 工厂方法模式
    • 场景
    • 示例
  • 简单工厂模式
    • 场景
    • 示例
  • 建造者模式
    • 场景
    • 示例
  • 原型模式
    • 场景
    • 示例

抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种将一组相关或相互依赖的对象集合起来创建的方式,而无需指定它们的具体类。抽象工厂模式可以被看作是工厂方法模式的延伸,它不仅创建单一对象,而是创建一系列相关对象的家族。

  1. 抽象工厂(Abstract Factory):定义了创建一系列相关对象的方法接口。通常是一个接口或者抽象类。

  2. 具体工厂(Concrete Factory):实现抽象工厂接口,负责创建一组具体对象。

  3. 抽象产品(Abstract Product):定义了一组相关产品的接口。通常是一个接口或者抽象类。

  4. 具体产品(Concrete Product):实现了抽象产品接口,是抽象工厂所创建的具体对象。

场景

  1. 需要创建一组相关或相互依赖的对象:如果系统中有一组相关的对象需要同时创建,并且它们之间存在一定的依赖关系,可以考虑使用抽象工厂模式。这样可以确保创建的对象之间的配合和一致性。

  2. 系统中有多个产品族:如果系统中有多个产品族,且每个产品族的产品有一定的关联性,可以使用抽象工厂模式来管理这些产品族。这样可以使得产品族之间的变化和扩展更加容易。

  3. 需要独立于具体工厂的创建过程:如果系统需要独立于具体工厂的创建过程,而只关心产品的组合和表示,可以考虑使用抽象工厂模式。这样可以使得系统更加灵活,可以方便地切换不同的产品组合。

  4. GUI 库:一个图形用户界面(GUI)库需要创建不同风格的按钮、文本框和下拉框等组件,可以使用抽象工厂模式来管理不同风格组件的创建。

  5. 操作系统平台:一个操作系统平台需要支持不同的文件系统和网络协议,可以使用抽象工厂模式来管理不同平台下文件系统和网络协议的创建。

  6. 数据库访问:一个数据库访问库需要支持不同数据库(如 MySQL、PostgreSQL 等)的访问,可以使用抽象工厂模式来管理不同数据库访问类的创建。

示例

# 抽象产品 - 按钮
class Button:def click(self):pass# 具体产品 - Windows 风格按钮
class WindowsButton(Button):def click(self):print("Windows 风格按钮被点击")# 具体产品 - Mac 风格按钮
class MacButton(Button):def click(self):print("Mac 风格按钮被点击")# 抽象产品 - 文本框
class TextBox:def input_text(self):pass# 具体产品 - Windows 风格文本框
class WindowsTextBox(TextBox):def input_text(self):print("在 Windows 风格文本框中输入文本")# 具体产品 - Mac 风格文本框
class MacTextBox(TextBox):def input_text(self):print("在 Mac 风格文本框中输入文本")# 抽象工厂
class GUIFactory:def create_button(self):passdef create_textbox(self):pass# 具体工厂 - Windows 风格工厂
class WindowsGUIFactory(GUIFactory):def create_button(self):return WindowsButton()def create_textbox(self):return WindowsTextBox()# 具体工厂 - Mac 风格工厂
class MacGUIFactory(GUIFactory):def create_button(self):return MacButton()def create_textbox(self):return MacTextBox()# 客户端代码
def create_gui(factory):button = factory.create_button()textbox = factory.create_textbox()return button, textboxdef main():windows_gui = create_gui(WindowsGUIFactory())mac_gui = create_gui(MacGUIFactory())# 测试windows_button, windows_textbox = windows_guiwindows_button.click()          # 输出: Windows 风格按钮被点击windows_textbox.input_text()    # 输出: 在 Windows 风格文本框中输入文本mac_button, mac_textbox = mac_guimac_button.click()              # 输出: Mac 风格按钮被点击mac_textbox.input_text()        # 输出: 在 Mac 风格文本框中输入文本if __name__ == "__main__":main()
  • 输出结果
Windows 风格按钮被点击
在 Windows 风格文本框中输入文本
Mac 风格按钮被点击
在 Mac 风格文本框中输入文本

单例模式

单例模式是一种创建型设计模式,它确保类只有一个实例,并提供一个全局访问点。

  1. 只有一个实例:单例模式确保一个类只有一个实例对象。

  2. 全局访问点:单例模式提供一个全局访问点,使得程序可以访问该实例。

场景

  1. 资源共享:当希望多个对象共享同一资源时,可以使用单例模式。例如,数据库连接池就是一个常见的单例模式的应用场景。

  2. 控制对象的数量:当希望限制类的实例化次数时,可以使用单例模式。例如,线程池就可以使用单例模式来控制线程的数量。

  3. 全局对象:当希望在整个系统中使用一个全局对象时,可以使用单例模式。例如,日志记录器、配置管理器等都可以使用单例模式来实现。

实现方式

  1. 懒汉式:在第一次调用时创建实例对象。
class Singleton:_instance = Nonedef __init__(self):if Singleton._instance is not None:raise ValueError("An instance of this class already exists")Singleton._instance = self@classmethoddef get_instance(cls):if cls._instance is None:cls._instance = cls()return cls._instance# 客户端代码
def main():# 创建两个实例,但它们实际上是同一个对象singleton1 = Singleton.get_instance()singleton2 = Singleton.get_instance()# 打印输出,可以看到两个实例具有相同的内存地址print(singleton1 is singleton2)  # 输出: Trueif __name__ == "__main__":main()
  1. 饿汉式:在类加载时就创建实例对象。
class Singleton:_instance = Nonedef __new__(cls):if cls._instance is None:cls._instance = super().__new__(cls)return cls._instance# 客户端代码
def main():# 创建两个实例,但它们实际上是同一个对象singleton1 = Singleton()singleton2 = Singleton()# 打印输出,可以看到两个实例具有相同的内存地址print(singleton1 is singleton2)  # 输出: Trueif __name__ == "__main__":main()
  1. 线程安全的单例模式:确保在多线程环境下仍然能够正常工作。
import threadingclass Singleton:_instance = None_lock = threading.Lock()def __new__(cls):if not cls._instance:with cls._lock:if not cls._instance:cls._instance = super().__new__(cls)return cls._instance# 客户端代码
def main():# 创建两个实例,但它们实际上是同一个对象singleton1 = Singleton()singleton2 = Singleton()# 打印输出,可以看到两个实例具有相同的内存地址print(singleton1 is singleton2)  # 输出: Trueif __name__ == "__main__":main()
  1. 基于模块:使用 Python 模块系统的特性实现单例模式。
  • singleton_module.py
class Singleton:value = Nonedef get_singleton():if Singleton.value is None:Singleton.value = Singleton()return Singleton.value
  • client.py
import singleton_module# 客户端代码
def main():# 创建两个实例,但它们实际上是同一个对象singleton1 = singleton_module.get_singleton()singleton2 = singleton_module.get_singleton()# 打印输出,可以看到两个实例具有相同的内存地址print(singleton1 is singleton2)  # 输出: Trueif __name__ == "__main__":main()

工厂方法模式

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际创建工作推迟到子类中。这样,工厂方法模式允许一个类在不改变其结构的情况下,改变它所实例化的具体类。

  1. 抽象产品(Abstract Product):定义了产品的接口,是工厂方法所创建对象的基类。

  2. 具体产品(Concrete Product):实现了抽象产品接口的具体对象。

  3. 抽象工厂(Abstract Factory):定义了创建产品的工厂方法的接口。

  4. 具体工厂(Concrete Factory):实现了抽象工厂接口的具体工厂类,负责创建具体产品对象。

场景

  1. 创建对象的具体类不是事先知道的:当一个类需要创建对象的具体类不是在编写代码时就能确定的,而是在运行时动态确定时,可以使用工厂方法模式。

  2. 避免直接依赖于具体类:工厂方法模式可以让客户端代码通过接口调用工厂方法来创建对象,而不需要直接依赖于具体类,从而降低了耦合度。

  3. 需要创建一组相关的对象:如果系统需要创建一组相关的对象,但具体的对象类型由子类决定,可以使用工厂方法模式来管理对象的创建。

  4. 需要扩展系统功能:工厂方法模式符合开闭原则,可以方便地扩展系统功能。当需要添加新的具体产品类时,只需要添加新的具体工厂类即可,不需要修改已有代码。

  5. 图形界面库:比如在 GUI 库中,根据不同的操作系统(如 Windows、MacOS、Linux)需要创建不同的按钮、文本框等组件对象。

  6. 数据库访问类库:在数据库访问类库中,根据不同的数据库(如 MySQL、PostgreSQL、SQLite)需要创建不同的连接对象。

  7. 日志记录器:在日志记录器中,根据不同的日志输出目标(如控制台、文件、数据库)需要创建不同的日志记录器对象。

示例

from abc import ABC, abstractmethod# 抽象产品 - 车
class Car(ABC):@abstractmethoddef drive(self):pass# 具体产品 - Toyota 车
class ToyotaCar(Car):def drive(self):print("驾驶 Toyota 车")# 具体产品 - Tesla 车
class TeslaCar(Car):def drive(self):print("驾驶 Tesla 车")# 抽象工厂
class CarFactory(ABC):@abstractmethoddef create_car(self):pass# 具体工厂 - Toyota 工厂
class ToyotaFactory(CarFactory):def create_car(self):return ToyotaCar()# 具体工厂 - Tesla 工厂
class TeslaFactory(CarFactory):def create_car(self):return TeslaCar()# 客户端代码
def drive_car(factory):car = factory.create_car()car.drive()def main():toyota_factory = ToyotaFactory()tesla_factory = TeslaFactory()drive_car(toyota_factory)  # 输出: 驾驶 Toyota 车drive_car(tesla_factory)   # 输出: 驾驶 Tesla 车if __name__ == "__main__":main()
  • 输出结果
驾驶 Toyota 车
驾驶 Tesla 车

简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种将对象的创建过程封装起来的方式。在简单工厂模式中,有一个工厂类负责根据客户端的需求创建相应的对象,而客户端无需知道具体的创建逻辑。

  1. 产品(Product):被创建的对象的基类或接口,它定义了产品的通用行为。
  2. 具体产品(Concrete Product):实现产品接口的具体对象。
  3. 工厂类(Factory):负责创建具体产品的类。客户端通过调用工厂类的方法来创建产品,而不直接实例化具体产品类。

场景

  1. 对象的创建逻辑相对简单:如果对象的创建逻辑比较简单,并且不太可能变化,可以考虑使用简单工厂模式。这样可以将对象的创建过程封装起来,使客户端代码更加简洁。

  2. 需要对客户端隐藏对象的创建细节:简单工厂模式可以隐藏对象的创建细节,客户端只需要知道如何向工厂类提供参数,而不需要了解对象是如何创建的。

  3. 需要根据不同的条件创建不同类型的对象:如果需要根据不同的条件来创建不同类型的对象,可以使用简单工厂模式。例如,根据用户输入的不同命令创建不同类型的工具对象。

  4. 对象的数量较少且稳定:如果需要创建的对象数量较少,并且这些对象的种类相对稳定,不太容易变化,可以考虑使用简单工厂模式。

示例

class Car:def __init__(self, brand):self.brand = brandclass CarFactory:def create_car(self, brand):if brand == "Toyota":return Car("Toyota")elif brand == "Tesla":return Car("Tesla")else:raise ValueError("未知车辆品牌")def main():# 创建车辆工厂car_factory = CarFactory()# 制造丰田车和特斯拉车toyota_car = car_factory.create_car("Toyota")tesla_car = car_factory.create_car("Tesla")# 打印输出结果print("丰田车品牌:", toyota_car.brand)  # 输出: Toyotaprint("特斯拉车品牌:", tesla_car.brand)    # 输出: Teslaif __name__ == "__main__":main()
  • 输出结果
丰田车品牌: Toyota
特斯拉车品牌: Tesla

建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

  1. 产品(Product):表示被构建的复杂对象。产品类通常包含多个部件,不同的建造者可以构建不同的产品对象。

  2. 抽象建造者(Builder):定义了构建产品对象的抽象接口,包括创建各个部件的方法。

  3. 具体建造者(Concrete Builder):实现了抽象建造者接口,负责构建产品对象的各个部件,并将这些部件组装成最终的产品对象。

  4. 指挥者(Director):负责使用建造者对象构建产品对象的方法。指挥者通常包含一个构建方法,该方法接收一个建造者对象作为参数,然后根据具体的构建过程调用建造者的方法来构建产品对象。

场景

  1. 创建复杂对象:当一个对象包含多个部分,且构建过程比较复杂时,可以使用建造者模式。通过将构建过程分解成多个步骤,并由不同的建造者负责构建不同的部分,可以简化对象的构建过程。

  2. 对象的构建过程需要灵活性:当需要灵活地控制对象的构建过程,并且可以根据不同需求创建不同的表示时,可以使用建造者模式。通过定义不同的具体建造者,可以创建不同表示的产品对象。

  3. 创建对象的过程需要复用:当需要复用相同的构建过程来创建不同的对象时,可以使用建造者模式。通过复用相同的构建过程,可以提高代码的复用性和可维护性。

  4. 创建复杂的文档对象:例如,一个文档对象可能包含标题、正文、图像、表格等多个部分,不同类型的文档可能具有不同的部件组成,可以使用建造者模式来构建不同类型的文档对象。

  5. 创建复杂的菜单对象:例如,一个菜单对象可能包含多个菜品、饮料、甜点等多个部分,可以使用建造者模式来构建不同类型的菜单对象,如午餐菜单、晚餐菜单、酒水菜单等。

示例

# 产品 - 电脑
class Computer:def __init__(self):self.case = Noneself.cpu = Noneself.memory = Noneself.hard_drive = Noneself.graphics_card = Nonedef __str__(self):info = (f"电脑配置:\n"f"机箱:{self.case}\n"f"CPU:{self.cpu}\n"f"内存:{self.memory}\n"f"硬盘:{self.hard_drive}\n"f"显卡:{self.graphics_card}")return info# 抽象建造者
class ComputerBuilder:def __init__(self):self.computer = Computer()def build_case(self):passdef build_cpu(self):passdef build_memory(self):passdef build_hard_drive(self):passdef build_graphics_card(self):pass# 具体建造者 - 游戏电脑
class GamingComputerBuilder(ComputerBuilder):def build_case(self):self.computer.case = "大型塔式机箱"def build_cpu(self):self.computer.cpu = "i9-9900K"def build_memory(self):self.computer.memory = "32GB DDR4"def build_hard_drive(self):self.computer.hard_drive = "1TB SSD + 2TB HDD"def build_graphics_card(self):self.computer.graphics_card = "RTX 3080"# 指挥者
class Director:def __init__(self, builder):self.builder = builderdef construct_computer(self):self.builder.build_case()self.builder.build_cpu()self.builder.build_memory()self.builder.build_hard_drive()self.builder.build_graphics_card()def get_computer(self):return self.builder.computer# 客户端代码
def main():gaming_builder = GamingComputerBuilder()director = Director(gaming_builder)director.construct_computer()gaming_computer = director.get_computer()print(gaming_computer)if __name__ == "__main__":main()
  • 输出结果
电脑配置:
机箱:大型塔式机箱
CPU:i9-9900K
内存:32GB DDR4
硬盘:1TB SSD + 2TB HDD
显卡:RTX 3080

原型模式

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化新对象。在原型模式中,一个原型对象充当了新对象的模板,新对象通过复制原型对象来初始化,并可以根据需要进行修改。

  1. 简化对象创建:原型模式通过复制现有对象来创建新对象,避免了使用构造函数和初始化参数的复杂性。

  2. 提高性能:与直接实例化对象相比,通过复制现有对象创建新对象通常更快。

  3. 允许动态配置对象:新对象可以根据需要对原型对象进行修改,以满足不同的需求。

场景

  1. 对象的创建成本高:当对象的创建成本较高,或者对象的创建过程比较复杂时,可以使用原型模式。通过复制现有对象来创建新对象,可以节省创建对象的时间和资源成本。

  2. 需要创建多个相似对象:当需要创建多个相似但不完全相同的对象时,可以使用原型模式。原型模式允许在现有对象的基础上进行修改和定制,从而快速创建多个相似对象。

  3. 避免构造函数的复杂性:当对象的构造函数包含复杂的初始化逻辑或参数时,可以使用原型模式来避免构造函数的复杂性。通过复制现有对象来创建新对象,可以避免使用构造函数和初始化参数。

  4. 需要动态配置对象:当需要根据不同的需求动态配置对象时,可以使用原型模式。原型模式允许在创建新对象时根据需要对现有对象进行修改和定制,从而满足不同的需求。

  5. 缓存对象:原型模式可以用于缓存已创建的对象,避免重复创建相同的对象,提高性能和效率。

  6. 深拷贝对象:原型模式可以用于执行深拷贝操作,创建一个与现有对象相同但不同实例的对象。

  7. 创建测试数据:原型模式可以用于创建测试数据,快速创建多个相似但不完全相同的对象用于测试。

示例

import copyclass Prototype:def __init__(self):self._objects = {}def register_object(self, name, obj):self._objects[name] = objdef unregister_object(self, name):del self._objects[name]def clone(self, name, **attrs):obj = copy.deepcopy(self._objects.get(name))obj.__dict__.update(attrs)return objclass Car:def __init__(self):self.make = "Toyota"self.model = "Camry"self.year = 2020def __str__(self):return f"{self.year} {self.make} {self.model}"# 客户端代码
def main():prototype = Prototype()# 注册原型对象car = Car()prototype.register_object("car", car)# 克隆对象并修改属性cloned_car = prototype.clone("car", year=2021)print(cloned_car)  # 输出: 2021 Toyota Camryif __name__ == "__main__":main()
  • 输出结果
2021 Toyota Camry

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shopee与Lazada卖家如何运用自养号测评稳定提升销量于评价

在跨境电商行业中,测评对于提高产品销量是个非常优秀的辅助方式。作为东南亚电商巨头,Shopee和Lazada这两大主流平台上,卖家竞争也尤为激烈,卖家们不断寻求有效的方法提升自己的产品销量。为了应对这一挑战,测评应运而…

若依框架改造多租户模式

当前使用版本3.6.416.20.2 (Currently using 64-bit executable)https://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html 一、若依Cloud改为多租户模式 当前使用版本3.6.4,既然要改为多租户模式,多租户重点是什么,数据隔离,那么…

4、后端本地环境搭建

后端本地环境搭建 4.1 安装jdk 下载完成后双击安装的 jdk ,点下一步,选择安装目录,一直点下一步,直到结束。 安装完成后同样需要配置环境变量 window s 搜索查看高级系统设置—— 高级 —— 环境变量 —— 系统变量 1、新建一…

java自动化之java基础03-09java基础之数组

数组 1、定义 数组是一种用于存储固定大小的同类型数据的数据结构 1)固定大小 2)同类型数据的存储 2、声明数组 1)数据类型[] 变量名称; 例如:int[] numsArry; 2)数据类型 变量名称[]; 例如&#xf…

Linux RS232

一、确认硬件信息 RS232: 引脚信息: 二、软件配置 1、pinctrl信息: 2、设备树节点: 3、修改串口支持的模式 三、驱动 bsp/drivers/uart/sunxi-uart.c 四、烧录测试 查看串口参数: stty -F /dev/ttyAS3 -a stty -F…

TqdmWarning: IProgress not found. Please update jupyter and ipywidgets.

jupyter notebook报错 在pycharm的terminal中 安装完成后就不会再报错了

私有仓库搭建

目前市面上比较常见的私有仓库搭建方法为: 通过 Sinopia 或 verdaccio 搭建(Sinopia 已经停止维护,verdaccio 是 Fork 自 Sinopia,基本上大同小异),其优点是搭建简单,不需要其他服务。通过 cnp…

【最新鸿蒙应用开发】——沙箱机制是什么?作用?场景?

沙箱机制 1. 什么是沙箱机制? 1.1. 概念 在操作系统当中,沙箱机制(Sandboxing)是一种安全机制,用于限制程序代码的访问权限,防止恶意软件对系统造成破坏。在沙箱环境中,程序只能访问特定的资…

动态库加载【Linux】

从此往后,建立映射,我们执行的任何代码,都是在我们的进程地址空间中进行执行 例如:将动态库映射到共享区,进程在CPU调度时,是在进程的进程地址空间处运行 程序在编译好之后,在加载到内存之前&a…

欧美北美南美国外媒体投稿和东南亚中东亚洲媒体海外新闻发稿软文推广营销策略有哪些?

在当今全球化的浪潮中,中国品牌正积极拓展海外市场,寻求更广阔的发展空间。面对国际竞争,有效的海外媒体发稿营销策略对于品牌国际化至关重要。以下是一些关键点和建议,以帮助品牌在海外市场取得成功。 深入了解目标市场&#xf…

Linux 内核之 mmap 内存映射触发的缺页异常 Page Fault

文章目录 前言一、简介1. MMU 内存管理2. 缺页中断3. 页表4. 小节 二、mmap 提前分配物理内存1. mm_populate 函数2. __mm_populate 函数3. populate_vma_page_range 函数4. __get_user_pages 函数5. find_extend_vma 函数6. find_vma 函数7. follow_page_mask 函数8. follow_p…

Ubuntu22.04 下 pybind11 搭建,示例

Pybind11 是一个轻量级的库,用于在 C 中创建 Python 绑定。Ubuntu22下安装pybind11步骤如下: 1. 安装 pybind11 1.1 pip 命令安装 pip3 install pybind11 1.2 源代码安装 安装依赖库: sudo pip install -i https://pypi.tuna.tsinghua.e…

NPDP考试通过后别大意,注意这3点!

2024年5月12日NPDP考试成绩已出,大家从6月5日开始可以查询自己NPDP考试成绩了,那是不是通过考试了就可以了呢?当然不是,那NPDP考完后,你还需要做什么? 一、NPDP电子证书下载 1、在网上搜索“产品经理国际…

VSsode快捷操作

删除node_modules 安装命令:npm install rimraf -g 删除命令:rimraf node_modules node版本切换 安装mvn :https://github.com/coreybutler/nvm-windows/releases 安装完成后,列出可用的 Node.js 版本:nvm list available 安装…

代码随想录算法训练营第28天|回溯

回溯part04 93. 复原 IP 地址 组合问题(分割问题) 调试了两次,第一是是边界值cn没有弄正确,如果初始取1的话,只有在等于5的时候才会退出,下面这个是改过了,初始取0 /*** param {string} s* …

一、Electron 环境初步搭建

新建一个文件夹,然后进行 npm init -y 进行初始化,然后我们在进行 npm i electron --save-dev , 此时我们按照官网的教程进行一个初步的搭建, 1.在 package.json 文件进行修改 {"name": "electron-ui","version…

【全开源】多功能投票小程序系统源码(ThinkPHP+FastAdmin+Uniapp)

🚀 多功能投票小程序,让决策变得更简单! 基于ThinkPHPFastAdminUniapp开发的多功能系统,支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c…

Python 的七个HTTP请求库对比

Python HTTP请求库对比 库名称特点优点缺点requests简单易用的HTTP库,基于urllib3。- 语法简洁- 社区支持强大- 易于上手和维护- 阻塞式调用,不支持异步操作- 相比aiohttp体积较大http.clientPython标准库中的低级HTTP库。- 无需安装第三方库- 提供底层…

Java项目如何外发告警日志到企业微信

前言 最近领导交代了一个需求,就是有些许客户不单单满足平台告警日志外发到邮箱、短信的形式,还要以消息聊天的形式外发给企业微信。 具体操作 1、注册企业微信。 2、登录企业微信,找到应用管理,创建应用。 3、创建完之后需要记录以下图片中两个值的信息。 4、然后记录下…

vue实现大语言模型返回的数据将代码高亮显示的实现

0. 引言 最近在学习ai大模型相关的东西,就想着自己做一个类似于chatGPT的网站,做到最后的时候代码块始终是不能高亮显示,以前一直搞Java没太了解过前端vue相关的东西,经过自己查资料,自己慢慢也是研究出来了。 这个项目…