抽象工廠模式比工廠模式具有更高層次的抽象性。當要返回一系列相關類的某一個,而每個類都能根據需要返回不同的對象時,可以使用這種模式。換句話說,抽象工廠是一個工廠對象,他能返回一系列相關類中的某一個類。也就是可以用簡單工廠去決定返回哪一個類。
工廠模式的工廠,實例化的對象只有一個,如果實例化的對象是多個,就成了抽象工廠模式,其實工廠模式和抽象工廠也就這點區別
示意圖
示例代碼
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();