名稱 | Abstract Factory |
結構 | |
意圖 | 提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。 |
適用性 | - 一個系統要獨立于它的產品的創建、組合和表示時。
- 一個系統要由多個產品系列中的一個來配置時。
- 當你要強調一系列相關的產品對象的設計以便進行聯合使用時。
- 當你提供一個產品類庫,而只想顯示它們的接口而不是實現時。
|
namespace AbstractFactory
{
public abstract class AbstractControlFactory
{
abstract public AbstractTextBox CreateTextBox();
abstract public AbstractButton CreateButton();
}
public class ControlFactoryXP : AbstractControlFactory
{
public override AbstractTextBox CreateTextBox()
{
return new TextBoxXP();
}
public override AbstractButton CreateButton()
{
return new ButtonXP();
}
}
public class ControlFactoryVista : AbstractControlFactory
{
public override AbstractTextBox CreateTextBox()
{
return new TextBoxVista();
}
public override AbstractButton CreateButton()
{
return new ButtonVista();
}
}
}
namespace AbstractFactory
{
public abstract class AbstractButton
{
public abstract void Show();
}
public class ButtonXP : AbstractButton
{
public ButtonXP()
{
//Console.WriteLine("XP style Button created!");
}
public override void Show()
{
Console.WriteLine("This is XP style Button");
}
}
public class ButtonVista : AbstractButton
{
public ButtonVista()
{
//Console.WriteLine("Vista style Button created!");
}
public override void Show()
{
Console.WriteLine("This is Vista style Button");
}
}
}
namespace AbstractFactory
{
public abstract class AbstractTextBox
{
public abstract void Show();
}
public class TextBoxXP : AbstractTextBox
{
//public TextBoxXP()
//{
//}
public override void Show()
{
Console.WriteLine("This is XP style TextBox");
}
}
public class TextBoxVista : AbstractTextBox
{
public override void Show()
{
Console.WriteLine("This is Vista style TextBox");
}
}
}
namespace AbstractFactory
{
public class ControlApp
{
private AbstractButton button;
private AbstractTextBox textbox;
public ControlApp(AbstractControlFactory factory)
{
button = factory.CreateButton();
textbox = factory.CreateTextBox();
}
// Methods
public void Show()
{
button.Show();
textbox.Show();
}
}
class Client
{
static void Main(string[] args)
{
AbstractControlFactory FactoryXP = new ControlFactoryXP();
ControlApp appXP = new ControlApp(FactoryXP);
appXP.Show();
AbstractControlFactory FactoryVista = new ControlFactoryVista();
ControlApp appVista= new ControlApp(FactoryVista);
appVista.Show();
}
}