美文网首页
工厂方法

工厂方法

作者: szn好色仙人 | 来源:发表于2019-03-17 18:34 被阅读0次

动机

  • 在软件系统中,经常面临着创建对象的工作,由于需求的变化,需要创建的对象的具体类型经常变化

定义

  • 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类

要点

  • 工厂方法模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合(new)会导致软件的脆弱
  • 工厂方法通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系
  • 工厂方法模式解决单个对象的需求变化,缺点在于要求创建方法参数相同

示例

#include <cstdio>


//业务类的基类
class CBase
{
public:
    virtual ~CBase(){}
    virtual void Print() = 0;
};

//具体业务类0
class CChild0 : public CBase
{
public:
    virtual void Print() { printf("Type0\n"); }
};

//具体业务类1
class CChild1 : public CBase
{
public:
    virtual void Print() { printf("Type1\n"); }
};


//工厂基类
class CFactory
{
public:
    virtual ~CFactory() {}
    virtual CBase* Create() = 0;
};

//具体业务类0对应的工厂
class CFactoryType_0 : public CFactory
{
public:
    CBase* Create() { return new CChild0; }
};

//具体业务类1对应的工厂
class CFactoryType_1 : public CFactory
{
public:
    CBase* Create() { return new CChild1; }
};


//业务处理类
class CMakeCar
{
public:
    CMakeCar() : pFactory_(nullptr) {}

    void SetFactory(CFactory* pFactory) { this->pFactory_ = pFactory; }

    void Deal() 
    { 
        //工厂的核心就是对此处进行解耦
        auto p = pFactory_->Create();
        p->Print();
        delete p;  //随意写的delete
    }

private:
    CFactory* pFactory_;
};


int main()
{
    CFactoryType_0 FactoryChild0;
    CFactoryType_1 FactoryChild1;

    CMakeCar MakeCar;
    MakeCar.SetFactory(&FactoryChild0);
    MakeCar.Deal(); //输出Type0

    MakeCar.SetFactory(&FactoryChild1);
    MakeCar.Deal(); //输出Type1

    return 0;
}

https://www.bilibili.com/video/av24176315/?p=8

相关文章

  • 工厂模式

    简单工厂 —— 工厂方法 —— 抽象工厂 简单工厂: 静态(工厂方法) : 创建一个对象。工厂方法: 动态: 基于...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • Spring-4静态工厂方法和动态工程方法配置bean

    静态工厂方法 动态工厂方法

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 工厂方法模式及策略模式

    本文主要内容 工厂方法介绍 工厂方法 抽象工厂介绍 抽象工厂 策略模式 本文继续介绍相关设计模式,本期介绍工厂方法...

  • 工厂方法(Factory Method)

    工厂方法 一般情况下,工厂模式分为:简单工厂、工厂方法和抽象工厂。 简单工厂模式(Simple Factory) ...

  • python设计模式 - 工厂模式之工厂方法

    python 环境 工厂方法模式简介 工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式...

  • python设计模式-1工厂设计模式-3抽象工厂

    抽象工厂简介 抽象工厂设计模式是工厂方法的泛化。抽象工厂是(逻辑上的)一组工厂方法, 每个工厂方法负责产生不同种类...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 2016.06笔记

    iOS设计模式之工厂模式(简单工厂,工厂方法,抽象工厂) 简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接...

网友评论

      本文标题:工厂方法

      本文链接:https://www.haomeiwen.com/subject/gnnumqtx.html