正 文

.NET泛型技巧之打造可复用的抽象工厂


www.7dspace.com  更新日期:2006-1-17 0:40:26  七度空间


  现在我们针对抽象工厂实现具体工厂。具体工厂就是利用生产每种产品的单一工厂来组合实现。因此你只要有每种类型的单一工厂就可以直接组合生成抽象工厂,而无需定义一个类来做这件事。注意,对每种数目的抽象工厂接口都需要对应生成一个具体工厂的实现,这里我仅针对生成两个产品的演示:

public class ConcreteFactory<T1, T2> : IAbstractFactory<T1, T2>
{
 private IFactory<T1> factory1;
 private IFactory<T2> factory2;

 public ConcreteFactory(IFactory<T1> f1, IFactory<T2> f2)
 {
  factory1 = f1;
  factory2 = f2;
 }

 public T1 Create(TypeToken<T1> token)
 {
  return factory1.Create();
 }

 public T2 Create(TypeToken<T2> token)
 {
  return factory2.Create();
 }
}

public static class ConcretFactory
{
 public static ConcreteFactory<T1, T2> NewFactory<T1, T2>(IFactory<T1> f1, IFactory<T2> f2)
 {
  return new ConcreteFactory<T1, T2>(f1, f2);
 }
}

  注意,我又声明了一个没有类型参数的ConcretFactory类,用一个静态方法来生成泛型ConcretFactory的实例,这是因为使用泛型方法可以推测类型参数,使得我们可以不必输入尖括号或Of语句,而泛型类则没有这个功能。现在大功告成!我们用一个例子来演示这个泛型抽象工厂的工作情况。现在假设我们需要一个生产PC的抽象工厂,需要生产两种抽象产品:处理器和内存。处理器和内存的抽象和具体实现如下:

Processor 和 Ram

public abstract class Processor
{
 public abstract string Model { get; }
}

public abstract class Ram
{
 public abstract int Frequency { get;}
}

public class PentiumProcessor : Processor
{
 public override string Model
 {
  get { return "Pentium Extreme Edition 955"; }
 }
}

public class AthlonProcessor : Processor
{
 public override string Model
 {
  get { return "Athlon 64 X2 FX-60"; }
 }
}

public class DDRRam : Ram
{
 public override int Frequency
 {
  get { return 400; }
 }
}

public class DDR2Ram : Ram
{
 public override int Frequency
 {
  get { return 533; }
 }
}

3页,页码:[1] [2] [3] 

上一篇:照片处理:保留皮肤纹理的自然美肤
下一篇:用Visual C++创建自定义的应用程序向导
标题:.NET泛型技巧之打造可复用的抽象工厂 作者:装配脑袋 来源:blog
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