一、抽象工厂模式简介(Bref Introduction)
抽象工厂模式(
Abstract Factory Pattern
),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类。优点是:易于交换产品系列,由于具体工厂类在一个应该用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂类变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。抽象工厂的另一个优点是,它让具体的创建实例与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户的代码中。
二、解决的问题(What To Solve)
常用用于解决数据访问程序,也就是说程序通过使用抽象工厂模式后,可以灵活地在不同的数据库之间切换,而不需要费时费力地改变原有程序。
三、抽象工厂模式分析(Analysis)
1、抽象工厂模式结构
IProductA
、
IProductA
接口:
两个产品接口,他们都有可能有两种不同的实现。
ProductA1
、
ProductA2
,
ProductB1
、
ProductB2
具体实现类:
对两个产品接口的具体分类的实现。
AbstractFactory
抽象类:
抽象工厂接口,它里面应该包含所有产品创建的抽象方法。
ConcreteFactory1
、
ConcreteFactory2
具体工厂类
:创建具有特定实现的产品对象
2、源代码
1
、产品接口
IProductA
、
IProductB
及其两种实现
|
public
interface IProductA
{
void
Show();
}
public
class ProductA1
: IProductA
{
public void
Show()
{
Console
.WriteLine("
具体产品类{0}
展示方法。"
,this
.GetType().Name);
}
}
public
class ProductA2
: IProductA
{
public void
Show()
{
Console
.WriteLine("
具体产品类{0}
展示方法。"
, this
.GetType().Name);
}
}
public
interface IProductB
{
void
Insert();
}
public
class ProductB1
: IProductB
{
public void
Insert()
{
Console
.WriteLine("
具体产品类{0}
插入方法。"
, this
.GetType().Name);
}
}
public
class ProductB2
: IProductB
{
public void
Insert()
{
Console
.WriteLine("
具体产品类{0}
插入方法。"
, this
.GetType().Name);
}
}
|
2
、
抽象工厂接口
AbstractFactory,
及其
具体的工厂
AbstractFactory1
、AbstractFactory2
|
public
abstract class AbstractFactory
{
public abstract IProductA
CreateProductA();
public abstract IProductB
CreateProductB();
}
public
class AbstractFactory1
:AbstractFactory
{
public override IProductA
CreateProductA()
{
IProductA
productA1 = new ProductA1
();
return
productA1;
}
public override IProductB
CreateProductB()
{
IProductB
productB1 = new ProductB1
();
return
productB1;
}
}
public
class AbstractFactory2
: AbstractFactory
{
public override IProductA
CreateProductA()
{
IProductA
productA2 = new ProductA2
();
return
productA2;
}
public override IProductB
CreateProductB()
{
IProductB
productB2 = new ProductB2
();
return
productB2;
}
}
|
3
、客户端代码
|
static
void
{
//
根据需求调用具体工厂AbstractFactory1
AbstractFactory factory1 = new
AbstractFactory1();
IProductA productA1 = factory1.CreateProductA();
IProductB productB1 = factory1.CreateProductB();
productA1.Show();
productB1.Insert();
Console
.WriteLine("\n"
);
//
根据需求调用具体工厂AbstractFactory2
AbstractFactory factory2 = new
AbstractFactory2();
IProductA pr
oductA2 = factory2.CreateProductA();
IProductB productB2 = factory2.CreateProductB();
productA2.Show();
productB2.Insert();
Console.ReadKey();
}
|
3、程序运行结果
本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/260392,如需转载请自行联系原作者