设为首页 加入收藏

TOP

Factory Method(工厂方法)-对象创建型模式
2019-09-03 01:52:48 】 浏览:16
Tags:Factory Method 工厂 方法 对象 创建 模式

1.意图

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

2.动机

    框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责。

3.适用性

  • 当一个类不知道它所必须创建的对象的类的时候。
  • 当一个类希望由它的子类来指定它所创建的对象的时候。
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一局部化的时候。

4.结构

         

5.代码实例

    

class Product { public: virtual ~Product() = 0; }; class OneProduct : public Product { public: OneProduct(); }; class TwoProduct : public Product { public: TwoProduct(); }; class ThreeProduct : public Product { public: ThreeProduct(); }; class FourProduct : public Product { public: FourProduct(); };
Product.h
#include <memory>

class Product; class Creator { public: virtual std::shared_ptr<Product> FactoryMethod() = 0; }; class OneCreator : public Creator { public: std::shared_ptr<Product> FactoryMethod(); }; class TwoCreator : public Creator { public: std::shared_ptr<Product> FactoryMethod(); }; class ThreeCreator : public Creator { public: std::shared_ptr<Product> FactoryMethod(); }; class FourCreator : public Creator { public: std::shared_ptr<Product> FactoryMethod(); };
Creator.h
#include "Product.h" #include <iostream> Product::~Product() { } OneProduct::OneProduct() { std::cout << "OneProduct Created" << std::endl; } TwoProduct::TwoProduct() { std::cout << "TwoProduct Created" << std::endl; } ThreeProduct::ThreeProduct() { std::cout << "ThreeProduct Created" << std::endl; } FourProduct::FourProduct() { std::cout << "FourProduct Created" << std::endl; }
Product.cpp
#include "Creator.h" #include "Product.h" std::shared_ptr<Product> OneCreator::FactoryMethod() { auto pProduct = std::shared_ptr<Product>(new OneProduct()); return pProduct; } std::shared_ptr<Product> TwoCreator::FactoryMethod() { auto pProduct = std::shared_ptr<Product>(new TwoProduct()); return pProduct; } std::shared_ptr<Product> ThreeCreator::FactoryMethod() { auto pProduct = std::shared_ptr<Product>(new ThreeProduct()); return pProduct; } std::shared_ptr<Product> FourCreator::FactoryMethod() { auto pProduct = std::shared_ptr<Product>(new FourProduct()); return pProduct; }
Creator.cpp
#include<memory> #include"Creator.h"

int main() { auto pOneCreator = std::shared_ptr<OneCreator>(new OneCreator()); auto pOneProduct = pOneCreator->FactoryMethod(); auto pTwoCreator = std::shared_ptr<TwoCreator>(new TwoCreator()); auto pTwoProduct = pTwoCreator->FactoryMethod(); auto pThreeCreator = std::shared_ptr<ThreeCreator>(new ThreeCreator()); auto pThreeProduct = pThreeCreator->FactoryMethod(); auto pFourCreator = std::shared_ptr<FourCreator>(new FourCreator()); auto pFourProduct = pFourCreator->FactoryMethod(); while(1); }
Test.cpp

6.测试结果

7.效果

  • 优点:代码仅处理Product接口,不再绑定特定的ConcreteProduct。
  • 缺点:一个工厂方法仅创建一种产品,创建特定的ConcreteProduct需要创建Creator的子类。

8.变形

    工厂方法的变形是:可以参数化工厂方法,以使工厂方法可以创建多种产品。

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇设计模式--简单工厂模式之计算器 下一篇设计模式之笔记--解释器模式(Int..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目