当前位置: 首页 > news >正文

品牌营销网站12380网站的建设情况

品牌营销网站,12380网站的建设情况,哪个网站最好,亚马逊使用wordpress做的引言 在软件开发中,原型模式是一种常用的设计模式,主要用于创建对象的克隆。通过原型模式,我们可以避免复杂的对象创建过程,尤其是当对象的初始化需要大量资源或复杂操作时。本文将通过一个具体的例子,详细介绍如何在C…

引言

在软件开发中,原型模式是一种常用的设计模式,主要用于创建对象的克隆。通过原型模式,我们可以避免复杂的对象创建过程,尤其是当对象的初始化需要大量资源或复杂操作时。本文将通过一个具体的例子,详细介绍如何在C++中使用C++11和泛型编程来实现原型模式,并探讨其在面向对象设计原则中的应用。

实现步骤

1. 定义基类

首先,我们需要定义一个基类Prototype,它将作为所有具体行为类的父类。基类中包含两个纯虚函数:clone()execute()

#include <memory>
#include <string>
#include <typeindex>
#include <unordered_map>template <typename T>
class Prototype {
public:virtual ~Prototype() = default;virtual std::shared_ptr<Prototype<T>> clone() const = 0;virtual void execute() const = 0;
};
  • clone():用于克隆当前对象,返回一个指向新对象的智能指针。
  • execute():用于展示具体的行为,每个子类将根据自己的行为实现该方法。

2. 创建具体行为类

接下来,我们创建三个具体的行为类,分别继承自Prototype,并实现各自的clone()execute()方法。

拿着饭碗吃饭的行为类

class EatYongYong : public Prototype<EatYongYong> {
public:std::shared_ptr<Prototype<EatYongYong>> clone() const override {return std::make_shared<EatYongYong>(*this);}void execute() const override {std::cout << "勇勇拿着饭碗在吃饭。" << std::endl;}
};

打压下属的行为类

class PressYongYong : public Prototype<PressYongYong> {
public:std::shared_ptr<Prototype<PressYongYong>> clone() const override {return std::make_shared<PressYongYong>(*this);}void execute() const override {std::cout << "勇勇在打压下属。" << std::endl;}
};

欺骗领导的行为类

class DeceiveYongYong : public Prototype<DeceiveYongYong> {
public:std::shared_ptr<Prototype<DeceiveYongYong>> clone() const override {return std::make_shared<DeceiveYongYong>(*this);}void execute() const override {std::cout << "勇勇在欺骗领导。" << std::endl;}
};

3. 创建管理类

为了管理不同行为的YongYong对象,我们创建一个PrototypeManager类。该类使用std::unordered_map存储不同行为的原型对象,并提供获取原型对象的方法。

template <typename... Types>
class PrototypeManager {
private:using PrototypeMap = std::unordered_map<std::type_index, std::shared_ptr<std::decay_t<Types>>...>;PrototypeMap prototypes;public:template <typename T, typename... Args>void registerPrototype(const Args&... args) {prototypes[std::type_index typeid(T)] = std::make_shared<T>(args...);}template <typename T>std::shared_ptr<T> getPrototype() const {auto it = prototypes.find(std::type_index typeid(T));if (it != prototypes.end()) {return std::dynamic_pointer_cast<T>(it->second->clone());}return nullptr;}
};

4. 使用管理类创建对象

main函数中,我们使用PrototypeManager创建不同行为的YongYong对象,并调用它们的execute()方法。

int main() {PrototypeManager<EatYongYong, PressYongYong, DeceiveYongYong> manager;manager.registerPrototype<EatYongYong>();manager.registerPrototype<PressYongYong>();manager.registerPrototype<DeceiveYongYong>();auto yongYong1 = manager.getPrototype<EatYongYong>();yongYong1->execute();auto yongYong2 = manager.getPrototype<PressYongYong>();yongYong2->execute();auto yongYong3 = manager.getPrototype<DeceiveYongYong>();yongYong3->execute();return 0;
}

代码解释

基类Prototype

  • ~Prototype() = default;:提供默认的析构函数,确保子类对象能够正确析构。
  • clone():纯虚函数,定义克隆方法,子类必须实现。
  • execute():纯虚函数,定义行为方法,子类必须实现。

