HTML5技术

设计模式(0)简单工厂模式 - Fonour(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-25 15:01 我要评论( )

简单工厂类 Factory{ 创建英雄的静态方法 IHero CreateHero( string heroName){ switch (heroName){ : return new DH(); : return new WD(); : return new KOG(); : return new POM(); default : return null ;}}}

简单工厂类 Factory { 创建英雄的静态方法 IHero CreateHero(string heroName) { switch (heroName) { : return new DH(); : return new WD(); : return new KOG(); : return new POM(); default: return null; } } }

然后外部调用的时候通过简单工厂方法创建各个英雄的实例。

IHero dh = Factory.CreateHero(); dh.ShowSkills(); IHero wd = Factory.CreateHero(); wd.ShowSkills(); IHero kog = Factory.CreateHero(); kog.ShowSkills(); IHero pom = Factory.CreateHero(); pom.ShowSkills();

初识简单工厂模式的时候,最大的疑问就是,这个简单工厂类,无非就是把原来在外部调用时创建具体英雄类实例的代码挪了过去,在简单工厂类里面还是一样需要通过new指定具体的类来进行接口的实例化啊,而且还白白多了一个简单工厂类,意义何在?

其实简单工厂类最大的意义还是起到接口隔离的作用,看到隔离这个词,就肯定有隔离的双方(封装体),我们多增加一个简单工厂类,表面上看是多了一个类,并没有减少任何代码,也没有对代码进行大的更改,只是一个英雄实例化代码的位置移动,简单工厂模式的精髓恰恰就是这个具体类实例化代码位置的移动,我们知道,使用接口的目的就是不让外部调用知道封装体内部的实现,在使用简单工厂类之前,我们创建英雄实例的代码很明显的是位于外部调用部分的,这样其实就是没有隔离,由于简单工厂类位于封装体内部的,工厂类是可以知道具体的实现细节的。使用简单工厂类后,相当于这个封装提对外只公开了一个IHero接口及一个工厂类创建英雄的方法给外部调用,这样隔离就很明确了,只是一段代码位置的移动,从设计上来讲,已经发生了本质的变化。

3 简单工厂的几点建议
  • 工厂方法静化
  •      简单工厂类中创建实例的方法,应为静态方法。

  • 实例创建配置文件化
  •      实例创建应尽量通过配置文件及反射机制,动态创建,达到能根据某个值,自动判断并创建对应类的实例的目的,这样就可以将庞大的swith语句块消除,同时,实例化部分的修改,只需要修改配置文件即可。

  • 简单工厂模块化
  •      一个简单工厂可以定义多个创建实例的静态方法,建议按照不同的功能模块,创建不同的工厂类。因为简单工厂类是一个模块封装提的一部分。

    4 简单工厂模式的优点
  • 封装
  •    能够非常简单快捷的实现模块的组件化,组件通过对外公开接口,实现面向接口编程

  • 解耦
  •     实现了外部调用和具体实现的解耦,增强了系统的健壮性和易维护性。

    源码下载

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架 - Frank.Cui

      DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的OR

      2017-03-18 14:07

    • 基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输 - HOWIE-CH

      基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输 - HO

      2017-03-09 17:00

    • 关于ionic2打包android时gradle下载不了的解决方法(附:简单优化启动速度彩蛋) - 无所事事者爱嘲笑

      关于ionic2打包android时gradle下载不了的解决方法(附:简单优化启

      2017-03-03 13:00

    • 一个简单粗暴的人脸认证标注工具的实现 - 喵耳朵

      一个简单粗暴的人脸认证标注工具的实现 - 喵耳朵

      2017-01-05 11:01

    网友点评
    1