谈谈我对设计模式的认识

设计模式解析:以单例模式为例,

一、设计模式

我了解过一些设计模式,它们有单例模式简单工厂模式抽象工厂模式策略模式观察者模式组合模式,至于还有其他诸如装饰、代理、建造者、责任链等,受限于编程经验,都只听说过名字。
其中单例模式和工厂模式在我的印象中应该是C++项目中比较常见的设计模式了,我自己也经常在项目里用到。观察者模式我也用过一点,就是在编写一个基于Windows的GUI框架时,将自己封装的窗口类作为观察者,维护一个被观察者容器,各种属于窗口的节点类(如按钮类)作为被观察者可接收通知。

二、设计模式举例:单例模式

就稍微多说说单例模式吧,单例模式就非常常见了,其实现也比较简单。按我自己的理解来说就是构建一个只能存在一个实例的类,比如在cocos2dx源码中的Director类:

//CCDirector.h部分代码
class CC_DLL Director : public Ref
{
public:
    static Director* getInstance();

    Director();
    ~Director();
    bool init();
    
	/*
	此处省略许多声明
	*/
};

//CCDirector.cpp部分代码
static Director *s_SharedDirector = nullptr;
Director* Director::getInstance()
{
    if (!s_SharedDirector)
    {
        s_SharedDirector = new (std::nothrow) Director;
        CCASSERT(s_SharedDirector, "FATAL: Not enough memory");
        s_SharedDirector->init();
    }

    return s_SharedDirector;
}

Director类即导演类,cocos将游戏开发类比于拍电影Director类作为导演具有控制全局的作用,包括控制整个游戏的流程即开始、继续、暂停等。但导演只能有一个,因此,这就需要用到单例模式,用户通过getInstance接口获取导演的唯一实例指针。单例模式分为懒汉模式饿汉模式,以上代码需要第一次调用getInstance后指针s_SharedDirector才会被初始化,属于懒汉模式,至于两者的区别就不谈啦。

三、学习设计模式的意义

按照我个人的理解,设计模式是软件项目架构的利器,是学习面向对象程序设计的必要环节。设计模式也是面试时被考察的重点。在初学阶段,我觉得了解两三个常见的设计模式已经够了,剩下的可以在编程实践中慢慢扩展,有些设计模式在代码量足够的前提下学习之后感悟更深,收获更大。

