C#物件導向設計模式學習筆記(4) – Factory Method Factory 方法模式(建立型模式)

來源:互聯網
上載者:User

 

Factory Method模式解決“單個對象”的需求變化;

Abstract Factory模式解決“系列對象”的需求變化;

Builder模式解決“對象部分”的需求變化。

 

耦合關係直接決定著軟體面對變化時的行為:

1、模組與模組之間的緊耦合使得軟體面對變化時,相關的模組都要隨之更改

2、模組與模組之間的松耦合使得軟體面對變化時,一些模組更容易被轉換或者,但其他模組保持不變

 

在軟體系統中,經常面臨著“某個對象”的建立工作;由於需求的變化,這個對象的具體實現經常面臨著劇烈的變化,但是它卻擁有比較穩定的介面

如何應對這種變化?如何提供一種“封裝機制”秋隔離出“這個易變對象”的變化,從而保持系統中“其他依賴該對象的對象”不隨著需求改變而改變?

定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類。Factory Method使得一個類的執行個體化延遲到子類。

 

1、一般做法:

class Car
{
public void Startup() { }
public void Run() { }
public void Turn(Direction direction) { }
public void Stop() { }
}
class CarTestFramework
{
public void BuildTestContext()
{
Car car = new Car();
}
public void DoTest()
{
Car car = new Car();
}
public TestData GetTestData()
{
Car car = new Car();
}
}

 

2、Factory 方法模式:

public abstract class AbstractCar
{
public abstract void Startup() { }
public abstract void Run() { }
public abstract void Turn(Direction direction) { }
public abstract void Stop() { }
}
public abstract class CarFactory
{
public abstract AbstractCar CreateCar();
}

 

public class HongqiCar : AbstractCar
{
Enginee enginee1;
Enginee enginee2;
public override void Startup() { }
public override void Run() { }
public override void Turn(Direction direction) { }
public override void Stop() { }
}
public class HongqiCarFactory : CarFactory
{
public override AbstractCar CreateCar()
{
return new HongqiCar();
}
}

 

public class DongfengCar : AbstractCar
{
Enginee enginee1;
Enginee enginee2;
public override void Startup() { }
public override void Run() { }
public override void Turn(Direction direction) { }
public override void Stop() { }
}
public class DongfengCarFactory : CarFactory
{
public override AbstractCar CreateCar()
{
return new DongfengCar();
}
}

 

class CarTestFramework
{
public void BuildTestContext(CarFactory carFactory)
{
AbstractCar car1 = carFactory.CreateCar();
AbstractCar car2 = carFactory.CreateCar();
}
public void DoTest(AbstractCar car)
{
car.Startup();
}
public TestData GetTestData(AbstractCar car)//獲得測試資料
{
car.Startup();
}
}
class App
{
public static void Main()
{
CarTestFramework carTestFramework = new CarTestFramework();
carTestFramework.BuildTestContext(new HongqiCarFactory());
carTestFramework.BuildTestContext(new DongfengCarFactory());

//CarTestFramework carTestFramework = new CarTestFramework();
//Type t = assembly.GetType("builderName");
//CarFactory carFactory = Activator.CreateInstance(t);
//carTestFramework.BuildTestContext(carFactory);
}
}

 

要點:

1、Factory Method模式主要用於隔離類對象的使用者和具體類型之間的耦合關係。面對一個經常變化的具體類型,緊耦合關係會導致軟體的脆弱。

2、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.