抽象工厂模式提供了一种通过工厂功能集合获得对象连贯集合的方法。对于每种模式,通过抽象化一组对象的创建方式来减少耦合,从而使用户代码不知道他需要的对象的许多细节。
以下C ++示例说明了如何获取相同(假设)GUI系列的不同类型的对象:
#include <iostream> /* Abstract definitions */ class GUIComponent { public: virtual ~GUIComponent() = default; virtual void draw() const = 0; }; class Frame : public GUIComponent {}; class Button : public GUIComponent {}; class Label : public GUIComponent {}; class GUIFactory { public: virtual ~GUIFactory() = default; virtual std::unique_ptr<Frame> createFrame() = 0; virtual std::unique_ptr<Button> createButton() = 0; virtual std::unique_ptr<Label> createLabel() = 0; static std::unique_ptr<GUIFactory> create(const std::string& type); }; /* Windows support */ class WindowsFactory : public GUIFactory { private: class WindowsFrame : public Frame { public: void draw() const override { std::cout << "I'm a Windows-like frame" << std::endl; } }; class WindowsButton : public Button { public: void draw() const override { std::cout << "I'm a Windows-like button" << std::endl; } }; class WindowsLabel : public Label { public: void draw() const override { std::cout << "I'm a Windows-like label" << std::endl; } }; public: std::unique_ptr<Frame> createFrame() override { return std::make_unique<WindowsFrame>(); } std::unique_ptr<Button> createButton() override { return std::make_unique<WindowsButton>(); } std::unique_ptr<Label> createLabel() override { return std::make_unique<WindowsLabel>(); } }; /* Linux support */ class LinuxFactory : public GUIFactory { private: class LinuxFrame : public Frame { public: void draw() const override { std::cout << "I'm a Linux-like frame" << std::endl; } }; class LinuxButton : public Button { public: void draw() const override { std::cout << "I'm a Linux-like button" << std::endl; } }; class LinuxLabel : public Label { public: void draw() const override { std::cout << "I'm a Linux-like label" << std::endl; } }; public: std::unique_ptr<Frame> createFrame() override { return std::make_unique<LinuxFrame>(); } std::unique_ptr<Button> createButton() override { return std::make_unique<LinuxButton>(); } std::unique_ptr<Label> createLabel() override { return std::make_unique<LinuxLabel>(); } }; std::unique_ptr<GUIFactory> GUIFactory::create(const string& type) { if (type == "windows") return std::make_unique<WindowsFactory>(); return std::make_unique<LinuxFactory>(); } /* User code */ void buildInterface(GUIFactory& factory) { auto frame = factory.createFrame(); auto button = factory.createButton(); auto label = factory.createLabel(); frame->draw(); button->draw(); label->draw(); } int main(int argc, char *argv[]) { if (argc < 2) return 1; auto guiFactory = GUIFactory::create(argv[1]); buildInterface(*guiFactory); }
如果生成的可执行文件被命名,abstractfactory那么输出可以给出:
$ ./abstractfactory windows I'm a Windows-like frame I'm a Windows-like button I'm a Windows-like label $ ./abstractfactory linux I'm a Linux-like frame I'm a Linux-like button I'm a Linux-like label
主要内容:介绍,实现,Shape.java,Rectangle.java,Square.java,Circle.java,Color.java,Red.java,Green.java,Blue.java,AbstractFactory.java,ShapeFactory.java,ColorFactory.java,FactoryProducer.java,AbstractFactoryPatternDemo.java抽象工厂模式(Abstract Factory Pattern)是围绕一个超级
抽象工厂模式 亦称: Abstract Factory 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。 问题 假设你正在开发一款家具商店模拟器。 你的代码中包括一些类, 用于表示: 1、一系列相关产品, 例如 椅子Chair 、 沙发Sofa和 咖啡桌CoffeeTable 。 2、系列产品的不同变体。 例如, 你可以使用 现代Modern 、
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 主要
简介 抽象工厂模式是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。 简例 有个
抽象工厂模式也称为工厂工厂。 此设计模式属于创建设计模式类别。 它提供了创建对象的最佳方法之一。 它包括一个接口,负责创建与Factory相关的对象。 如何实现抽象工厂模式? 以下程序有助于实现抽象工厂模式。 class Window: __toolkit = "" __purpose = "" def __init__(self, toolkit, purpose):
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 主要
抽象工厂模式 前面我们写过的工厂模式实际上是对产品的抽象。对于不同的用户需求,我们可以给予不同的产品,而且这些产品的接口都是一致的。而抽象工厂呢?顾名思义,就是说我们的工厂是不一定的。怎么理解呢,举个例子。 假设有两个水果店都在卖水果,都卖苹果和葡萄。其中一个水果店买白苹果和白葡萄,另外一个水果店卖红苹果和红葡萄。所以说,对于水果店而言,尽管都在卖水果,但是两个店卖的品种不一样。 既然水果不一样,
//数据库访问有关的基类 class IDBConnection{}; class IDBCommand{}; class IDataReader{}; class IDBFactory{ public: virtual IDBConnection* CreateDBConnection()=0; virtual IDBCommand* CreateDBCommand()=0;