抽象工厂模式比工厂模式具有更高层次的抽象性。当要返回一系列相关类的某一个,而每个类都能根据需要返回不同的对象时,可以使用这种模式。换句话说,抽象工厂是一个工厂对象,他能返回一系列相关类中的某一个类。也就是可以用简单工厂去决定返回哪一个类。
工厂模式的工厂,实例化的对象只有一个,如果实例化的对象是多个,就成了抽象工厂模式,其实工厂模式和抽象工厂也就这点区别
示意图
示例代码
public abstract class Button
{
public abstract void DisplayButton();
}
public class WindowsButton : Button
{
public override void DisplayButton()
{
Console.WriteLine("我的类型是:{0}",this.GetType().ToString());
}
}
public class LinuxButton : Button
{
public override void DisplayButton()
{
Console.WriteLine("我的类型是:{0}", this.GetType().ToString());
}
}
public abstract class TextBox
{
public abstract void DisplayTextBox();
}
public class WindowsTextBox : TextBox
{
public override void DisplayTextBox()
{
Console.WriteLine("我的类型是:{0}", this.GetType().ToString());
}
}
public class LinuxTextBox : TextBox
{
public override void DisplayTextBox()
{
Console.WriteLine("我的类型是:{0}", this.GetType().ToString());
}
}
创建工厂
public abstract class AbstractFactory
{
public abstract Button CreateButton();
public abstract TextBox CreateTextBox();
}
public class WindowsFactory : AbstractFactory
{
public override Button CreateButton()
{
return new WindowsButton();
}
public override TextBox CreateTextBox()
{
return new WindowsTextBox();
}
}
public class LinuxFactory : AbstractFactory
{
public override Button CreateButton()
{
return new LinuxButton();
}
public override TextBox CreateTextBox()
{
return new LinuxTextBox();
}
}
调用工厂
AbstractFactory factory;
Button button;
TextBox textbox;
factory = new WindowsFactory();
button = factory.CreateButton();
textbox = factory.CreateTextBox();
button.DisplayButton();
textbox.DisplayTextBox();
Console.WriteLine("------------------------------------------");
factory = new LinuxFactory();
button = factory.CreateButton();
textbox = factory.CreateTextBox();
button.DisplayButton();
textbox.DisplayTextBox();