抽象工厂模式
产品等级结构:产品的继承结构 电视机与海尔电视机、海信电视机、TCL电视机
产品族:由同一个工厂生产 不同产品等级结构中的一组产品 海尔电器工厂与海尔电视机、海尔电冰箱
定义:提供一个创建一系列相关或相互依赖对象的接口,无须指定具体的类
抽象工厂:声明一组用于创建一族产品的方法
具体工厂:方法实现
抽象产品:为每种产品声明接口
具体产品:定义具体产品对象 实现业务方法
示例:界面皮肤库结构示意图
类图:
实例代码
interface Button
{
void Display();
}
interface TextField
{
void Display();
}
interface ComboBox
{
void Display();
}
interface SkinFactory
{
Button CreateButton();
TextField CreateTextField();
ComboBox CreateComboBox();
}
class SpringButton : Button
{
public void Display()
{
Console.WriteLine("SpringButton");
}
}
class SummerButton : Button
{
public void Display()
{
Console.WriteLine("SummerButton");
}
}
class SpringTextField : TextField
{
public void Display()
{
Console.WriteLine("SpringTextField");
}
}
class SummerTextField : TextField
{
public void Display()
{
Console.WriteLine("SummerTextField");
}
}
class SpringComboBox : ComboBox
{
public void Display()
{
Console.WriteLine("SpringComboBox");
}
}
class SummerComboBox : ComboBox
{
public void Display()
{
Console.WriteLine("SummerComboBox");
}
}
class SpringSkinFactory : SkinFactory
{
public Button CreateButton()
{
return new SpringButton();
}
public ComboBox CreateComboBox()
{
return new SpringComboBox();
}
public TextField CreateTextField()
{
return new SpringTextField();
}
}
class SummerSkinFactory : SkinFactory
{
public Button CreateButton()
{
return new SummerButton();
}
public ComboBox CreateComboBox()
{
return new SummerComboBox();
}
public TextField CreateTextField()
{
return new SummerTextField();
}
}
//main test
SkinFactory factory;
Button bt;
TextField tf;
ComboBox cb;
//读取配置文件
string factoryType = ConfigurationManager.AppSettings["factory"];
//反射生成对象
factory = (SkinFactory)Assembly.Load("AbstractFactory").CreateInstance(factoryType);
bt = factory.CreateButton();
tf = factory.CreateTextField();
cb = factory.CreateComboBox();
bt.Display();
tf.Display();
cb.Display();