C#物件導向設計模式學習筆記(2) – Abstract Factory 抽象原廠模式(建立型模式)

來源:互聯網
上載者:User

提供一個介面,讓該介面負責建立一系列"相關或者相互依賴的對象",無需指定它們具體的類。

在軟體系統中,經常面臨著"一系列相互依賴的對象"的建立工作;同時,由於需求的變化,往往存在更多系列對象的建立工作。

如何應對這種變化?如何繞過常規的對象建立方法(new),提供一種"封裝機制"來避免客戶程式和這種"多系列具體對象建立工作"的緊耦合?

哪裡變化,封裝哪裡。(如果沒有變化,當然不需要額外的封裝)

 

Abstract Factory 抽象原廠模式

 

public abstract class Road { }
public abstract class Building { }

public class ClassicRoad : Road { }
public class ClassicBuilding : Building { }

public class ModernRoad : Road { }
public class ModernBuilding : Building { }


public abstract class FacilitiesFactory
{
public abstract Road CreateRoad();
public abstract Building CreateBuilding();
}

public class ClassicFacilitiesFactory : FacilitiesFactory
{
public override Road CreateRoad()
{
return new ClassicRoad();
}
public override Building CreateBuilding()
{
return new ClassicBuilding();
}
}

public class ModernFacilitiesFactory : FacilitiesFactory
{
public override Road CreateRoad()
{
return new ModernRoad();
}

public override Building CreateBuilding()
{
return new ModernBuilding();
}
}

class GameManager
{
FacilitiesFactory facilitiesFactory;
Road road;
Building building;

public GameManager(FacilitiesFactory facilitiesFactory)
{
this.facilitiesFactory = facilitiesFactory;
}

public void BuildGameFacilities()
{
road = facilitiesFactory.CreateRoad();
building = facilitiesFactory.CreateBuilding();
}

public void Play()
{
road.AAA();
building.BBB(road);
}
}

class App
{
public static void Main()
{
GameManager manager = new GameManager(new ClassicFacilitiesFactory());
manager.BuildGameFacilities();
manager.Play();
}
}

 

要點:
1、如果沒有應對“多系列對象構建”的需求變化,則沒有必要使用Abstract Factory模式,這時候使用簡單的靜態工廠完全可以;
2、“系統對象”指的是這些對象之間有相互依賴、或作用的關係,例如遊戲開發情境中的“道路”與“房屋”的依賴,“道路”與“地產”的依賴。
3、Abstract Factory模式主要在於應對“新系列”的需求變動。其缺點在於難以對“新對象”的需求變動。
4、Abstract Factory模式經常和Factory Method模式共同組合來應對“對象建立”的需求變化。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.