工厂方法模式 Factory Method

工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

#include <iostream>

using namespace std;
class Fruit{
public:
    virtual void show()=0;
};

class Apple:public Fruit{
public:
    void show(){
        cout<<"i am an apple"<<endl;
    }
};

class Pear:public Fruit{
public:
    void show(){
        cout<<"i am a pear"<<endl;
    }
};

class FruitFactory{
public:
    virtual Fruit * createFruit()=0;
};

class AppleFactory:public FruitFactory{
public:
    Fruit * createFruit(){
        return new Apple();
    }
};

class PearFactory:public FruitFactory{
public:
    Fruit * createFruit(){
        return new Pear();
    }
};
int main(int argc, char* argv[])
{
    //工厂方法模式
    //创建不同的工厂,各自负责各自的产品

    FruitFactory * applefactory = new AppleFactory();
    Fruit * product = applefactory->createFruit();
    product->show();
    delete product;
    delete applefactory;

    FruitFactory * pearfactory = new PearFactory();
    Fruit * product2 = pearfactory->createFruit();
    product2->show();
    delete product2;
    delete applefactory;

    return 0;
}

优点就是可以分开创建新工厂类,新产品类,不必像简单工厂模式一样在原来的代码上进行修改,可扩展性大大提高。

时间: 2024-10-21 09:53:41

工厂方法模式 Factory Method的相关文章

工厂方法模式(Factory Method Pattern)

2. 工厂方法模式(Factory Method Pattern) 2.1. 模式动机 现在对该系统进行修改,不再设计一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成,我们先定义一个抽象的按钮工厂类,再定义具体的工厂类来生成圆形按钮.矩形按钮.菱形按钮等,它们实现在抽象按钮工厂类中定义的方法.这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品,如果出现新的按钮类型,只需要为这种新类型的按钮创建一个具体的工厂类就可以获得该新按钮的实例,这一

php设计模式——工厂方法模式(Factory Method)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——工厂方法模式(Factory Method) 4 */ 5 6 7 /* 8 * IAp

Android设计模式——工厂方法模式(Factory Method)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import

工厂模式--工厂方法模式(Factory Method Pattern)

2.1. 模式动机 现在对该系统进行修改,不再设计一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成,我们先定义一个抽象的按钮工厂类,再定义具体的工厂类来生成圆形按钮.矩形按钮.菱形按钮等,它们实现在抽象按钮工厂类中定义的方法.这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品,如果出现新的按钮类型,只需要为这种新类型的按钮创建一个具体的工厂类就可以获得该新按钮的实例,这一特点无疑使得工厂方法模式具有超越简单工厂模式的优越性,更加符合"开闭

设计模式-03工厂方法模式(Factory Method Pattern)

插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背"开闭原则". 1.模式动机 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮.矩形按钮.菱形按钮等),这些按钮都源自同一个基类,不过在继承基类后不同的子类有不同的实现方式从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的

设计模式之六:工厂方法模式(Factory method Pattern)

工厂方法(Factory Method)模式就是定义一个创建对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责具体产品的创建,仅提供了具体工厂子类必须实现的接口,这样核心类成为一个抽象工厂角色,这样做的好处是工厂方法模式可以使系统在不修改具体工厂角色的情况下进行引进新的产品. 在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应. 从上图可以看出,工厂方法模式有四个角色: 抽象工厂角色(ICreator):是工厂方法模式的核心,与应用程序无

3.工厂方法模式(Factory Method)

using System; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //需要什么食物,创建什么工厂 FactoryCreate _factorycreate = new YaJiaFactoryCreate(); Food _food = _factorycreate.Create(); _food.MakeFood();

工厂方法(Factory Method)模式

一.工厂方法(Factory Method)模式 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟的子类中. 工厂方法模式是简单工厂模式的进一步抽象和推广.由于使用了多态性,工厂方法模式保持了简单工厂模式的有点,而且客服了它的缺点. 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给予子类去做.这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节.这使得工厂方法模式可以允许

工厂方法(Factory Method)

定义 工厂方法也叫虚构造器(virtual constructor),适用于在代码运行时,当不能确定对象所创建的类型而需要其子类确定的时候.在面向对象编程的环境中,其大致情况就相当于利用多态的特性,调用基类接口创建对象,而子类又各自实现了自己的创建接口的方法,类图结构如下: 如果撇开工厂方法模式的话,那么当需要创建对象的时候,直接在需要的地方使用具体的产品类创建对象即可,但是这样的话代码的粘性(耦合度)就比较高了,不利于后续的代码维护.工厂方法通过增加工厂这一层结构,使得使用的地方的代码不再对产