/// <summary>
/// 产品通过接口实现具体产品
/// 具体产品的实例化不依赖于硬编码
/// 而是通过抽象工厂来延迟实现具体工厂来实现具体产品的实现
/// </summary>
public class AbstractFactoryTest
{
public static void Main(string[] args)
{
IProduct product;
IAbstractFactory abstractFactory;
abstractFactory = ReadXMlConfig.GetAbstractFactory();
product = abstractFactory.NewProduct();
product.Show();
}
}
public interface IProduct
{
void Show();
}
public class ConcreteProduct1 : IProduct
{
public void Show()
{
Console.WriteLine("具体产品1展示");
}
}
public class ConcreteProduct2 : IProduct
{
public void Show()
{
Console.WriteLine("具体产品2展示");
}
}
public interface IAbstractFactory
{
IProduct NewProduct();
}
public class ConcreteFactory1 : IAbstractFactory
{
public IProduct NewProduct()
{
Console.WriteLine("具体工厂1生成-->具体产品1");
return new ConcreteProduct1();
}
}
public class ConcreteFactory2 : IAbstractFactory
{
public IProduct NewProduct()
{
Console.WriteLine("具体工厂2生成-->具体产品1");
return new ConcreteProduct2();
}
}
public class ReadXMlConfig
{
public static IAbstractFactory GetAbstractFactory()
{
string name = "PE.SD.DesignMode.ConcreteFactory1";
IAbstractFactory factory = Assembly.Load("PE.SD.DesignMode").CreateInstance(name) as IAbstractFactory;
return factory;
}
}