抽象工厂(Abstract Factory)模式:为创建一组相关或相互依赖对象提供了一个接口,而且无需指定它们的具体类。
抽象工厂可以向客户提供一个接口,是客户可以在不必指定产品具体类型的情况下,创建多个产品家族中的产品对象,它强调的系列对象的变化。
public abstract class Product
{
public abstract string GetName(ProductType productType);
}
public abstract class ProductType
{
public abstract string GetProductType();
}
public class ProductA : Product
{
public override string GetName(ProductType productType)
{
return "我是A产品,型号是"+productType.GetProductType();
}
}
public class ProductB : Product
{
public override string GetName(ProductType productType)
{
return "我是B产品,型号是"+productType.GetProductType();
}
}
public class ProductType1 : ProductType
{
public override string GetProductType()
{
return "1";
}
}
public class ProductType2 : ProductType
{
public override string GetProductType()
{
return "2";
}
}
public abstract class Factory
{
public abstract Product CreateProduct();
public abstract ProductType CreateProductType();
}
public class FactoryA1 : Factory
{
public override Product CreateProduct()
{
return new ProductA();
}
public override ProductType CreateProductType()
{
return new ProductType1();
}
}
public class FactoryB2 : Factory
{
public override Product CreateProduct()
{
return new ProductB();
}
public override ProductType CreateProductType()
{
return new ProductType2();
}
}
public class Client
{
private Product _product;
private ProductType _productType;
public Client(Factory factory)
{
_product = factory.CreateProduct();
_productType = factory.CreateProductType();
}
public void Run()
{
Console.WriteLine(_product.GetName(_productType));
}
}
static void Main(string[] args)
{
var client1 = new Client(new FactoryA1());
client1.Run();
var client2 = new Client(new FactoryB2());
client2.Run();
Console.ReadLine();
}
抽象工厂模式与工厂方法模式区别(产品个数)
源码地址
其他设计模式