Factory模式

简介:

  Factory模式的两个重要功能:

1)定义创建对象的接口,封装了对象的创建;

2)使得具体化类的工作延迟到了子类中。

  声明一个创建对象的接口,并封装了对象的创建过程的Factory的结构示意图为:

  Factory模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化。

 

                  图二

  图二中Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图二和图一的区别所在。

 

完整代码示例:


//Product.h 
#ifndef _PRODUCT_H_ 
#define _PRODUCT_H_ 
class Product { 
public:
    virtual ~Product() =0; 
protected: 
    Product(); //屏蔽构造函数
private: 
}; 
class ConcreteProduct:publicProduct { 
public: 
    ~ConcreteProduct(); 
    ConcreteProduct(); 
protected: 
private: 
}; 
#endif //~_PRODUCT_H_ 


//Product.cpp 
#include "Product.h" 
#include<iostream> using namespace std; 
 
Product::Product() { } 
Product::~Product() { } 
 
ConcreteProduct::ConcreteProduct() { 
    cout<<"ConcreteProduct...."<<endl; 
} 
 
ConcreteProduct::~ConcreteProduct() { } 


//Factory.h 
#ifndef _FACTORY_H_ #define _FACTORY_H_ 
class Product; 
class Factory { 
public:
    virtual ~Factory() = 0; 
    virtual Product* CreateProduct() = 0; 
protected:
    Factory(); 
private: 
}; 
class ConcreteFactory:public Factory {
public: 
    ~ConcreteFactory(); 
    ConcreteFactory(); 
    Product* CreateProduct(); 
protected: 
private: 
}; 
#endif //~_FACTORY_H_ 


//Factory.cpp 
#include "Factory.h" 
#include "Product.h" 
#include <iostream> using namespace std; 
Factory::Factory() { } 
Factory::~Factory() { } 
ConcreteFactory::ConcreteFactory() { 
    cout<<"ConcreteFactory....."<<endl; 
} 
ConcreteFactory::~ConcreteFactory() { } 
Product* ConcreteFactory::CreateProduct(){
    return new ConcreteProduct(); 
} 


//main.cpp 
#include "Factory.h"
#include "Product.h" 
#include <iostream>
using namespace std; 
int main(int argc,char* argv[]) {
    Factory* fac = new ConcreteFactory(); 
    Product* p = fac->CreateProduct(); 
    return 0; 
}


 示例代码中给出的是Factory模式解决父类中并不知道具体要实例化哪一个具体的子类的问题,至于为创建对象提供接口问题,可以由Factory中附加相应的创建操作例如Create***Product()即可。


目录
相关文章
|
1天前
|
人工智能 自然语言处理 Shell
🦞 如何在 Moltbot 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
🦞 如何在 Moltbot 配置阿里云百炼 API
|
6天前
|
人工智能 API 开发者
Claude Code 国内保姆级使用指南:实测 GLM-4.7 与 Claude Opus 4.5 全方案解
Claude Code是Anthropic推出的编程AI代理工具。2026年国内开发者可通过配置`ANTHROPIC_BASE_URL`实现本地化接入:①极速平替——用Qwen Code v0.5.0或GLM-4.7,毫秒响应,适合日常编码;②满血原版——经灵芽API中转调用Claude Opus 4.5,胜任复杂架构与深度推理。
|
9天前
|
JSON API 数据格式
OpenCode入门使用教程
本教程介绍如何通过安装OpenCode并配置Canopy Wave API来使用开源模型。首先全局安装OpenCode,然后设置API密钥并创建配置文件,最后在控制台中连接模型并开始交互。
4360 8
|
15天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
10057 21
|
2天前
|
人工智能 自然语言处理 Cloud Native
大模型应用落地实战:从Clawdbot到实在Agent,如何构建企业级自动化闭环?
2026年初,开源AI Agent Clawdbot爆火,以“自由意志”打破被动交互,寄生社交软件主动服务。它解决“听与说”,却缺“手与脚”:硅谷Manus走API原生路线,云端自主执行;中国实在Agent则用屏幕语义理解,在封闭系统中精准操作。三者协同,正构建AI真正干活的三位一体生态。
2177 6
|
1天前
|
存储 安全 数据库
使用 Docker 部署 Clawdbot(官方推荐方式)
Clawdbot 是一款开源、本地运行的个人AI助手,支持 WhatsApp、Telegram、Slack 等十余种通信渠道,兼容 macOS/iOS/Android,可渲染实时 Canvas 界面。本文提供基于 Docker Compose 的生产级部署指南,涵盖安全配置、持久化、备份、监控等关键运维实践(官方无预构建镜像,需源码本地构建)。
870 2
|
16小时前
|
机器人 API 数据安全/隐私保护
只需3步,无影云电脑一键部署Moltbot(Clawdbot)
本指南详解Moltbot(Clawdbot)部署全流程:一、购买无影云电脑Moltbot专属套餐(含2000核时);二、下载客户端并配置百炼API Key、钉钉APP KEY及QQ通道;三、验证钉钉/群聊交互。支持多端,7×24运行可关闭休眠。
|
17天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
2533 18