c++ 创建型模式-工厂方法(Factory_Method)

1) 意图:

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。

2) 结构:

  

  其中:

    Product定义工厂方法所创建的对象的接口

    ConcreteProduct实现Product接口

    Creator声明工厂方法

    Creator和Product 一一对应,Creator可以派生多个具体工厂类,Proudct可以派生多个具体产品类,但每一个具体工厂类只能创建一个具体产品类的实例。

    (抽象工厂中,抽象工厂类可以对应多个抽象产品类,二者也都可以派生多个子类,且每个具体工厂类可以创建多个具体产品类)

3) 适用性:

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

4) 举例:

  

#include <iostream>
class  Product
{
public:
    Product()
    {
        std::cout << "Product" << std::endl;
    }
    virtual ~Product()
    {
        std::cout << "~Product" << std::endl;
    }
};
class ConcreateProduct : public Product
{
public:
    ConcreateProduct()
    {
        std::cout << "ConcreateProduct" << std::endl;
    }
    virtual ~ConcreateProduct()
    {
        std::cout << "~ConcreateProduct" << std::endl;
    }
};

class Creator
{
public:
    Creator()
    {
        std::cout << "Creator" << std::endl;
    }
    virtual ~Creator()
    {
        if (m_p)
        {
            std::cout << "~Creator delete m_p" << std::endl;
            delete m_p;
        }
    }
    void  AnOperation()
    {
        m_p = FactoryMethod();
    }
protected:
    virtual Product* FactoryMethod() = 0;
private:
    Product* m_p;
};
class ConcreateCreator : public Creator
{
public:
    Product* FactoryMethod()
    {
        return new ConcreateProduct();
    }
};
int main()
{
    Creator* p = new ConcreateCreator;
    p->AnOperation();
    delete p;
    system("pause");
}

原文地址:https://www.cnblogs.com/ho966/p/12228488.html

时间: 2024-08-10 07:57:45

c++ 创建型模式-工厂方法(Factory_Method)的相关文章

第4章 创建型模式—工厂方法模式(2)

2. 工厂方法模式 2.1工厂方法模式的定义 (1)定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类 ①Product:定义了工厂方法创建对象的接口.也就是实际需要使用的产品对象的接口 ②ConcreteProduct:具体的Product接口的实现对象. ③Factory(Creator):定义了工厂方法的抽象类并返回一个产品对象. ④ConcreteCreator:具体的创建器对象,该类实现和覆盖了父工厂类声明的方法.返回一个具体的Product实例

第4章 创建型模式—工厂方法模式(1)

1. 简单工厂 1.1 简单工厂的定义 (1)提供一个创建对象实例的功能,而无须关心其具体实现. ①Api接口:定义客户所需要的功能接口 ②Impl:具体实现Api的实现类,可能会有多个 ③SimpleFatory类:工厂,选择合适的实现类来创建Api接口对象 ④Client:客户端,通过Factory来获取Api接口对象,然后面向Api接口编程. (2)思考简单工厂 ①简单工厂的本质:选择实现,其重点在选择.工厂类内部的主要功能是“选择合适的实现类”来创建实例对象. ②简单工厂的目的:为客户端

创建型模式 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

说起模式来大家都很头疼.大篇的介绍和概念,还有类图.. 一 简单工厂模式不属于23中涉及模式,简单工厂一般分为:普通简单工厂.多方法简单工厂.静态方法简单工厂. 简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.它又称为静态工厂方法模式,属于类的创建型模式. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 普通简单工厂  多方法简单工厂 静态方法简单工厂 class SimpleFacto

设计模式_创建型模式——工厂方法

工厂方法(Factory Method):工厂方法模式属于类的创建型模式.在工厂方法模式中,父类负责定义创建产品对象的工厂接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化哪一个类. abstract Product factoryMethod(String type) abstract:工厂方法是抽象的,依赖子类来处理对象的创建 Product:工厂方法返回一个产品,超类中定义的方法,通常使用到工厂方法的返回值 String:工厂方法

2 创建型模式-----工厂方法模式

简单工厂模式的不足:加入新产品的同时需要修改工厂类,违背“开闭原则”. 模式动机:增加一个抽象工厂类,再定义具体工厂类来生产具体的产品,增加新产品时只需要添加产品类和对应的具体工厂类即可.由于我们是对抽象工厂进行编程,因此可以在不修改抽象工厂的前提下增加新产品. 模式定义:工厂方法模式(Factory Method Pattern)又称工厂模式.虚构造器.该模式下,抽象工厂负责创建产品的公共接口,具体工厂继承自该接口来具体生产产品,这样就相当于将产品的实例化延迟到工厂子类中完成. 模式结构图:

创建型模式--工厂方法

1.意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 2.结构 3.参与者 Product——定义工厂方法所创建对象的接口. ConcreteProduct——实现Product接口 Creator——声明工厂方法,该方法返回一个Product类型对象.Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象. ConcreteCreator——重定义工厂方法以返回一个Concret

创建型模式-工厂三姐妹

简单工厂模式: 就简单工厂而言,算是三姐妹之中最小的一个,也是最简单的一个了! 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.虽然为很多模式提供了基础与方便,但是他却不属于23种GOF设计模式之一,至于为什么?或许就是因为他不符合开放-封闭老爷子的脾气吧! 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂方法模式: 最大的特点就是针对每一个对象建造一个工厂.同时这也是这个模式的缺点.由于每加一个产品,就要增加一个产品工厂的类,这样无疑就增加了额外的开发量. 那么优点是什么呢

Java设计模式(创建型:工厂方法模式+抽象工厂模式)

设计模式根据目的准则可以分为三类: 创建型:creational 创建型的设计模式与对象的创建有关. 结构型:Structural 处理类和对象之间的组合. 行为型:behavioral 描述类和对象如何交互及如何分配职责. 工厂方法模式 站在使用者的角度,工厂方法模式是指使用者提出想要实现的具体功能或者说是想要生产的具体的东西的要求,在通过工厂制造之后就将该东西或功能交付给使用者.使用者并不知道实现的具体过程,只是做了要求提出以及实现的结果的使用. 严谨来说工厂方法模式(Factory Met

Java设计模式(创建型:工厂方法模式)

(该文内容为原创,有不足之处望多多指教!) 设计模式根据目的准则可以分为三类: 创建型:creational 创建型的设计模式与对象的创建有关. 结构型:Structural 处理类和对象之间的组合. 行为型:behavioral 描述类和对象如何交互及如何分配职责. 工厂方法模式是什么? 站在使用者的角度,工厂方法模式是指使用者提出想要实现的具体功能或者说是想要生产的具体的东西的要求,在通过工厂制造之后就将该东西或功能交付给使用者.使用者并不知道实现的具体过程,只是做了要求提出以及实现的结果的