天天看點

溫故而知新:設計模式之工廠模式(Factory)

工廠模式:個人了解為主要用于建立"同一系列"的N個對象執行個體。(注意這裡"同一系列"指這一系列對象均繼承于某一個抽象類或均實作了某一個接口)

舉例:(仍然來自李建忠老師webcast中的執行個體,不過做了些簡化)

某汽車生産商需要對生産出來的“某一品牌”的不同型号汽車進行測試,于是寫一套測試程式,這裡的品牌我們就用Audi(奧迪)吧,比如現在測試的是A5,過一陣可能A6要下線,另外A7,A8...也都在研究中...

如何讓這一套測試程式能應對各種型号的變化,而不是每次出來一款新型号的奧迪,就要釋出一個版本?

尋找變化點:變化的隻是型号,但同一品牌的測試方式卻相對不變(比如商務車通常主要側重于測試商務實用性,跑車通常主要側重于測試引擎性能,環保概念車主要測試能耗,豪華車側重于内部裝飾...),是以隻需要把同一類測試方法提出來即可

 1 using System;

 2 

 3 namespace FactoryMethod

 4 {

 5     class Program

 6     {

 7         static void Main(string[] args)

 8         {

 9             AudiFactory f = new A5Factory();//利用反射可完全解除 客戶程式 與具體類型的依賴,此處略過...

10             Audi a =  f.CreateAudi();

11             a.Test();

12             Console.ReadKey();

13         }

14     }

15 

16     #region "接口/抽象"部分

17     public abstract class Audi 

18     {

19         public abstract void Test();

20     }  

21 

22 

23     public abstract class AudiFactory 

24     {

25         public abstract Audi CreateAudi();

26     }

27     #endregion

28 

29 

30     #region 實作部分

31     public class A5Factory : AudiFactory 

32     {

33         public override Audi CreateAudi()

34         {

35             return new AudiA5();

36         } 

37     }

38 

39     public class A6Factory : AudiFactory

40     {

41         public override Audi CreateAudi()

42         {

43             return new AudiA6();

44         }

45     } 

46 

47     public class AudiA5 : Audi

48     {

49         public override void Test()

50         {

51             Console.WriteLine("Audi A5 測試完成!");

52         }

53     }

54 

55     public class AudiA6 : Audi

56     {

57         public override void Test()

58         {

59             Console.WriteLine("Audi A6 測試完成!");

60         }

61     }

62     #endregion

63 }

64 

溫故而知新:設計模式之工廠模式(Factory)

繼續閱讀