Factory模式具有两大重要的功能:

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

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

//Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_ class Product
{
public:
virtual ~Product();
protected:
Product();
private: }; class ConcreteProduct:public Product
{
public:
ConcreteProduct();
~ConcreteProduct();
protected: private:
};
#endif //_PRODUCT_H_
//Product.cpp
#include "Product.h"
#include <iostream>
using namespace std; Product::Product()
{}
Product::~Product()
{}
ConcreteProduct::ConcreteProduct()
{}
ConcreteProduct::~ConcreteProduct()
{}
//Factory.h
#ifndef _FACTORY_H_
#define _FACTORY_H_ class Product;
class Factory
{
public:
virtual ~Factory();
virtual Product *CreateProduct() = ;
protected:
void Factory();
private:
}; class ConcreteFactory:public Factory
{
public:
ConcreteFactory();
~ConcreteFactory();
Product * CreateProduct();
protected:
private:
};
#endif //_FACTORY_H_
//Fatory.cpp

#include "Factory.h"
#include "Product.h" #include <iostream>
using namespace std; Factory::Factory()
{}
Factory::~Factory()
{} ConcreteFactory::ConcreteFactory()
{}
ConcreteFactory::ConcreteFactory()
{} Product ConcreteFactory::CreateProduct()
{
ConcreteProduct cproduct = new ConcreteProduct;
return product;
}
//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 ;
}

设计模式之Factory模式(C++)的更多相关文章

  1. 设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明

    Abstract Factory模式(abstract factory pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/ ...

  2. c++设计模式系列----factory模式

    问题: 假设我们要开发一个游戏--打怪物,首先,游戏有分等级,假设有初级,中级两个个等级(就不用flappy bird模式了,那个比较特殊,对一个玩家来说是难以具有持久吸引力的!),不同的等级怪物也是 ...

  3. 设计模式之Factory模式 代码初见

    ObjectFactory就是通过Factory建造一个Object,比如说DBConnectionFactory就是专门建造DBConnection的工厂 BuilderFactory就是通过Fac ...

  4. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

  5. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  6. 设计模式---对象创建模式之抽象工厂模式(Abstract Factory)

    一:概念 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 二:动机 在软件系统 ...

  7. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  8. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

  9. 设计模式-Builder和Factory模式区别

    Builder和Factory模式区别 Builder模式结构: Factory模式一进一出,Builder模式是分步流水线作业.当你需要做一系列有序的工作或者按照一定的逻辑来完成创建一个对象时 Bu ...

随机推荐

  1. ABP入门系列之1——ABP总体介绍

    ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点, ...

  2. centos7.4卸载再安装mariadb服务无法启动问题

    今天yum安装MariaDB完成后,启动服务时一直报以下错误 Job for mariadb.service failed. See ‘systemctl status mariadb.service ...

  3. vue 3.0的搭建

    1. 删除以前的vue 2.x版本,并下载3.x版本 npm uninstall -g vue-cli / yarn global remove vue-cli npm install -g @vue ...

  4. appium+python3+pycharm踩得坑

    错误: selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Ori ...

  5. FL Studio中的音频设置

    在FL Studio中,有一步很关键的设置需要我们详细熟悉了解,它就是音频设置,什么是音频设置呢?它就是需要我们选择音频设备驱动程序并优化设置.在了解音频设备之前,我们先来看看什么是音频设备. 我们的 ...

  6. eclipse上的.properties文件中文编辑显示问题

    安装 装Properties Editor插件,方法: Help --> Install New Software -->输入:http://propedit.sourceforge.jp ...

  7. redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.

    $ pip install redis>>> import redis>>> conn = redis.Redis()>>> conn.keys( ...

  8. Java面向对象内存分析

    title: Java面向对象内存分析 date: 2018-07-28 11:12:50 tags: JavaSE categories: - Java - JavaSE 一.Java虚拟机的内存区 ...

  9. C C++互相调用注意

    注意:直接调用会找不到函数定义 1. C 调用 C++封装好后的函数: 在C++中有一个函数 int main_cpp(): 首先构建头文件, #ifndef CPP_FILE_H   #define ...

  10. swift 有道 翻译文档(1 定义变量常量,数组字典)

    使用let来创建常量,使用var来创建变量.一个常量的值在编译时不需要知道,但是您必须为它指定一个值一次.这意味着您可以使用常量来命名一个您确定一次的值,但是在许多地方使用它.var myVariab ...