定义:

在spring和其他的框架中,工厂模式被大量使用,实际上工厂模式就是帮助我们实例化对象的设计模式,因为在实际的项目中,实例化对象的同时,可能对象中有大量的初始化工作,如果每次项目有个地方用到这个实例化,后面都要加上一堆的初始化参数,变量等操作,那就太繁琐了并且后续维护难度大,我们可以把这个动作交给工厂,我们只需要调用工厂给我们提供的方法,就可以获取到初始化完成的对象。

场景:

一个客户到想网上购买一双鞋,考虑两个体育品牌,鸿星尔克和贵人鸟,

工厂方法模式:

鞋产品接口:

public interface Shoes {/** @description: 展示鞋信息*/public void showShoes();
}

鸿星尔克鞋产品:

/** @description: 鸿星尔克鞋*/
public class ERKE_Shoes implements Shoes {@Overridepublic void showShoes() {System.out.println("一双鸿星尔克鞋");}
}

贵人鸟鞋产品:

/** @description: 贵人鸟鞋*/
public class GRN_Shoes implements Shoes {@Overridepublic void showShoes() {System.out.println("一双贵人鸟鞋");}
}

体育品牌工厂接口类:

public interface SportsFactory {/** @description: 生产鞋* @return:  对应品牌店生产的鞋对象*/public Shoes makeShoes() ;}

鸿星尔克工厂类:

public class ERKEFactory implements SportsFactory{@Overridepublic Shoes makeShoes() {//初始化店员,灯光,空调,镜子等等等等return new ERKE_Shoes();}
}

贵人鸟 工厂类:

public class GRNFactory implements SportsFactory{@Overridepublic Shoes makeShoes() {//初始化店员,灯光,空调,镜子等等等等return new GRN_Shoes();}
}

测试类:

public class mainTest {public static void main(String[] args) {//客户买鞋//客户想买鸿星尔克的鞋,创建鸿星尔克品牌工厂SportsFactory sportsFactory = new ERKEFactory();//鸿星尔克品牌工厂中创建鸿星尔克产品对象Shoes shoes = sportsFactory.makeShoes();//鞋信息shoes.showShoes();//客户想买贵人鸟的鞋,创建贵人鸟品牌工厂SportsFactory sportsFactory2 = new GRNFactory();//贵人鸟品牌工厂中创建贵人鸟产品对象Shoes shoes2 = sportsFactory2.makeShoes();//鞋信息shoes2.showShoes();}
}

效果:

总结:

简单工厂,是把产品对象实例化中初始化的操作给工厂,把这一块代码抽象出来,以后初始化有改动,就只需要改工厂对应方法即可

工厂方法模式,对比简单工厂,简单工厂是把所有产品实例都交给一个大工厂,而工厂方法模式把这个操作细分给了具体的品牌工厂,大工厂只提供抽象接口,具体实例化初始化由各自品牌工厂完成

JAVA -- 工厂模式之 工厂方法模式相关推荐

  1. java与模式孙悟空_悟空模式-java-工厂方法模式

    [却说那七衣仙女自受了大圣的定身法术,一周天方能解脱,各提花篮,回奏王母说道:"齐天大圣使术法困住我等,故此来迟."王母问道:"汝等摘了多少蟠桃?"仙女道:&q ...

  2. java工厂方法模式_java-工厂方法模式的优势

    从wiki开始, 工厂方法设计模式解决了以下问题: >如何创建对象,以便子类可以重新定义要实例化的类? >类如何将实例化延迟到子类? 例如,MazeGame提供了实例化功能来像MagicM ...

  3. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  4. python模板模式_python-模板方法模式

    说明: 模板方法模式时行为模式中比较简单的设计模式之一.模板方法关注这样的一类行为:该类行为在执行过程中拥有大致相同的动作次序,只是动作在实现的具体细节上有所差异.例如:泡茶和泡咖啡,泡茶:把水煮沸, ...

  5. 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)...

    回到目录 之前的讲过两篇关于日志组件的文章,分别是<第一回  日志记录组件之自主的Vlog>和<第三回  日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志 ...

  6. 设计模式(九)模版方法模式

    相关文章 设计模式(一)设计六大原则 设计模式(二)单例模式的七种写法 设计模式(三)建造者模式 设计模式(四)简单工厂模式 设计模式(五)观察者模式 设计模式(六)代理模式 设计模式(七)装饰模式 ...

  7. 《JAVA与模式》之模板模式(转载)

    模板方法在servlet中的应用:http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html 原文出处:http://blo ...

  8. 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)

    0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...

  9. Builder Design模式和Factory Design模式之间有什么区别?

    Builder设计模式和Factory设计模式有什么区别? 哪一个更有利,为什么? 如果我想测试和比较/对比这些模式,如何将我的发现表示为图形? #1楼 建筑商和抽象工厂 在某种程度上,Builder ...

  10. 《转》java设计模式--工厂方法模式(Factory Method)

    本文转自:http://www.cnblogs.com/archimedes/p/java-factory-method-pattern.html 工厂方法模式(别名:虚拟构造) 定义一个用于创建对象 ...

最新文章

  1. flume源码学习4-SourceRunner与ExecSource实现
  2. Redisbook学习笔记(3)数据类型之集合
  3. 新手WEB开发者易出现的30个问题(转)
  4. Xilinx FPGA PLL输出不能直接连接IO解决方法
  5. 安装DCU组件出错的解决方法
  6. 两坐标点的直线距离c语言,c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode...
  7. 高等代数第3版下 [丘维声 著] 2015年版_义务教育数学课程标准(2011年版)(部分内容)...
  8. knn(k近邻算法)——python
  9. Deep Learning 效率神器推荐
  10. 运营日记:App推广手段详解
  11. php 修改word内容,php如何替换word内容
  12. 编写可变参数函数 c语言,C语言可变参数函数的编写
  13. c/c++/linux精确定时器
  14. Qt编写安防视频监控系统33-onvif云台控制
  15. 8 大主流自媒体平台优缺点分析以及运营建议
  16. 丁香医生vue开发项目,接口用的主要是官方开放的Api接口,无后端
  17. PC客户端自动化测试-控件操作方法
  18. el-checkbox状态值修改而样式不修改的原因
  19. linux 音频播放器源码,Android音乐播放器源码
  20. SpringAOP所需jar包(cglib、aopalliance、aspectj.weaver)

热门文章

  1. MFC手动添加窗口 最大化 最小化 还原 关闭
  2. 转载 excel生成数据地图
  3. datadashboard下载_Data Dashboard for LabVIEW app下载
  4. MAC电脑无法登录 H3C inode 的解决办法
  5. 云栖大会首设“科技脱贫”专场 ,20张会场门票等你来拿!
  6. python腐蚀膨胀代码_Python图像处理--膨胀与腐蚀
  7. 超融合架构提升单台服务器性能,浅谈超融合架构
  8. Android实现异步从网络加载图片列表
  9. linux添加虚拟内存
  10. 视频转gif(二):后端,云函数nodejs实现多图转gif