起源<o:p></o:p>
Delphi中的Abstract Factory模式在基本Abstract Factory模式进行了扩展。更多Abstract Factory模式的资料请参阅 [Gam+]<o:p></o:p>
目的<o:p></o:p>
提供一个创建一系列相关或互依赖对象的接口,面无需指定它们的具体的类。<o:p></o:p>
动机<o:p></o:p>
这种模式是将你的应用与具体的类分类的最好办法,比如说,你要覆盖Delphi的公正的VCL<o:p></o:p>
你可以创建一个抽象工厂来实现自己的要组件。<o:p></o:p>
应用<o:p></o:p>
下面的例子使用一个抽象类工厂和两个实际的类工厂来实现不同特色的用户界面组件。TOAbstractFactory是一个单一的组件单独的类,以每个产品系列通常只需要个工厂。<o:p></o:p>
<o:p></o:p>
TOAbstractFactory = class(TObject)
public
constructor Create;
destructor Destroy; override;
{ 抽象的构造}
function CreateSpeedButton(AOwner: TComponent): TSpeedButton; virtual; abstract;
function CreateEdit(AOwner: TComponent): TEdit; virtual; abstract;
function CreateLabel(AOwner: TComponent): TLabel; virtual; abstract;
end;
<o:p></o:p>
TORedFactory与TOBlueFactory重载了抽象的接口,用来支持装饰不同的特色界面。
<o:p></o:p>
TORedFactory = class(TOAbstractFactory)
public
{红色构造器 }
function CreateSpeedButton(AOwner: TComponent): TSpeedButton; override;
function CreateEdit(AOwner: TComponent): TEdit; override;
function CreateLabel(AOwner: TComponent): TLabel; override;
end;
<o:p></o:p>
TOBlueFactory = class(TOAbstractFactory)
public
{蓝色构造器}
function CreateSpeedButton(AOwner: TComponent): TSpeedButton; override;
function CreateEdit(AOwner: TComponent): TEdit; override;
function CreateLabel(AOwner: TComponent): TLabel; override;
end;
有上面的接口中:
· 声明了一个创建抽象产品对象的接口:TOAbstractFactory
¨ 类TOAbstractFactory有三个抽象的工厂方法CreateSpeedButton、CreateEdit、CreateLabel
· TORedFactory、TOBlueFactory用来实现创建具体产品对象的方法
下面是TORedFactory的实现代码:
· unit Redfact;
· interface
· uses
· Classes, SysUtils, StdCtrls, Graphics, Abstfact, Buttons;
· type
· TORedFactory = class(TOAbstractFactory)
· public
· { 实际的构造器}
· function CreateSpeedButton(AOwner: TComponent): TSpeedButton; override;
· function CreateEdit(AOwner: TComponent): TEdit; override;
· function CreateLabel(AOwner: TComponent): TLabel; override;
· end;
· <o:p></o:p>
· implementation
· {具体的构造,被工厂方法隐藏}
· type
· TRedSpeedButton = class(TSpeedButton)
· public
· constructor Create(AOwner: TComponent); override;
· end;
· <o:p></o:p>
· TRedEdit = class(TEdit)
· public
· constructor Create(AOwner: TComponent); override;
· end;
· <o:p></o:p>
· TRedLabel = class(TLabel)
· public
· constructor Create(AOwner: TComponent); override;
· end;
· <o:p></o:p>
· { widget implementation }
· <o:p></o:p>
· { TRedButton }
· <o:p></o:p>
· constructor TRedSpeedButton.Create(AOwner: TComponent);
· begin
· inherited Create(AOwner);
· Font.Color := clRed;
· end;
· <o:p></o:p>
· { TRedEdit }
· <o:p></o:p>
· constructor TRedEdit.Create(AOwner: TComponent);
· begin
· inherited Create(AOwner);
· Font.Color := clRed;
· end;
· <o:p></o:p>
· { TRedLabel }
· <o:p></o:p>
· constructor TRedLabel.Create(AOwner: TComponent);
· begin
· inherited Create(AOwner);
· Font.Color := clRed;
· end;
· <o:p></o:p>
· <o:p></o:p>
· { the concrete factory }
· <o:p></o:p>
· function TORedFactory.CreateSpeedButton(AOwner: TComponent): TSpeedButton;
· begin
· Result := TRedSpeedButton.Create(AOwner);
· end;
· <o:p></o:p>
· function TORedFactory.CreateEdit(AOwner: TComponent): TEdit;
· begin
· Result := TRedEdit.Create(AOwner);
· end;
· <o:p></o:p>
· function TORedFactory.CreateLabel(AOwner: TComponent): TLabel;
· begin
· Result := TRedLabel.Create(AOwner);
· end;
end.
<o:p></o:p>
运行的时候,我们的客户程序的实例由类的工厂具体类创建。并且客户程序不需知道使用工厂的具体子类。
分享到:
相关推荐
Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。
### 设计模式——Abstract Factory模式的认识 在软件工程领域,设计模式是一种被广泛接受的解决方案,用于解决在软件设计过程中常见的问题。其中,Abstract Factory模式是23种GoF(Gang of Four)设计模式之一,它...
1. 抽象工厂(Abstract Factory):这是模式的核心,它是一个接口或抽象类,定义了一系列创建对象的方法,但并不直接实例化具体的对象。这些方法用于创建一系列相关或相互依赖的对象。 2. 具体工厂(Concrete ...
在设计模式中,Abstract Factory模式是一种用来解决在不指定具体实现的情况下创建一系列相关或相互依赖对象的模式。在本文的上下文中,我们看到它被应用于一个奇幻RPG游戏的角色种族设计,每个种族(如人类、精灵)...
在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...
在“AbstractFactory案例代码”中,我们可能看到一个实现跨平台数据访问的例子,这里提到了支持SQLServer和Oracle两种数据库。这表明抽象工厂将用于创建与不同数据库交互的适配器或连接对象。在分层架构设计中,通常...
1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...
总的来说,AbstractFactory模式在C++中的实现充分利用了面向对象的特性,如抽象类、继承和多态,使得系统具有更好的灵活性和扩展性。通过这种方式,我们可以轻松地替换或增加新的产品族,而不会对原有代码造成太大的...
- 抽象工厂接口的头文件(如`AbstractFactory.h`),定义了创建产品的接口。 - 具体工厂类的头文件和源文件(如`ConcreteFactory1.h`、`ConcreteFactory1.cpp`和`ConcreteFactory2.h`、`ConcreteFactory2.cpp`),...
`AbstractFactory`是抽象工厂,定义了创建`AbstractProductA`和`AbstractProductB`的接口;`ConcreteFactory1`和`ConcreteFactory2`是具体工厂,分别创建`ProductA1`和`ProductB1`,以及`ProductA2`和`ProductB2`。`...
这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...
抽象工厂(Abstract Factory)模式是一种创建型设计模式,它提供了一种创建对象的接口,但允许子类决定实例化哪一个类。这种模式是基于对象的抽象,而不是具体的类,因此,它允许创建一系列相关的对象,而无需指定...
1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不指定具体的产品实现。这个接口通常是定义了一组相关产品的生产方法。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体的产品...
抽象工厂模式的核心组成部分包括抽象工厂(AbstractFactory)、具体工厂(ConcreteFactory)、抽象产品(AbstractProduct)以及具体产品(ConcreteProduct)。以下是对这些角色的详细解释: 1. 抽象工厂(Abstract...
抽象工厂(Abstract Factory)模式是设计模式中的一种创建型模式,它提供了一种...在阅读提供的博客文章《AbstractFactory 抽象工厂》和研究压缩包中的相关文件时,你可以深入学习到更多关于这个模式的实践和应用场景。
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
public class WindowsFactory implements AbstractFactory { @Override public Button createButton() { return new WindowsButton(); } @Override public Window createWindow() { return new ...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
抽象工厂通常包含一个抽象工厂接口(例如:`AbstractFactory`)和多个具体工厂类(如:`ConcreteFactory1`和`ConcreteFactory2`)。抽象工厂接口定义了创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类...
然后,根据不同的产品族,我们定义了具体的工厂类`PcFactory`和`MacFactory`,这两个类分别覆盖了`abstractFactory`中的`CreateRam`和`CreateCpu`方法,以返回对应产品族的具体产品实例。 最后,在客户端代码部分,...