65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.63/5 (24投票s)

2007年7月9日

CPOL

1分钟阅读

viewsIcon

76629

downloadIcon

917

使用 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();

历史

这是这段代码的第一个迭代版本。请提供任何反馈,例如您是否使用过它,或者任何人发现的任何问题!

© . All rights reserved.