抽象工厂模式(Abstract Factory Pattern)
意图:
Provide an interface for creating families of related or dependent objects without specifying their concrete classes。 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。
适用性:
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
抽象模式通用类图:
抽象工厂模式通用源码类图:
抽象产品类:
public abstract class AbstractProductA{
public abstract void Create();
}
public abstract class AbstractProductB{
public abstract void Create();
}
产品实现类:
public class ProductA1:AbstractProductA{
public override void Create (){
Console.WriteLine ("ProductA1");
}
}
public class ProductA2:AbstractProductA{
public override void Create (){
Console.WriteLine ("ProductA2");
}
}
public class ProductB1:AbstractProductB{
public override void Create (){
Console.WriteLine ("ProductB1");
}
}
public class ProductB2:AbstractProductB{
public override void Create (){
Console.WriteLine ("ProductB2");
}
}
抽象工厂类:
public abstract class AbstractFactory{
public abstract AbstractProductA CreateProductA ();
public abstract AbstractProductB CreateProductB ();
}
工厂实现类:
public class ConcreteFactory1:AbstractFactory{
public override AbstractProductA CreateProductA (){
return new ProductA1 ();
}
public override AbstractProductB CreateProductB (){
return new ProductB1 ();
}
}
public class ConcreteFactory2:AbstractFactory{
public override AbstractProductA CreateProductA (){
return new ProductA2 ();
}
public override AbstractProductB CreateProductB (){
return new ProductB2 ();
}
}
场景类:
public class Client{
public static void Main (string[] args){
ConcreteFactory1 f1 = new ConcreteFactory1 ();
f1.CreateProductA().Create();
f1.CreateProductB().Create();
ConcreteFactory2 f2 = new ConcreteFactory2 ();
f2.CreateProductA().Create();
f2.CreateProductB().Create();
}
}