创建型模式 抽象工厂

/**
 * 创建型模式 抽象工厂
 * 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
 *
 * 抽象工厂(Creator)角色
 * 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
 * 具体工厂( Concrete  Creator)角色
 * 具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
 * 抽象(Product)角色
 * 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
 * 具体产品(Concrete Product)角色
 * 抽象模式所创建的具体实例对象
 *
 */

#include <iostream>

class Fruit
{
public:
    virtual void sayname()
    {
        std::cout << "I‘am fruit" << std::endl;
    }
};

class FruitFactory
{
public:
    virtual Fruit * CreateBanana()
    {
        return new Fruit();
    }
    virtual Fruit * CreatePear()
    {
        return new Fruit();
    }
};

class SouthBanana: public Fruit
{
public:
    virtual void sayname() override
    {
        std::cout << "South Banana" << std::endl;
    }
};

class NorthBanana: public Fruit
{
public:
    virtual void sayname() override
    {
        std::cout << "North Banana" << std::endl;
    }
};

class SouthPear: public Fruit
{
public:
    virtual void sayname() override
    {
        std::cout << "South Pear" << std::endl;
    }
};

class NorthPear: public Fruit
{
public:
    virtual void sayname() override
    {
        std::cout << "North Pear" << std::endl;
    }
};

// 在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型。这样的类型称为协变返回类型(Covariant returns type).
class SouthFactory: public FruitFactory
{
public:
    virtual SouthBanana * CreateBanana() override
    {
        return new SouthBanana();
    }
    virtual SouthPear * CreatePear() override
    {
        return new SouthPear();
    }
};

// 在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型。这样的类型称为协变返回类型(Covariant returns type).
class NorthFactory: public FruitFactory
{
public:
    virtual NorthBanana * CreateBanana() override
    {
        return new NorthBanana();
    }
    virtual NorthPear * CreatePear() override
    {
        return new NorthPear();
    }
};

void mytest()
{
    FruitFactory * factory = nullptr;
    Fruit * fruit = nullptr;

    factory = new SouthFactory();
    fruit = factory->CreateBanana();
    fruit->sayname();
    delete fruit;
    fruit = nullptr;
    fruit = factory->CreatePear();
    fruit->sayname();
    delete fruit;
    fruit = nullptr;
    delete factory;
    factory = nullptr;

    factory = new NorthFactory();
    fruit = factory->CreateBanana();
    fruit->sayname();
    delete fruit;
    fruit = nullptr;
    fruit = factory->CreatePear();
    fruit->sayname();
    delete fruit;
    fruit = nullptr;
    delete factory;
    factory = nullptr;

    return;
}

int main()
{
    mytest();

    system("pause");
    return 0;
}
时间: 2024-08-03 10:39:46

创建型模式 抽象工厂的相关文章

4、设计模式-创建型模式-抽象工厂模式

抽象工厂模式 产品等级结构和产品族 工厂方法模式中具体工厂负责生产具体的产品 每一个具体工厂对应一种具体的产品 工厂方法具有唯一性 一般情况下:一个具体工厂中只有一个或一组重载的工厂方法 有时候希望一个一个工厂可以提供多个产品对象 而不是单一的产品对象 产品等级结构: 产品等级结构即产品的继承结构,如一个抽象类是电视机 子类有海尔电视机.海信电视机等 抽象电视机与具体与具体品牌的电视机之间构成了一个产品等级结构 抽象电视机是父类,具体品牌的电视机是其子类 产品族: 在抽象工厂模式中 产品族是指由

第5章 创建型模式—抽象工厂模式

1. 抽象工厂的定义 (1)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 ①只需各要知道创建一系列对象的接口,而无需知道具体使用的是哪一个实现 ②这一系列对象是相关或相互依赖的,也就是说既要创建对象,还要约束它们之间的关系. ③一系列对象是构建新对象所需要的组成部分,并且对象之间相互有约赖.如电脑由CPU和主板等组成,但CPU的针脚数和主板提供的插口必须是匹配的,否则无法组装. (2)产品族和产品等级 ①产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等

创建型模式--抽象工厂模式

概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.  适用性 1.一个系统要独立于它的产品的创建.组合和表示时. 2.一个系统要由多个产品系列中的一个来配置时. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时.  参与者 1.AbstractFactory 声明一个创建抽象产品对象的操作接口. 2.ConcreteFactory 实现创建具体产品对象的操作. 3.AbstractProduct 为一

3 创建型模式-----抽象工厂模式

附加概念: 产品等级结构:不同品牌的同一类产品,如Haier电视机,TCL电视机都是电视机,因此属于同一个产品等级结构. 产品族:属于同一个品牌的所有产品,如Haier电视机,Haier冰箱等.   模式动机:工厂方法模式一般针对的是一个产品等级结构(如仅生产电视机),而抽象工厂模式针对的是多个产品等级结构(如不仅生产电视机,还生产空调). 模式定义:一个具体工厂可以创建一个产品族的所有产品,又称为Kit模式. 模式结构图: 模式实例: 一个电器工厂负责生产电视机和空调,其中包括Haier系列和

设计模式01 创建型模式 - 抽象工厂

参考 1. 三种工厂模式的分析以及C++实现|博客园 2. 设计模式之三:抽象工厂模式 | CSDN 3. 浅谈Java设计模式--单实例.简单工厂.抽象工厂.观察者 | CSDN 抽象工厂 为创建一组相关或者相互依赖的对象提供一个接口,而无需指定他们具体的类. 通俗讲,就是创建工厂的工厂,每个工厂都实现抽象工厂,从而决定一个产品族:不同工厂生产不同产品族. 抽象工厂只关心接口,也就是工厂和产品之间的关系,工厂和用户之间的关系,而不关心产品如何实现,而Template和Builder Patte

java设计模式--创建型模式--抽象工厂

什么是抽象工厂,再次学习. 1 抽象工厂 2 概述 3 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 4 5 适用性 6 1.一个系统要独立于它的产品的创建.组合和表示时. 7 8 2.一个系统要由多个产品系列中的一个来配置时. 9 10 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时. 11 12 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时. 13 参与者 14 1.AbstractFactory 15 声明一个创建抽象产品对象的操作接口.

创建型模式 简单工厂模式

创建型模式 简单工厂模式 /** * 创建型模式 简单工厂模式 * 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. * * 1.工厂(Creator)角色 * 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产品对象. * 2.抽象(Product)角色 * 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口. * 3.具体产品(Concrete P

创建型模式:工厂方法

文章首发创建型模式:工厂方法 简介 姓名:工厂方法 英文名:Factory method Pattern 价值观:扩展是我的专属 个人介绍: Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses. (定义一个用于创建对象的接口,让子类决定

6创建型模式之工厂模式与抽象工厂模式

工厂模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 . 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品. 类图角色和职责 抽象工厂(Creator)角色 工厂方法模式的核心,任何工厂类都必须实现这个接口. 具体工厂( Concrete  Creator)角