温故而知新:设计模式之工厂模式(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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用python批量修改XML文件中图像的depth值
- PHP数组对象与Json转换操作实例分析
- PHP防止sql注入小技巧之sql预处理原理与实现方法分析
- php实现微信公众号企业转账功能
- 实例分析10个PHP常见安全问题
- laravel清除视图缓存的代码
- Smarty模板类内部原理实例分析
- laravel框架与其他框架的详细对比
- ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写办法
- PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
- PHP实现简单登录界面
- PHP创建XML接口示例
- PHP设计模式之单例模式入门与应用详解
- Laravel框架实现定时Task Scheduling例子
- PHP使用 Pear 进行安装和卸载包的方法详解