<think>好的,我现在需要帮用户解答关于创建型设计模式的问题。首先,用户已经询问过产品族和产品等级结构,现在转向创建型模式的定义、特点和应用场景。根据用户提供的引用资料,特别是引用1和引用3,我需要整理这些信息。 首先,定义部分。创建型模式处理对象创建机制,确保灵活性和复用性。引用1提到设计模式分为创建型、结构型、行为型,其中创建型模式包括工厂方法、抽象工厂、单例等。需要明确这些模式的核心目标,比如解耦实例化过程。 接下来是特点。根据引用3,原型模式避免了工厂类的层级结构,使用克隆方法。这说明创建型模式的一个特点是简化创建结构,可能通过克隆或延迟实例化等方式。需要总结出如封装创建逻辑、支持扩展、解耦等共同特点。 然后是应用场景。用户可能需要具体例子,比如配置管理用单例,跨平台UI用抽象工厂。引用中的例子如工厂方法对应产品等级结构,抽象工厂处理产品族,这些需要结合之前的回答中的内容,确保一致性。 还要注意用户之前的提问涉及产品族和等级结构,所以在回答创建型模式时,需要联系抽象工厂和工厂方法的区别,如引用3提到的原型模式不需要工厂类层级结构,这可能是一个对比点。 需要检查是否有遗漏的模式,比如建造者模式,是否有必要提到。引用2虽然主要讲结构型,但用户现在关注创建型,所以重点放在创建型的五种模式。 最后生成相关问题,可能需要引导用户深入某个模式,或比较不同模式的优缺点。比如单例模式的双重检查锁定,或者工厂方法与抽象工厂的区别。 确保使用正确的中文术语,避免技术术语错误,比如“解耦”而不是“解偶”。同时,按照用户要求,行内公式用$...$,独立公式用$$...$$,但创建型模式可能涉及较少数学,但如果有类结构图,可能需要用代码块展示。 现在组织内容,先定义,再特点,应用场景分点,每个模式举例,最后相关问题。确保引用标注正确,如引用1和引用3的相关部分。</think>以下是对创建型设计模式的系统解析,结合您之前对产品族/等级结构的理解进行扩展: --- ### 一、核心定义 **创建型设计模式**是23种设计模式中最基础的类别,专注于**对象创建机制**的优化,通过**控制实例化过程**实现: 1. 解耦客户端代码与具体类实例化的直接依赖 2. 提升系统对对象创建/组合方式的灵活性 3. 支持复杂对象构造的标准化流程[^1] $$ComplexObject = Factory.create(config)$$ <!-- 抽象创建过程的数学表达 --> --- ### 二、五大模式对比 | 模式名称 | 核心思想 | 典型应用场景 | 与产品族/等级结构的关联 | |----------------|----------------------------|----------------------------|---------------------------------| | **工厂方法** | 延迟子类决定实例化类型 | 单一产品等级结构扩展 | 对应产品等级结构的纵向扩展[^3] | | **抽象工厂** | 创建相关产品族的接口 | 多关联产品的组合创建 | 直接管理产品族横向组合[^1] | | **建造者** | 分步构造复杂对象 | 含多个组成部件的对象创建 | 组合不同产品等级结构的部件 | | **原型** | 通过克隆生成新对象 | 避免重复初始化开销 | 快速复制现有产品族配置[^3] | | **单例** | 确保全局唯一实例 | 资源管理器/配置中心 | 工厂对象的共享访问 | --- ### 三、关键特点 1. **封装创建逻辑** 将`new`操作封装在特定位置(如工厂类),客户端只需关注接口: ```java // 抽象工厂示例 interface GUIFactory { Button createButton(); Menu createMenu(); } ``` 2. **支持动态配置** 通过配置文件切换具体实现(如Spring的BeanFactory): ```xml <bean id="dbFactory" class="com.example.MySQLFactory"/> ``` 3. **解耦系统结构** 符合依赖倒置原则(DIP),高层模块不依赖具体实现: $$HighLevelModule \xrightarrow{depend} AbstractFactory \xleftarrow{implement} ConcreteFactory$$ --- ### 四、应用场景详解 #### 1. 跨平台UI开发(抽象工厂) - **需求**:为Windows/MacOS提供统一风格的控件 - **实现**: ```typescript interface UIThemeFactory { createButton(): Button; createDialog(): Dialog; } class MacFactory implements UIThemeFactory { createButton() { return new MacStyledButton() } createDialog() { return new TransparentDialog() } } ``` #### 2. 游戏角色生成(建造者) - **需求**:构造包含装备/技能的角色对象 - **优势**: - 分离角色属性设置与构造过程 - 支持分步生成复杂对象 ```python class CharacterBuilder: def set_weapon(self, weapon): ... def set_armor(self, armor): ... def build(self) -> Character: ... # 创建重甲战士 builder.set_weapon(GreatSword()).set_armor(PlateArmor()) ``` #### 3. 数据库连接池(单例) - **需求**:全局管理有限数据库连接 - **实现要点**: ```java public class ConnectionPool { private static volatile ConnectionPool instance; private ConnectionPool() { /* 初始化连接池 */ } public static ConnectionPool getInstance() { if (instance == null) { synchronized (ConnectionPool.class) { if (instance == null) { instance = new ConnectionPool(); } } } return instance; } } ``` --- ### 五、模式选择指南 1. **需要灵活扩展产品类型** → 工厂方法 2. **处理相关联的产品组合** → 抽象工厂 3. **构造过程复杂的复合对象** → 建造者 4. **避免重复创建同类对象** → 原型/单例 5. **系统资源全局访问点** → 单例 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值