簡單的說摩幔,工廠模式替代了new Class( )的過程,將不同類型對象的創(chuàng)建封裝了起來驹暑。
優(yōu)點:
對象緩存
回收不再使用的對象,重復(fù)利用封裝
有些對象的創(chuàng)建邏輯比較復(fù)雜辨赐,而調(diào)用者不需要知道优俘。
符合迪米特原則。解耦
工廠返回的對象類型可以是抽象類或接口掀序,避免了調(diào)用者直接與具體類發(fā)生耦合帆焕。
符合依賴倒置原則,模塊間的依賴通過抽象發(fā)生不恭。
舉例:
游戲中叶雹,角色會使用多把武器,角色只需要通過武器的ID來獲取武器對象即可换吧,不需要自己實現(xiàn)具體的細(xì)節(jié)折晦。
此時可以創(chuàng)建一個WeaponFactory,為角色創(chuàng)建需要的武器沾瓦。
public class WeaponFactory
{
public IWeapon CreateWeapon(int id)
{
// 通過id在武器配置文件中找到武器對應(yīng)的類名
// 看對象池中有沒有可利用的武器對象
// 沒有满着,則使用反射創(chuàng)建武器對象
// 返回武器
}
}
調(diào)用者
IWeapon currentWeapon = weaponFactory.CreateWeapon(1001);
這里看出谦炒,調(diào)用者只依賴了抽象,即武器對象實現(xiàn)的接口IWeapon风喇,并沒有依賴具體的武器類宁改,符合了依賴倒置原則,達(dá)到了解耦的目的响驴。
衍生
簡單工廠
單例工廠透且,有時工廠只需要有一個實例。多工廠
不同產(chǎn)品的創(chuàng)建區(qū)別較大時豁鲤,可以使用多個子類工廠進(jìn)行不同產(chǎn)品的創(chuàng)建秽誊,可以避免所有邏輯都集中在一個工廠內(nèi)。
abstract class HumanFactory
{
abstract IHuman CreateHuman( );
}
class AsiaHumanFactory : HumanFactory
{
override IHuman CreateHuman()
{
}
}