AbstractFactory抽象工厂模式

#include <iostream>
using namespace std;

class ProductAbase
{
public:
    ProductAbase(){}
    virtual ~ProductAbase(){}
    virtual void Printf() = 0;
};
class Product1 : public ProductAbase
{
public:
    void Printf()
    {
        cout << "Product1::Printf()" << endl;
    }
};
class Product2 :public ProductAbase
{
public:
    void Printf()
    {
        cout << "Product2::Printf()" << endl;
    }
};

class ProductBbase
{
public:
    virtual void Printf() = 0;
};
class Product3 : public ProductBbase
{
public:
    void Printf()
    {
        cout << "Product3::Printf()" << endl;
    }
};
class Product4 : public ProductBbase
{
public:
    void Printf()
    {
        cout << "Product4::Printf()" << endl;
    }
};

//工厂类。
class Factory
{
public:
    Factory(){}
    virtual ~Factory(){}
    virtual ProductAbase* GetProductA() = 0;
    virtual ProductBbase* GetProductB() = 0;
};

class Factory1 : public Factory
{
public:
    ProductAbase* GetProductA()
    {
        return new Product1();
    }
    ProductBbase* GetProductB()
    {
        return new Product3();
    }
};
class Factory2 : public Factory
{
public:
    ProductAbase* GetProductA()
    {
        return new Product2();
    }
    ProductBbase* GetProductB()
    {
        return new Product3();
    }
};
int main()
{
    Factory *fa = new Factory1();
    ProductAbase *pa = fa->GetProductA();//获得ProdcutAbase的子类对象Product1。
    pa->Printf();//Product1的操作方法。
    ProductBbase *pb = fa->GetProductB();//获得ProductBbase的子类对象Product3。
    pb->Printf();//Product3的操作方法。

    fa = new Factory2();
    pa = fa->GetProductA();
    pa->Printf();//Product2的操作方法。
    pb = fa->GetProductB();
    pb->Printf();//Product3的操作方法。
    return 0;
}
//总结:抽象工厂模式无非是将单个工厂模式聚合起来,统一的用工厂函数对对象的实例化延迟,
//然后统一的对对象的构造进行管理,说的简单点就是,我将宝马停在1号车间,奔驰停在2号车间,
//奥迪停在3号车间,我需要什么车我就开几号车间门,工厂函数就是起这样一个作用,将对象的
//实例化用统一的函数进行封装。

时间: 2024-08-06 20:03:11

AbstractFactory抽象工厂模式的相关文章

AbstractFactory(抽象工厂模式)

AbstractFactory(抽象工厂模式) 有些情况下我们需要根据不同的选择逻辑提供不同的构造工厂,而对于多个工厂而言需要一个统一的抽象 <?php class Config { public static $factory = 1; } interface Product { public function getName(); } abstract class AbstractFactory { public static function getFactory() { switch (

浅析设计模式(六)——创建型模式之Abstract-Factory(抽象工厂模式)

抽象工厂模式Abstract-Factory 本文的套路: 抽象工厂模式的定义 抽象工厂模式的参与者及其角色 抽象工厂模式的类图 抽象工厂模式的示例 参考 抽象工厂模式的定义 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类. 前面[浅析设计模式(四)--创建型模式之Simple-Factory(简单工厂方法,非设计模式)]中介绍的简单工厂方法,虽然已经对变化的部分进行了封装,但是这里只由一个对象负责所有的具体类的实例化,因此每次有新增对象类型时,都需要改变工厂的源码进行扩展.

Design Patterns 4 酒干倘卖无---抽象工厂模式AbstractFactory

抽象工厂模式AbstractFactory 抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类. 抽象工厂对于系列产品的变化支持 “开放——封闭”原则(指的是要求系统对扩展开放,对修改封闭),扩展起来非常简便,但对于添加新产品这种情况就不支持”开放——封闭 “原则. Design Patterns 4 酒干倘卖无---抽象工厂模式AbstractFactory,布布扣,bubuko.com

C#设计模式之四抽象工厂模式(AbstractFactory)【创建型】

一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简单工厂]模式所面对的问题,它的问题就是:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越多,其逻辑越复杂,同时这样的修改也是不符合[开放关闭原则OCP],对修改代码关闭,对增加代码开放.为了解决[简单工厂]的问题,我们引出了[工厂方法]模式,通过子类化工厂类,解决了工厂类责任的划分,

设计模式(三)抽象工厂模式(AbstractFactory)-创建型

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象.根据LSP原则,任何接受父类型的地方,都应当能够接受子类型.因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例.换言之,也就是这些抽象产品的具体子类的实例.工厂类负责创建抽象产品的具体子类的实例. 抽象工厂模式与工厂方法模式的区别

C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】

原文:C#设计模式之三抽象工厂模式(AbstractFactory)[创建型] 一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简单工厂]模式所面对的问题,它的问题就是:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越多,其逻辑越复杂,同时这样的修改也是不符合[开放关闭原则OCP],对修改代码关闭,对增加代码开放.为了解决[简单工厂

5.抽象工厂模式-abstractfactory

初识抽象工厂模式 定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 结构和说明 AbstractFactory:? 抽象工厂,定义创建一系列产品对象的操作接口. ConcreteFactory:? 具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建. AbstractProduct:? 定义一类产品对象的接口 ConcreteProduct:? 具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对

03抽象工厂模式AbstractFactory

一.什么是抽象工厂模式 抽象工厂模式是所有形态的工厂模式中最为抽 象和最其一般性的.抽象工厂模式可以向客户端 提供一个接口,使得客户端在不必指定产品的具 体类型的情况下,能够创建多个产品族的产品对 象. 二.产品族和产品等级结构 三.模式中包含的角色及其职责 1.抽象工厂(Creator)角色抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口. 2.具体工厂( Concrete Creator)角色具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象. 3.抽

【设计模式】1、抽象工厂模式

对于这个抽象工厂的相应的代码实现 /** * 功能:抽象工厂模式的作用 适用性 1.一个系统要独立于它的产品的创建.组合和表示时. 2.一个系统要由多个产品系列中的一个来配置时. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时. * 时间:2016年2月11日22:18 * 作者:cutter_point */ package com.shejimoshi.create.AbstractFactory; public in