工厂模式就相当于创建实例对象的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. 7 虚拟磁盘恢复虚拟机
  2. nginx lua连接mysql_OpenResty的安装和在nginx中使用lua直接访问mysql达到数据接口的统一...
  3. 外挂学习之路(3)--- 内存遍历工具
  4. 14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告
  5. 微信读书android换到ios,Android 微信读书本周推荐传送带列表实现
  6. openpyxl 读写 excel
  7. js判断数组里是否有重复元素的方法
  8. 潘达抽奖盒子小程序源码V3.3.4 附安装包+小程序前端
  9. Android蓝牙A2DP连接实现
  10. python识别简单训练模型_Python-OpenCV —— 物体识别(TrainCascadeClassification)
  11. XP访问windows 2003终端服务显示到期的解决
  12. 您的CPU支持该TensorFlow二进制文件未编译为使用的指令:AVX AVX2
  13. 从零开发区块链应用(十一)--以太坊地址生成
  14. 修真院教学模式三大阶段之任务体系
  15. 半年内连发6篇CNS!又一顶级学者全职回国,加盟浙大!
  16. miui11升级鸿蒙,MIUI11新版本推送 GPU驱动更新 小米10 Pro跑分轻松突破60万
  17. 第四届长安杯电子取证大赛个人总结
  18. java发送outlook_在Outlook 2007中发送民意调查
  19. Android (嘤)英语语音识别 简单概况
  20. html5 canvas模拟的爆炸效果

热门文章

  1. 神经网络调参-warmup and decay
  2. hdu 6194string string string 后缀自动机
  3. 域名系统中的本地域名服务器、根域名服务器、顶级域名服务器以及权限域名服务器。
  4. php自由脱式组件,脱式计算.26×3+451314×(603-596)3000-830×31738÷(45÷5)
  5. 新闻传播专业的本科毕业论文,有哪些比较好的选题?
  6. yolov7_obb在WIN10下训练自己的数据集
  7. python拟合sir模型_SI,SIS,SIR模型的正确实现(python)
  8. register关键字的使用
  9. android8.1 source build/envsetup.sh分析 增加删除lunch
  10. 安装从GitHub下载的包