温故而知新:设计模式之工厂模式(Factory)

时间:2022-04-23
本文章向大家介绍温故而知新:设计模式之工厂模式(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 

这里再给出一个计算器的工厂模式示例(来自大话模式中的示例) http://files.cnblogs.com/yjmyzz/Calculator_FactoryMethod.rar