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

简介: 工厂模式:个人理解为主要用于创建"同一系列"的N个对象实例。(注意这里"同一系列"指这一系列对象均继承于某一个抽象类或均实现了某一个接口) 举例:(仍然来自李建忠老师webcast中的实例,不过做了些简化) 某汽车生产商需要对生产出来的“某一品牌”的不同型号汽车进行测试,于是写一套测试程序,这里的品牌我们就用Audi(奥迪)吧,比如现在测试的是A5,过一阵可能A6要下线,另外A7,A8.

工厂模式:个人理解为主要用于创建"同一系列"的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 

img_569bd5da348139280c6527463c6dd852.png

目录
相关文章
|
1月前
|
设计模式 关系型数据库 数据库
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
21 1
|
3月前
|
设计模式 安全 数据库
创建型设计模式-单例模式/工厂模式/抽象工厂
创建型设计模式-单例模式/工厂模式/抽象工厂
37 0
|
5月前
|
设计模式 Rust Java
二十三种设计模式:工厂模式
在上面的示例中,我们定义了一个抽象的产品类 Product,它包含一个抽象的方法 use(),用于表示产品的使用方法。具体的产品类 ProductA 和 ProductB 继承自 Product,并实现了 use() 方法。
45 0
|
5月前
|
设计模式 Java 程序员
认真学习设计模式之工厂模式(Factory Pattern)
认真学习设计模式之工厂模式(Factory Pattern)
35 0
|
5月前
|
设计模式 C#
c#设计模式-创建型模式 之 工厂模式
工厂模式(Factory Pattern)是一种常用的对象创建型设计模式。该模式的主要思想是提供一个创建对象的接口(也可以是抽象类、静态方法等),将实际创建对象的工作推迟到子类中进行。这样一来,客户端只需关注接口而无须了解具体的类实现,实现了代码的解耦,提高了系统的可维护性和扩展性。工厂模式可以分为简单工厂模式,工厂方法模式和抽象工厂模式。简单工厂模式:又叫静态工厂方法模式,它是由一个工厂对象决定创建出哪一种产品类的实例,但它不属于工厂模式家族,它属于创建型模式,但不属于23种GOF设计模式之一。
21 1
|
6月前
|
设计模式 Java
设计模式6 - 抽象工厂模式【Abstract Factory Pattern】
设计模式6 - 抽象工厂模式【Abstract Factory Pattern】
20 0
|
6月前
|
设计模式
设计模式5 - 工厂方法模式【Factory Method Pattern】
设计模式5 - 工厂方法模式【Factory Method Pattern】
20 0
|
6月前
|
设计模式 Java 程序员
【设计模式——学习笔记(下)】23种设计模式——工厂模式Factory(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——工厂模式Factory(原理讲解+应用场景介绍+案例介绍+Java代码实现)
38 0
|
6月前
|
设计模式 Java 关系型数据库
【设计模式——学习笔记(上)】23种设计模式——工厂模式Factory(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——工厂模式Factory(原理讲解+应用场景介绍+案例介绍+Java代码实现)
39 0
|
8月前
|
设计模式 Java
设计模式之工厂模式(简单工厂、工厂方法、抽象工厂)
设计模式之工厂模式(简单工厂、工厂方法、抽象工厂)
56 0