名稱 | Abstract Factory |
結(jié)構(gòu) | |
意圖 | 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。 |
適用性 | - 一個(gè)系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時(shí)。
- 一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系列中的一個(gè)來配置時(shí)。
- 當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時(shí)。
- 當(dāng)你提供一個(gè)產(chǎn)品類庫,而只想顯示它們的接口而不是實(shí)現(xiàn)時(shí)。
|
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();
}
}