第二章: Abstract Factory( 抽象工廠)
創建一系列相互依賴的對象
主要用語多系列對象的創建(對象保持恆定)
不能用於對象的改變
意圖(Itente)
提供一個接口,讓該接口負責創建一系列"相關的或者相互依賴的對象",無需指定它們具體的類.
結構(Stucture)
簡單的代碼實現部分:
using System.Collections.Generic;
using System.Text;
using AbstractFactory1;
using Customer;
using Main;
namespace AbstractFactory1
{
//抽象工廠(AbstractFactory)
public abstract class AbstractFactory
{
public abstract ISelect Select();
public abstract IUpdate Update();
}
//共同方法接口(AbsractProjectA)
public interface ISelect
{
void Select();
}
//共同方法接口(AbsractProjectB)
public interface IUpdate
{
void Update();
}
//具體工廠類(ContenteFactory1)
public class A1Factory : AbstractFactory
{
public override ISelect Select()
{
return new A1Select();
}
public override IUpdate Update()
{
return new A1Update();
}
}
//具體實現方法ProjectA1
public class A1Select : ISelect
{
public void Select()
{ }
}
//具體實現方法ProjectB1
public class A1Update : IUpdate
{
public void Update()
{ }
}
}
//控制類,實現面向接口編程
namespace Customer
{
public class Manager
{
private AbstractFactory factory = null;
private ISelect select = null;
private IUpdate update = null;
public Manager(AbstractFactory factory)
{
this.factory = factory;
select = this.factory.Select();
update = this.factory.Update();
}
public void Select()
{
select.Select();
}
public void Update()
{
update.Update();
}
}
}
//調用
namespace Main
{
public class User
{
public static void Main()
{
Manager manager = new Manager(new A1Factory());
manager.Select();
manager.Update();
}
}
}
注意:
1.如果沒有對應"多系列的對象變化"的需求,則沒有必要使用Abstract Factoty模式,使用簡單的靜態工廠模式足了.
2."系列對象"是指對象之間有互相依賴,互相作用的的關係.
3.抽象工廠模式主要適用與"多系列"需求,而難以用與"新對象"的需求變動
4.抽象工廠一般和Factory Method共同使用,來應對"對象創建"的需求變化