C++23中设计模式的factory模式

工厂模式的目的是为了在想要创建的A类的子类B类, 想要用C类来创建, 但是只有C类的子类D类有。 咱们就可以通过工厂类来解决。 把C类当做factory类。

factory 模式的两个最重要的功能
1. 定义创建对象的接口, 封装了对象的创建;
2. 是的具体化类的工作延迟到了子类中。

factory模式, 通过factory类的子类来创建product类的子类。因为只有factory的子类才能知道自己要创建的是哪个product的子类。

View Code
// Factory.h: interface for the Factory class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_)
#define AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "Product.h"

class Factory  
{
public:
    virtual ~Factory();

    virtual Product *createProduct() = 0;

protected:
    Factory();

};

class ConcreateFactory: public Factory
{
public:
    ConcreateFactory();
    ~ConcreateFactory();

    Product *createProduct();
};

#endif // !defined(AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_)


//===================================


// Factory.cpp: implementation of the Factory class.
//
//////////////////////////////////////////////////////////////////////

#include "Product.h"
#include "Factory.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Factory::Factory()
{

}

Factory::~Factory()
{

}

ConcreateFactory::ConcreateFactory()
{

}

ConcreateFactory::~ConcreateFactory()
{

}

Product *ConcreateFactory::createProduct()
{
    return new ConcreateProduct();
}




//===================================


// Product.h: interface for the Product class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_)
#define AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Product  
{
public:
    Product();
    virtual ~Product();

};

class ConcreateProduct: public Product
{
public:
    ConcreateProduct();
    ~ConcreateProduct();
};

#endif // !defined(AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_)


//====================================


// Product.cpp: implementation of the Product class.
//
//////////////////////////////////////////////////////////////////////

#include <iostream>

#include "Product.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Product::Product()
{

}

Product::~Product()
{

}

ConcreateProduct::ConcreateProduct()
{
    std::cout << "create ConcreateProduct" << std::endl;
}

ConcreateProduct::~ConcreateProduct()
{

}


//======================================


#include "Factory.h"
#include "Product.h"

int main()
{
    Factory *fa = new ConcreateFactory();
    Product *pr = fa->createProduct();

    return 0;
}

 

posted @ 2013-03-12 20:57  xiaoln  阅读(275)  评论(0编辑  收藏  举报