定義一個使用者建立對象的介面,讓子類決定執行個體化哪一個類。使一個類的執行個體化延遲到其子類。
工廠類與產品類往往具有平行的等級結構,它們之間一一對應。
相關類:
1 namespace FactoryMethod
2 {
3 //日誌
4 public abstract class Log
5 {
6 public abstract void WriteLog();
7 }
8 //資料庫日誌
9 public class DBLog : Log
10 {
11 public override void WriteLog()
12 {
13 Console.WriteLine("DBLog Success!");
14 }
15 }
16 //文本日誌
17 public class TxtLog:Log
18 {
19 public override void WriteLog()
20 {
21 Console.WriteLine("TxtLog Success!");
22 }
23 }
24 //日誌工廠
25 public abstract class LogFactory
26 {
27 public abstract Log CreateLog();
28 }
29 //資料庫日誌工廠
30 public class DBLogFactory:LogFactory
31 {
32 public override Log CreateLog()
33 {
34 return new DBLog();
35 }
36 }
37 //文本日誌工廠
38 public class TxtLogFactory:LogFactory
39 {
40 public override Log CreateLog()
41 {
42 return new TxtLog();
43 }
44 }
45 //用戶端
46 class Program
47 {
48 static void Main(string[] args)
49 {
50 string assembly = ConfigurationManager.AppSettings["Assembly"];
51 string instance = ConfigurationManager.AppSettings["Instance"];
52 //應用反射來建立工廠,在更換工廠時,不需要修改代碼
53 LogFactory factory = (LogFactory)Assembly.Load(assembly).
54 CreateInstance(instance);
55 Log log = factory.CreateLog();
56 log.WriteLog();
57 Console.ReadLine();
58 }
59 }
60 }
app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Assembly" value="FactoryMethod"/>
<add key="Instance" value="FactoryMethod.DBLogFactory"/>
</appSettings>
</configuration>