下面的代码演示了如何随心所欲生成想要的抽象工厂接口以及快速从现有单一产品工厂组合成特定的具体工厂实现。
class Program
{
static IAbstractFactory<Processor, Ram> ComputerFactory(string type)
{
if (type == "Intel")
{
return ConcretFactory.NewFactory( new OpNewFactory<Processor, PentiumProcessor>(),
new OpNewFactory<Ram, DDR2Ram>());
}
else if (type == "AMD")
{
return ConcretFactory.NewFactory( new OpNewFactory<Processor, AthlonProcessor>(),
new OpNewFactory<Ram, DDRRam>());
}
//unknown type
return null;
}
static void Main(string[] args)
{
//Yield a computer of Intel
IAbstractFactory<Processor, Ram> factory1 = ComputerFactory("Intel");
Ram ram1 = factory1.Create(TypeToken<Ram>.Instance);
Processor cup1 = factory1.Create(TypeToken<Processor>.Instance);
Console.WriteLine("An Intel Computer");
Console.WriteLine("CPU Model: {0}", cup1.Model);
Console.WriteLine("Memory Frequency: {0} MHz", ram1.Frequency);
Console.WriteLine();
//Yield a computer of AMD
IAbstractFactory<Processor, Ram> factory2 = ComputerFactory("AMD");
Ram ram2 = factory2.Create(TypeToken<Ram>.Instance);
Processor cup2 = factory2.Create(TypeToken<Processor>.Instance);
Console.WriteLine("An AMD Computer");
Console.WriteLine("CPU Model: {0}", cup2.Model);
Console.WriteLine("Memory Frequency: {0} MHz", ram2.Frequency);
}
}
总结:
我们用泛型技术成功地增强了原本重用性较低的抽象工厂,演示了泛型在提高抽象性和代码重用方面卓越的价值。