具体行为类

每个具体行为类(如EatYongYong)都继承自Prototype,并实现以下方法:

  • clone()方法:返回自身对象的克隆。
  • execute()方法:展示具体行为。

管理类PrototypeManager

  • prototypes:使用std::unordered_map存储不同行为的原型对象,键为std::type_index,值为对应行为的智能指针。
  • registerPrototype()方法:允许在运行时动态注册新的行为类,并支持传入构造参数。
  • getPrototype()方法:根据类型返回对应的原型对象的克隆。

面向对象设计原则分析

  1. 单一职责原则(SRP)
  • 基类Prototype:职责明确,定义克隆和行为方法。
  • 具体行为类:每个类只实现一个具体行为。
  • 管理类PrototypeManager:职责单一,管理原型对象。
  1. 开闭原则(OCP)
  • 基类Prototype:允许子类扩展行为,无需修改基类。
  • 管理类PrototypeManager:通过添加新的行为类扩展功能,无需修改现有代码。
  1. 里氏替换原则(LSP)
  • 具体行为类:可以替换基类Prototype对象,确保代码正确性。
  1. 依赖倒置原则(DIP)
  • 管理类PrototypeManager:依赖于抽象的Prototype接口,而不是具体实现。
  1. 接口隔离原则(ISP)
  • 基类Prototype:定义清晰的接口,无冗余方法。
  • 具体行为类:只实现需要的方法。
  1. 合成复用原则(CRP)
  • 管理类PrototypeManager:通过组合管理对象,而不是通过继承复用代码。

总结

通过使用C++11和泛型编程技术,改进后的原型模式实现具有以下优势:

  1. 类型安全:使用std::type_index和模板参数,避免了原始代码中的字符串键和类型转换问题。
  2. 灵活性:支持任意数量的行为类,扩展性更强。
  3. 性能:编译时类型检查和std::unordered_map的使用,提高了运行效率。
  4. 可维护性:代码更加模块化,新增行为类更加简单。

这种改进后的原型模式实现,能够更好地满足现代C++开发需求,同时保持代码的简洁和高效。希望本文能够帮助读者更好地理解和应用原型模式以及相关的面向对象设计原则。

http://www.dtcms.com/a/555644.html

相关文章:

  • 网站建设 技术协议wordpress wp list categories
  • OpenAI Codex Codex CLI 国内使用教程:手把手教你安装与上手
  • 国内做网站群平台的公司重庆专业的网站建设
  • 网站建设毕业设计个人总结企业网站的建立步骤
  • word模板免费网站哪些人可以做网站
  • 星宿网站建设免费流程图制作网站
  • wordpress引用图片样式网站内部优化的方法
  • 百度收录什么网站重庆网站建设 观音桥
  • 浅谈海尔的电子商务网站建设永久免费内存大服务器
  • 烟台学校网站建设系统客户管理软件
  • 网站建设的软硬件平台网站配色风格有哪些
  • 南京网站建设培训班手表网站排名大全
  • 石家庄站到石家庄北站上海品牌策划公司有哪些
  • 沂源网站设计免费下载微信小程序
  • 操作系统基础·2 操作系统的运行环境和运行机制
  • 网站设计所需软件广西南宁网站公司
  • 青岛品牌网站建设价格公司网站开发找哪家
  • 做旅游平台网站找哪家好什么网站做视频
  • 招商局网站建设方案熟练做网站需要了解什么
  • 要想浏览国外网站 应该怎么做网页微信扫码登录
  • 自己做网站要服务器吗昆明市网站建设
  • Rust开发之使用Trait对象实现多态
  • 怎么创建个人的网站注册深圳公司流程及费用
  • 做网站的公司怎么做抖音账号怎样查找网站开发者
  • 网站优化建设安徽思帽西宁网站建设
  • 分析苏宁易购网站内容建设深圳app制作开发公司排名
  • 个人网站建立策划书前言30分钟网站建设教程视频
  • 网站建设的总体目标包含哪几个方面做网站 长
  • 做网站空间会招攻击不用编程做网站
  • 成都鸿邑网站建设网站注册域名免费