温故而知新,看了以前写的博文《Asp.net读取Excel文件 2》http://www.cnblogs.com/insus/archive/2011/05/05/2037808.html 觉得第一段代码示例,可以使用设计模式的简单工厂来实现。

也就是说,使用两个全新的类,替代两个Switch分支。

Xls类:

Xlsx类:

经这样分离之后,Switch代码,就可以写成下面这样子:

上面的高亮的方法是相同的,两个类的方法相同,我们可以抽取至父类作为父类的public的方法,但是Insus.NET在开发时ASP.NET时,很少使用继承,因为xxx.aspx.cs已经继承了System.Web.UI.Page,如果再创建一个父类来继承,是无法解的问题,因为一个类只能继承一个父类。

因此,我们可以采用写成接口或是抽象象类。类能继承多个接口或是抽象类。

抽象类写好了,因此两个类Xls和Xlsx需要稍修改一下,实现上面的抽象类FileFormat:

Xlsx相同的修改:

在Switch程序块中,我们就可以改为:

上面高亮的代码,就是我们平时所说的多态。修改到这里,我们还是让前端写的代码太多,是不是可以写一类,专处理用户传入的Excel类型,就能直接呼叫对应的类呢?这里Insus.NET就是想说,可以写一个简单工厂来。直接把Switch程序搬至工厂类去。xxx.aspx.cs直接呼叫即可,也算得上去封装吧:

最终本篇最开头的代码示例,就可以使用这个简单工厂去替代Switch方法块:

下面内容于2014-12-18 15:01分添加:

简单工厂有一个问题,就是当有新类别添加或是减少时,我们都得去修改FileFactory类。解决这个问题可以使用反射Reflection来处理。

下面内容于2014-12-19 14:03分添加:

上面#34行代码,还可以重构为:

设计模式--简单工厂(Factory)模式相关推荐

  1. Spring常用设计模式--简单工厂模式

    本专栏内容参考自:咕泡学院Tom老师的<Spring5核心原理与30个类手写实战>,仅作个人学习记录使用,如有侵权,联系速删. 工厂模式的由来:   在现实生活中我们都知道,原始社会自给自 ...

  2. 秒懂设计模式之工厂方法模式(Factory Method Pattern)

    [版权申明] 非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/86636494 出自:shusheng00 ...

  3. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

  4. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  5. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  6. 设计模式学习笔记——工厂(Factory)模式

    设计模式学习笔记--工厂(Factory)模式 @(设计模式)[设计模式, 工厂模式, factory] 设计模式学习笔记工厂Factory模式 基本介绍 工厂案例 类图 实现代码 framework ...

  7. 设计模式—简单工厂模式

    前言 简单工厂模式是一种比较容易理解的设计模式 简单工厂模式介绍 在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,当使用new 关键字创建一个对象时,此时该类就依赖于这个对象,也就是他们间的 ...

  8. 设计模式 - 简单工厂模式

    文章目录 设计模式 - 简单工厂模式 1.意图 2.实例 1.创建颜色接口 - 定义生产的产品是什么 2.创建颜色枚举 - 定义生产哪些类型的产品 3.根据颜色枚举创建产品 - 根据产品清单生产产品 ...

  9. 最简单java设计模式:工厂方法模式

    前言 在前一篇文章讲解了一下简单工厂模式,在上篇文章中,我们也讲到了简单工厂模式的缺点,就是不满足开闭原则,这对于软件的设计来说,是不太好的,而下面讲解的工厂方法模式,正是为了弥补简单工厂模式的缺点, ...

最新文章

  1. c++ vector 中的坑
  2. 应用jBPM4解决中国特色的流程需求 (看过之后,强烈推荐)
  3. libevent源码学习-----时间管理
  4. 单片机小白学步系列(三) 偶遇51单片机
  5. 页面错误!请稍后再试_微信内嵌H5页面授权和分享
  6. C/C++劫持技术(函数劫持、dll注入、动态库注入、HOOK)
  7. linux命令快速手记 — 让手指跟上思考的速度(四)
  8. linux之我常用的20条命令(之一)
  9. 三菱PLC-信捷人机通信(编程)
  10. ISSCC上的微型计算机:体积更小、功耗更少、算力更强
  11. 如何配置QQ邮箱或腾讯企业邮箱发送邮件
  12. Scala+HuffmanCoding实现无损压缩
  13. vue3+element plus下面,自定义el-table表格标题
  14. 不要浪费时间跟踪技术债务
  15. Python 判断无向图是否存在环
  16. CSDN20181217博客黑板报
  17. macOS 系统下的安装 PHP
  18. MAC 安装及配置maven
  19. WebRTC::FEC
  20. 名企笔试:网易游戏2017招聘笔试题(赶去公司)

热门文章

  1. linux内核syscall_define6,Syscall系统调用Linux内核跟踪
  2. Verilog设计实例(3)基于Verilog的单端口同步读写RAM设计
  3. 静态时序分析的概念以及约束的作用理解
  4. Redis将继续采用BSD许可证
  5. 取余运算 C和python的区别
  6. 「Python」一文读懂装饰器
  7. junit4X系列--Builder、Request与JUnitCore
  8. 转vc++ 类自己消失
  9. CentOS 6.3 运维监控之Cacti 监控主机系统(二)
  10. 移动网站开发中常用的10段JavaScript代码