创建模式:在 C# 中实现抽象工厂模式






3.63/5 (24投票s)
使用 C# (实际示例) 编写抽象工厂模式。
引言
本文展示了如何在实际案例中使用 C# 2.0 和 .NET 实现创建型抽象工厂模式。
什么是设计模式?
设计模式是软件设计中常见问题的通用可重复解决方案。设计模式不是可以直接转换为代码的成品设计,而是解决问题的一种描述或模板,可以在许多不同的情况下使用。
什么是创建型设计模式?
创建型设计模式是处理对象创建机制的设计模式,试图以适合当前情况的方式创建对象。基本的对象创建形式可能会导致设计问题或增加设计的复杂性。创建型设计模式通过某种方式控制对象创建来解决此问题。
目的
抽象工厂提供了一个用于创建相关或依赖对象族(family)的接口,而不指定它们的具体类。
结构
- 抽象工厂,声明用于创建抽象条目的操作的接口。
- 具体工厂,实现用于创建具体条目对象的那些操作。
- 抽象条目,声明一种条目对象的接口。
- 条目,定义由实现抽象条目接口的具体工厂创建的条目对象。
- 客户端,使用抽象工厂和抽象条目类声明的接口。
让我们编写抽象工厂的代码
这个例子展示了如何使用抽象工厂模式创建不同的数据源。
// The Abstract Factory interface.
Public interface IDataFactory
{
IData CreateData();
}
// The Concrete Factory #1 class.
public class DataFromDB: IDataFactory
{
public IData CreateData()
{
// IMPLEMENT YOUR LOGIC
return new Data("DataBase source");
}
}
// The Concrete Factory #2 class.
public class DataFromFile: IDataFactory
{
public IData CreateData()
{
// IMPLEMENT YOUR LOGIC
return new Data("File source");
}
}
// The Abstract Item class.
public interface IData
{
string GetData();
}
// The Item class.
public class Data: IData
{
private string _value;
public Data(string value)
{
_value = value;
}
public string GetData()
{
return _value;
}
}
// The Client class.
public class DataSource
{
private IData _data;
public DataSource(DataType dataType)
{
IDataFactory factory;
switch (dataType)
{
case DataType.File:
factory = new DataFromFile();
_data = factory.CreateData();
break;
case DataType.DB:
factory = new DataFromDB();
_data = factory.CreateData();
break;
}
}
public string GetDataFromSource()
{
return _data.GetData();
}
}
//The DataType enumeration.
public enum DataType
{
File,
DB
}
如何使用抽象工厂
以下代码展示了如何从应用程序客户端调用抽象工厂
DataSource ds = new DataSource(DataType.DB);
//DataSource ds = new DataSource(DataType.File);
string result = ds.GetDataFromSource();
历史
这是这段代码的第一个迭代版本。请提供任何反馈,例如您是否使用过它,或者任何人发现的任何问题!