温故而知新,看了以前写的博文《Asp.net读取Excel文件 2http://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. [设计模式3]--工厂(Factory)模式

    原文出处:http://blog.csdn.net/lwbeyond/article/details/7528309 工厂模式属于创建型模式,大致可以分为三类,简单工厂模式.工厂方法模式.抽象工厂模式 ...

  2. Head First 设计模式 —— 04. 工厂 (Factory) 模式

    思考题 如何将实例化具体类的代码从应用中抽离,或者封装起来,使它们不会干扰应用的其他部分? P111 将实例化具体类的代码放入一个对象中管理,通过不同入参决定实例化具体的类 简单工厂 不是23种GOF ...

  3. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

  4. C#设计模式-2工厂方法模式(Factory Method)

    什么是工厂模式?类比生活中的概念,当我们需要打电话的时候,我们需要一部手机,我们通常会选择直接去卖手机的实体店买.但在程序设计中,当我们需要调用一个类(PhoneA或PhoneB)的方法的时候,我们往 ...

  5. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  6. 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)

    原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...

  7. java设计模式--简单工厂

    java设计模式--简单工厂 简单工厂不是一个标准的设计模式,但是很常用需要掌握. 在java应用开发中,要"面向接口编程". 1.java中接口的概念: 在java中接口是一种特 ...

  8. Java设计模式系列-工厂方法模式

    原创文章,转载请标注出处:<Java设计模式系列-工厂方法模式> 一.概述 工厂,就是生产产品的地方. 在Java设计模式中使用工厂的概念,那就是生成对象的地方了. 本来直接就能创建的对象 ...

  9. Java设计模式之工厂方法模式(转) 实现是抽象工厂?

    Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站   文本Tag: 设计模式 Java [IT168 技术文章]         ...

随机推荐

  1. quick -- 添加按钮

    cc.ui.UIPushButton.new({ normal = "comm_btnGreenBackBack.png", pressed = "comm_btnGre ...

  2. Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  3. 巧用css border

    上下左右边框交界处呈现平滑的斜线.利用这个特点,通过设置不同的上下左右边框宽度或颜色,可以得到小三角.梯形等. 调整宽度大小可以调节三角形形状. 实现三角形 示例1: #test1{ height:2 ...

  4. 使用Ant编译提示Class not found: javac1.8

    无论是使用Eclipse还是使用Ant命令,都可能会在编译时遇到提示:Class not found: javac1.8 今天用Ant打包Android,apk,运行出现了batch_build.xm ...

  5. win10初体验,我的错误代码哪里去了

    今天闲着,就把WIN7升级安装成WIN10,感觉这次WIN10的升级方案确实还可以人,可以保留文件和配置升级. 升级完,试了一下宽带连接,发现错误代码没了,像下面的应该就691呢~~~

  6. 查看android app 线程信息的命令

    参考:https://my.oschina.net/zhiweiofli/blog/138454 ps | grep 'joyodream' 找到 app 的pid: joyodream为包名的一部分 ...

  7. java 读取文件路径空格和中文的处理

    应用部署时,发生文件读取错误,发现是部署路径中含有空格的文件夹名,然后把应用服务器位置迁移了. 从网上找到如下方案:1, TestURL().class.getResource("" ...

  8. c#如何区分静态只读变量和常量

    常量const 常量就是一个其值永远不会改变的静态字段.常量的值会在编译时自动推算,编译器会在遇到常量时,将其逐个替换为该常量的值.常量可以是C#内建的任何数字类型或枚举类型.声明一个常量的时候必须对 ...

  9. Jenkins:”ResourceRules.plist: cannot read resources” error after Xcode 6.1

    在 Custom xcodebuild arguments 处填入: "CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plis ...

  10. xsocks 64位平台下编译问题小记

    1.src/common/public.h uint32_t lpParameter 改为 void* lpParameter; 2.SocksMgr.cpp DWORD WINAPI CSocksM ...