工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A(). 工厂模式也是用来创建实例对象的,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

类Sample为例,要创建Sample的实例对象:

Sample sample=new Sample();
可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等

首先,我们想到的是,可以使用Sample的构造函数,这样生成实例就写成:

Sample sample=new Sample(参数);

但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了

初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。

我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。

你想如果有多个类似的类,我们就需要实例化出来多个类。这样代码管理起来就太复杂了。
这个时候你就可以采用工厂方法来封装这个问题。
不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,我们需要将Sample抽象成一个接口.现在Sample是接口,有两个子类MySample 和HisSample

Sample mysample=new MySample();
Sample hissample=new HisSample();
采用工厂封装:

public class Factory{

  public static Sample creator(int which){

  //getClass 产生Sample 一般可使用动态类装载装入类。
  if (which==1)
    return new SampleA();
  else if (which==2)
    return new SampleB();

  }

}

那么在你的程序中,如果要实例化Sample时.就使用

Sample sampleA=Factory.creator(1);

举个更实际的例子,比如你写了个应用,里面用到了数据库的封装,你的应用可以今后需要在不同的数据库环境下运行,可能是oracle,db2,sql server等,那么连接数据库的代码是不一样的,你用传统的方法,就不得不进行代码修改来适应不同的环境,非常麻烦,但是如果你采用工厂类的话,将各种可能的数据库连接全部实现在工厂类里面,通过你配置文件的修改来达到连接的是不同的数据库,那么你今后做迁移的时候代码就不用进行修改了。

我通常都是用xml的配置文件配置许多类型的数据库连接,非常的方便。

工厂模式简介-作用和好处相关推荐

  1. 【设计模式】抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )

    文章目录 一.抽象工厂模式简介 二.抽象工厂模式适用场景 三.抽象工厂模式优缺点 四.产品等级结构和产品族 五.抽象工厂模式代码示例 1.冰箱抽象类 2.美的冰箱实现类 3.格力冰箱实现类 4.空调抽 ...

  2. 什么是工厂模式?工厂模式的作用?为什么要使用工厂模式?

    工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端 ...

  3. 【设计模式】工厂模式的作用?工厂模式有什么优点?

    注:例子根据菜鸟案例进行更生动的改编,并加以自己的理解 创建一个People接口 public interface People {void makeMoney(); } 实现了People接口的大儿 ...

  4. C#实现工厂模式简介--实现访问不同的数据库

    首先是配置文件:其中的providerName就是指定的不同数据库类型 <connectionStrings> <addnameaddname="..."conn ...

  5. 设计模式学习(二)——创建型模式之“工厂模式“

    常见的创建型模式: 单例模式(手写)--只有一个实例 工厂模式--由对象工厂生成对象 建造者模式--组装复杂的实例 原型模式--通过复制生成实例 一.工厂模式的介绍 1.1.工厂模式的定义 在基类中定 ...

  6. php设计模式的作用是什么意思,php设计模式工厂模式有什么作用?

    我们给大家介绍了php工厂模式的好处,工厂模式的含义,以及工厂模式的三种情况,那么我们今天继续给大家介绍php工厂模式的作用是什么! 工厂模式分为三种:简单工厂.工厂方法.抽象工厂 ,三种工厂的区别是 ...

  7. GOF23设计模式(创建型模式)工厂模式

    目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式.工厂模式.抽象 ...

  8. 由浅到深了解工厂模式

    作者 点先生 日期 2018.9.26 唠个嗑 先给各位观众老爷道个歉,在上一篇文章的末尾本来说了这次要给大家分享代理模式,但是臣妾,做不到啊! 最近公司给我了一个新项目,于是比较忙一点,再加上代理模 ...

  9. springboot工厂模式_最新整理138道阿里、快手等大厂面试题解析:基础+Spring+并发+JVM+设计模式+缓存...

    这些题目都是阿里.百度.美团.快手等一线互联网公司面试被问到的题目.熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率,希望可以帮助大家,祝大家求职顺利! Java集合22题 ArrayList ...

最新文章

  1. ARM的突破:超级计算机和Mac
  2. PHP高性能分布式应用服务器框架-SwooleDistributed
  3. systematic literature review how to write it?
  4. spark搭建和使用,处理massive文件
  5. 130242014045 林承晖 第2次实验
  6. 外设驱动库开发笔记6:AD719x系列ADC驱动
  7. Java讲课笔记11:构造方法与this关键字
  8. 《ArcGIS Runtime SDK for .NET开发笔记》--三维功能
  9. 程序员群名称大全_微信群群名技巧和群名称大全(上)
  10. linux系统组成以及运行模式
  11. 使用ZeroBrane Studio调试OpenResty Lua脚本
  12. 妙用TurboMail企业通讯平台,重要邮件不再躲猫猫
  13. MySQL/InnoDB中,对于锁的认识
  14. linux下c程序调用reboot函数实现直接重启【转】
  15. java实现导出excel表_Java导出网页表格Excel过程详解
  16. 教你如何安装字体包 ——思源免费商用字体
  17. GaRy-Liang的linux成长日记2-系统安装
  18. 序列化(boost serialization)
  19. 安卓Android的手机微博平台设计与开发
  20. 元学习:Meta-Learning in Neural Networks: A Survey

热门文章

  1. Office Professional Plus 2019 下载安装激活
  2. java课程设计心得体会绪论
  3. 【C++】特殊类相关设计
  4. 股票配资系统平台源码搭建-股票配资交易软件开发
  5. Java 正则表达式 中的 任意字符
  6. anki 新的卡片类型_Anki选择题卡片制作详解
  7. 正则表达式详解(Perl)
  8. Android获取设备的SerialNumber(SN)串号以及WIFIMac值
  9. [SUCCESS]Fedora install Nvidia-driver
  10. 【MyBatis 面试题】