1 什么是工厂模式

一说到工厂你有可能会想到 食品加工厂,汽车工厂,钢厂等。 这些工厂能帮我们干什么呢? 比如:食品加工厂帮我们生产 面包 饼干,汽车工厂帮我们生产汽车 。钢厂能帮我们生产钢。诸如这些生产模式都可以理解成工厂模式。

2 工厂模式的特点

说完了什么是工厂模式,我们这说一下工厂模式的特点。也就是满足什么条件就是工厂模式。

  1. 需要有资源 和生产资源的实体两个对象。
  2. 获取资源要通过 生产资源的实体。
    这里的资源我们就可以理解成 面包 汽车。 生产资源的实体就是 食品加工厂 和生产汽车工厂。

3 工厂模式之简单工厂代码实现

我国是产钢大国 下面我就是钢厂 生产钢来举例。我特意百度一下钢的种类,按成形方法钢分为:(1) 锻钢;(2) 铸钢;(3) 热轧钢;(4) 冷拉钢 4种,

3.1 通过代码模拟钢种类实体

钢实体类接口
该接口中有一个获取钢种类名称的方法。

package cn.zhuoqianmingyue.examples.factorypattern.simple;public interface Steel {public String getName();
}

铸钢实体类

package cn.zhuoqianmingyue.examples.factorypattern.simple;public class CastSteel implements Steel{private final String name = "铸钢";public String getName() {return name;}
}

冷拉钢实体类

package cn.zhuoqianmingyue.examples.factorypattern.simple;public class ColdDrawnSteel implements Steel{private final String name = "冷拉钢";public String getName() {return name;}
}

锻钢实体类

package cn.zhuoqianmingyue.examples.factorypattern.simple;public class ForgedSteel implements Steel{private final String name = "锻钢";public String getName() {return name;}
}

热轧钢实体类

package cn.zhuoqianmingyue.examples.factorypattern.simple;public class HotRolledSteel implements Steel{private final String name = "热轧钢";public String getName() {return name;}
}

3.2 通过代码模拟钢厂类实体

这里我们通过定义 SteelFactory 中的getSteel方法来获取具体类型的钢,该方法可以通过钢种类名称来获取钢种类对象。
钢厂实体类

package cn.zhuoqianmingyue.examples.factorypattern.simple;public class SteelFactory {public static Steel getSteel(String name) {if("castSteel".equals(name)) {return new CastSteel();}if("coldDrawnSteel".equals(name)) {return new ColdDrawnSteel();}if("forgedSteel".equals(name)) {return new ForgedSteel();}if("hotRolledSteel".equals(name)) {return new HotRolledSteel();}return null;}
}

模拟钢厂生产钢的过程测试类

package cn.zhuoqianmingyue.examples.factorypattern.simple;public class ApplicationTest {public static void main(String[] args) {//生产铸钢Steel castSteel = SteelFactory.getSteel("castSteel");log(castSteel.getName());//生产冷拉钢Steel coldDrawnSteel = SteelFactory.getSteel("coldDrawnSteel");log(coldDrawnSteel.getName());//生产锻钢Steel forgedSteel = SteelFactory.getSteel("forgedSteel");log(forgedSteel.getName());//生产热轧钢Steel hotRolledSteel = SteelFactory.getSteel("hotRolledSteel");log(hotRolledSteel.getName());}private static void log(String name) {System.out.println("生产"+name+"成功!");}
}

测试结果如下。

1小时搞懂设计模式之工厂模式(简单工厂)相关推荐

  1. 1小时搞懂设计模式之策略模式

    1 什么是策略模式 简单一句话理解就是通过不同的方式来完成一件事.我们拿生活举例:年终将至又到了涨工资的时候了,领导会根据你今年工作表现来将员工分为三种: 工作不积极的坏员工 对于坏员工执行不涨薪策略 ...

  2. 1小时搞懂设计模式之原型模式

    1 什么是原型模式 原型模式根据一个对象在重新创建一个对象 并保证这2个对象内容是一致的.java中的克隆技术就是原型模式的实现. 2 原型模式的特点 有一个可以被拷贝的原型对象 保证被拷贝的对象和原 ...

  3. 1小时搞懂设计模式之委派模式

    1 什么是委派模式 委派模式 我们可以理解成上级分配任务到具体的员工,比如说您是一个大老板 手下有上千个员工,平常端茶递水的活肯定不是自己干.一般口渴了 就会跟下面经理说:小张啊 我口渴了给我倒点茶! ...

  4. 1小时搞懂设计模式之代理模式(静态代理)

    1 什么是代理模式 这个问题让我们用生活的例子来进行解释,在我们买火车票的时候可以通过黄牛帮我们买票 ,或者 我们通过媒婆介绍对象找到我们生活中的另一伴.在或者每个明星需要经纪人帮忙打理他的通告.这些 ...

  5. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂——区分“变与不变”

    JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂--区分"变与不变" 先来说说构造器 在介绍工厂模式之前,为了辅助大家的理解,我想先在这儿给大家介绍 ...

  6. 设计模式-创建型模式-简单工厂模式

    工程地址:设计模式-简单工厂源码-C++文档类资源-CSDN下载C++设计模式-创建型模式-简单工厂模式源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn.n ...

  7. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

    园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博 ...

  8. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录

    1楼留头头大神:http://www.cnblogs.com/toutou/p/4899388.html v阅读目录 v写在前面 v简单工厂模式 v工厂方法模式 v抽象工厂模式 v博客总结 v博客前言 ...

  9. JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  10. 工厂模式 java_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

最新文章

  1. 售价1万7的华为Mate X很贵吗?
  2. Rust程序员一觉醒来都懵了:审核团队集体辞职,发生甚么事了?
  3. 数据分析之Pandas(一)
  4. Newton-Raphson method
  5. CSS的overflow:规定当内容溢出元素框时发生的事情
  6. csv->Flink SQL->Clickhouse(纯DDL形式)
  7. 基于matlab实现的人脸检测
  8. 自动跟随机器人:一种简易的自动跟随方案,自动跟随小车、自动跟随平衡小车、STM32、基于超声波的自动跟随小车
  9. linux 安装mysql 8.0_Linux安装mysql 8.0的详细方法介绍(代码示例)
  10. 本周任务asp.net 1.1老系统移植升级到asp.net 2.0,又是一个浩大的工程啊?
  11. 知识+AI融合创新探索,华为云论文被AI顶级学术期刊IEEE TPAMI接受
  12. Linux彻底删除mysql
  13. 英伟达数据中心业务营收不断创下新高,已连续9个财季保持增长
  14. python的django介绍_django Django简介 - 刘江的django教程
  15. 干货 | 彻底理解ANDROID BINDER通信架构(下)
  16. android沉浸式状态栏封装—教你玩出新花样
  17. 2022-2028全球浴室地漏行业调研及趋势分析报告
  18. Django book 2.0
  19. python构建配对t检验(Paired Student’s t-test)
  20. Set_output_delay怎么使用?

热门文章

  1. python连接hive_python连接hive
  2. java final 变量 好处_深入理解Java中的final关键字
  3. 【Unity新闻】如何使用Unity进行机器人模拟? | AR/VR全球需求率激增1400%
  4. centos重启mysql_CentOS 7下启动、关闭、重启、查看MySQL服务
  5. OpenShift 4之设置用户/组对项目的访问权限
  6. .NET配置文件在写入时损坏
  7. 使用解码逻辑创建YOLO Core ML对象检测器(四)
  8. 使用实体框架核心创建简单的审计跟踪
  9. C#中适当的列表支持
  10. 相比 Windows 为什么越来越多人选择Linux?