博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
咕泡-工厂 Factory设计模式笔记
阅读量:5811 次
发布时间:2019-06-18

本文共 1059 字,大约阅读时间需要 3 分钟。

hot3.png

##查看代码:

个人感悟:

  • 设计模式都是处理复杂问题的,如果问题本身很简单,使用设计模式反而累赘,增加了开发的复杂性
  • 遇到最简单的情况,直接 new 
  • 如果创建对象的过程简单(比如封装一些页面需要展示用的对象,数据来源可能来自不同的地方,可以考虑在构造方法中封装;再比如导出到excel的对象封装),但是需要匹配不同情况,返回不同对象时:考虑使用简单工厂
  • 如果遇到对象创建过程复杂(比如数据库连接这样的复杂对象,不仅仅牵涉到new 一个对象这么简单),这样需要把创建过程抽象出来,统一编写,对外提供干净的接口调取即可:考虑使用工厂模式
  • 如果遇到对象创建过程复杂、而且多对象匹配问题(比如默认去缓存库redis取,如果缓存库娶不到,去oracle数据库取),在上一条我们已经把redis、oracle的创建做成了工厂,此时需要对二者统一再抽象一层:考虑使用抽象工厂
  • 另外,类似汽车的建造也可以理解为抽象工厂模式,因为每个零件,比如轮胎、发动机等的建造都是复杂的过程,都可以是工厂模式去实现创建过程,生产整个汽车在工厂模式(可能已经是抽象工厂模式)上面再做一层抽象

简单工厂模式(Factory)

  • 做静态工厂方法(StaticFactory Method)模式,但不属于23 种设计模式之一
  • 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类
  • Spring 中的BeanFactory 就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean 对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定

5e482b2529e73baecd905620afa651262be.jpg

工厂方法模式(Factory Method)

应用场景:

  • 通常由应用程序直接使用new 创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象
  • 一般情况下,应用程序有自己的工厂对象来创建Bean
  • 如果将应用程序自己的工厂对象交给Spring 管理,那么Spring 管理的就不是普通的Bean,而是工厂Bean

a250a37f91daabc58159f40de7f1bb15478.jpg

  • 工厂生产相应的产品

37f933bd41877b94be9492cd76efdce8d69.jpg

抽象工厂模式

  • 何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品
  • 如何解决:在一个产品族里面,定义多个产品。每个具体的工厂负责一个产品族。抽象工厂的返回值为最高级抽象产品

非常适合解决两个维度的组合产品的构造问题,取其中一个维度作为产品族,另外一个维度作为产品族中具体的多个产品

 

转载于:https://my.oschina.net/u/3847203/blog/1929534

你可能感兴趣的文章
使用《Deep Image Prior》来做图像复原
查看>>
如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
查看>>
Linux基础命令---rmdir
查看>>
iOS sqlite3(数据库)
查看>>
粤出"飞龙",打造新制造广东样本
查看>>
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
C#字符串的不变性
查看>>
比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)...
查看>>
分享15款很实用的 Sass 和 Compass 工具
查看>>
AMD优势: 与众不同 选择丰富
查看>>
玩转高性能超猛防火墙nf-HiPAC
查看>>
简单按日期查询mysql某张表中的记录数
查看>>
C/C++编程可用的Linux自带工具
查看>>
如何判断webview是不是滑到底部
查看>>
海贼王十大悲催人物
查看>>
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 搞定!
查看>>
热点热词新闻资讯API开放接口(永久免费开放)
查看>>