從耦合關係談起
耦合關係直接決定著軟體面對變化時的行為
– 模組與模組之間的緊耦合使得軟體面對變化時,相關的模組都要隨之更改
– 模組與模組之間的松耦合使得軟體面對變化時,一些模組更容易被替換或者更改,但其他模組保持不變
動機(Motivation)
在軟體系統中,經常面臨著“某個對象”的建立工作;由於需求的變化,這個對象經常面臨著劇烈的變化,但是它卻擁有比較穩定的介面。
如何應對這種變化?如何提供一種“封裝機制”來隔離出“這個易變對象”的變化,從而保持系統中
意圖(Intent)
定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類。Factory Method使得一個類的執行個體化延遲到子類。——《設計模式》GoF
結構(Structure)
Factory Method模式的幾個要點
- Factory Method模式主要用於隔離類對象的使用者和具體類型之間的耦合關係。面對一個經常變化的具體類型,緊耦合關係會導致軟體的脆弱。
- Factory Method模式通過物件導向的手法,將所要建立的具體對象工作延遲到子類,從而實現一種擴充(而非更改)的策略,較好地解決了這種緊耦合關係。
- Factory Method模式解決“單個對象”的需求變化,Abstract Factory 模式解決“系列對象”的需求變化,Builder模式解決“對象部分”的需求變化。
代碼:
代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace testWpf
{
public abstract class AbtractCar
{
public abstract void Startup();
public abstract void Run();
public abstract void Turn(Direction dretion);
public abstract void Stop();
}
public abstract class CarFactory
{
public AbtractCar CreateCar()
{
return new HongQiCar();
}
}
public class HongQiCar : AbtractCar
{
public override void Startup() { }
public override void Run() { }
public override void Turn(Direction dretion) { }
public override void Stop() { }
}
public class HongqiCarFactory : CarFactory
{
public override AbtractCar CreateCar()
{
return new HongQiCar();
}
}
public class CarTestFramework
{
public void BuidTestContext(CarFactory carFactory)
{
AbtractCar c1 = carFactory.CreateCar();
}
public void DoTest(AbtractCar car)
{
car.Run();
}
public Car GetTestData(AbtractCar car)
{
return car;
}
}
public class App
{
public static void Main()
{
CarTestFramework carTestFramework = new CarTestFramework();
//carTestFramework.BuidTestContext(new DongFengCarFactory());
//讓子類決定執行個體化哪一個類
carTestFramework.BuidTestContext(new HongqiCarFactory());
}
}
}