C++创建型设计模式综合示例

在3D CAD软件中,创建型设计模式起着至关重要的作用,它们帮助软件以灵活且可维护的方式创建和管理复杂的3D模型和相关对象。以下是以一个3D CAD软件为例,阐述5种创建型模式(单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式)在其中的用途,并给出C++框架性示例代码。

1. 单例模式(Singleton Pattern)

用途:确保3D CAD软件中某些全局唯一的对象(如配置管理器、全局渲染设置等)只有一个实例,并提供全局访问点。

C++示例代码

cpp 复制代码
class ConfigManager {
private:
    static ConfigManager* instance_;
    ConfigManager() {} // 私有构造函数
public:
    static ConfigManager* getInstance() {
        if (instance_ == nullptr) {
            instance_ = new ConfigManager();
        }
        return instance_;
    }
    // 其他配置管理相关的方法...
};
ConfigManager* ConfigManager::instance_ = nullptr;

2. 工厂方法模式(Factory Method Pattern)

用途:在3D CAD软件中,用于创建不同类型的3D对象(如长方体、圆柱体等),将对象的创建过程封装在工厂方法中,客户端无需知道具体创建细节。

C++示例代码

cpp 复制代码
class Shape {
public:
    virtual void draw() = 0;
};

class Cube : public Shape {
public:
    void draw() override { /* 绘制长方体的代码 */ }
};

class Cylinder : public Shape {
public:
    void draw() override { /* 绘制圆柱体的代码 */ }
};

class ShapeFactory {
public:
    virtual Shape* createShape() = 0;
};

class CubeFactory : public ShapeFactory {
public:
    Shape* createShape() override { return new Cube(); }
};

class CylinderFactory : public ShapeFactory {
public:
    Shape* createShape() override { return new Cylinder(); }
};

3. 抽象工厂模式(Abstract Factory Pattern)

用途:在3D CAD中,用于创建一系列相关或相互依赖的对象(如一套家具中的椅子、桌子等)。它提供了一个接口,用于创建多个产品族中的产品对象。

C++示例代码(基于上面的工厂方法模式扩展):

cpp 复制代码
class FurnitureFactory {
public:
    virtual Shape* createChair() = 0;
    virtual Shape* createTable() = 0;
};

class ModernFurnitureFactory : public FurnitureFactory {
public:
    Shape* createChair() override { /* 创建现代风格的椅子 */ }
    Shape* createTable() override { /* 创建现代风格的桌子 */ }
};

class ClassicFurnitureFactory : public FurnitureFactory {
public:
    Shape* createChair() override { /* 创建古典风格的椅子 */ }
    Shape* createTable() override { /* 创建古典风格的桌子 */ }
};

4. 建造者模式(Builder Pattern)

用途:在3D CAD软件中,用于构建复杂的3D模型,允许按步骤构造对象,并可以只通过指定必要的步骤来创建不同的表示。

C++示例代码

cpp 复制代码
class ModelBuilder {
protected:
    Model* model;
public:
    ModelBuilder() { model = new Model(); }
    virtual ~ModelBuilder() { delete model; }
    virtual void buildFoundation() = 0;
    virtual void buildWalls() = 0;
    virtual void buildRoof() = 0;
    Model* getModel() { return model; }
};

class HouseBuilder : public ModelBuilder {
public:
    void buildFoundation() override { /* 构建房屋地基的代码 */ }
    void buildWalls() override { /* 构建房屋墙壁的代码 */ }
    void buildRoof() override { /* 构建房屋屋顶的代码 */ }
};

5. 原型模式(Prototype Pattern)

用途:在3D CAD中,当创建新对象成本较高时(如复杂的3D模型),可以通过原型模式复制已有对象来提高效率。它允许通过复制(或克隆)一个已经存在的对象来创建一个新对象。

C++示例代码

cpp 复制代码
class Prototype {
public:
    virtual Prototype* clone() = 0;
    virtual void display() = 0;
    virtual ~Prototype() {}
};

class ConcretePrototype : public Prototype {
private:
    // 假设这里有一些复杂的数据结构表示3D模型
public:
    ConcretePrototype() { /* 初始化代码 */ }
    ConcretePrototype(const ConcretePrototype& other) { /* 深拷贝代码 */ }
    Prototype* clone() override { return new ConcretePrototype(*this); }
    void display() override { /* 显示3D模型的代码 */ }
};

在3D CAD软件的实际应用中,这些创建型设计模式可以单独使用,也可以组合使用,以提供灵活且可扩展的对象创建机制。它们有助于减少代码之间的耦合度,提高系统的可维护性和可扩展性。

相关推荐
秦苒&1 分钟前
【C语言】详解数据类型和变量(一):数据类型介绍、 signed和unsigned、数据类型的取值范围、变量、强制类型转换
c语言·开发语言·c++·c#
我爱学习_zwj2 分钟前
动态HTTP服务器实战:解析请求与Mock数据
开发语言·前端·javascript
梅孔立14 分钟前
【实用教程】python 批量解析 EML 邮件文件 存成txt ,可以利用 AI 辅助快速生成年终总结
开发语言·python
c#上位机25 分钟前
C#异步编程之async、await
开发语言·c#
智者知已应修善业36 分钟前
【删除有序数组中的重复项 II之O(N)算法】2024-1-31
c语言·c++·经验分享·笔记·算法
郑州光合科技余经理37 分钟前
实战分享:如何构建东南亚高并发跑腿配送系统
java·开发语言·javascript·spring cloud·uni-app·c#·php
爱装代码的小瓶子38 分钟前
【c++进阶】C++11新特性:一切皆可{}初始化
开发语言·c++·visual studio
yaoxin52112342 分钟前
273. Java Stream API - Stream 中的中间操作:Mapping 操作详解
java·开发语言·python
技术小甜甜43 分钟前
[Python实战] 告别浏览器驱动烦恼:用 Playwright 优雅实现网页自动化
开发语言·python·自动化
vortex543 分钟前
Bash 替换机制(一):命令替换与进程替换
开发语言·chrome·bash