工廠模式:個人了解為主要用于建立"同一系列"的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