前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >温故而知新:设计模式之工厂模式(Factory)

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

作者头像
菩提树下的杨过
发布2018-01-22 16:19:35
5100
发布2018-01-22 16:19:35
举报
文章被收录于专栏:菩提树下的杨过

工厂模式:个人理解为主要用于创建"同一系列"的N个对象实例。(注意这里"同一系列"指这一系列对象均继承于某一个抽象类或均实现了某一个接口)

举例:(仍然来自李建忠老师webcast中的实例,不过做了些简化)

某汽车生产商需要对生产出来的“某一品牌”的不同型号汽车进行测试,于是写一套测试程序,这里的品牌我们就用Audi(奥迪)吧,比如现在测试的是A5,过一阵可能A6要下线,另外A7,A8...也都在研究中...

如何让这一套测试程序能应对各种型号的变化,而不是每次出来一款新型号的奥迪,就要发布一个版本?

寻找变化点:变化的只是型号,但同一品牌的测试方式却相对不变(比如商务车通常主要侧重于测试商务实用性,跑车通常主要侧重于测试引擎性能,环保概念车主要测试能耗,豪华车侧重于内部装饰...),所以只需要把同一类测试方法提出来即可

代码语言:js
复制
 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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-01-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档