1. 简单工厂模式(静态工厂)

1.1 原理简单解析

我们先看一下原理图,我们就已汽车的工厂为例子,看不懂没关系,我们结合代码来进行理解

1.2 代码实现

先定义一个简单的Car接口

public interface Car {//汽车品牌的方法void brand();
}

定义两个汽车实现类

public class DaZhong implements Car{@Overridepublic void brand() {System.out.println("大众汽车");}
}
public class WuLing implements Car {@Overridepublic void brand() {System.out.println("五菱神车");}
}

让我们建造一个汽车工厂

public class CarFactory {public Car getCar(String brand){if("五菱神车".equals(brand)){return new WuLing();}if("大众汽车".equals(brand)){return new DaZhong();}elsereturn null;}
}

好了,代码准备都有了,我们进行原理解析吧~

public class Customer {public static void main(String[] args) {//不适用工厂方式的时候,我们这样直接new对象Car car = new DaZhong();Car car1 = new WuLing();car.brand();//结果打印 大众汽车car1.brand();//结果打印 五菱神车//我们借助简单工厂模式,那么便可以这样做Car car2 = CarFactory.getCar("大众汽车");Car car3 = CarFactory.getCar("五菱神车");//区别于new的方式,工厂帮我们解决了创建对象的问题//我们只需要传递参数,而不需要关注创建过程}
}

简单工厂模式局限 :假如我们增加一个新的车,那么必须对CarFactory的代码进行修改,不满足开闭原则,下面的工厂方法模式,将对这种不足进行解决。

2. 工厂方法模式

2.1 简单原理图

同样我们还是先将原理图放在这,结合代码理解原理

2.2 代码实现

我们需用需用1.2节中,Car接口,Wuling实现类和DaZhong实现类
我们需要新添加汽车工厂接口,DaZhong和Wuling工厂的实现类

public interface CarFactory {Car getCar();
}
public class WuLingFactory implements CarFactory {@Overridepublic Car getCar() {return  new WuLing();}
}
public class DaZhongFactory implements CarFactory {@Overridepublic Car getCar() {return new DaZhong();}
}

下面我们进行解析

public class Customer {public static void main(String[] args) {//我们想要得到想要的车,我们就去找对应的汽车工厂实现类//而简单工厂模式,是去找统一的Factory去获得汽车//得到大众汽车Car car = new DaZhongFactory().getCar();//得到五菱神车Car car1 = new WuLingFactory().getCar();}
}

总结 :工厂方法模式能够在增加新的汽车的时候不去改变核心的代码,只需添加对应的汽车的工厂。虽然这样满足了开闭原则,但是这让代码量大大增加,维护成本变高,在日常开发中,简单工厂模式仍然是用的比较多。

超级简单理解工厂模式相关推荐

  1. 工厂模式及简单的工厂模式详解

    工厂模式 实现了创造者和调用者的分离 核心本质 实例化对象用工厂方法代替new操作 将选择实现类.创建对象统一管理和控制,从而将调用者跟我们的实现类解耦 详细分类 ① 简单工厂模式 用来生产同一等级结 ...

  2. 大话设计模式之简单的工厂模式

    第一章:代码无错就是优-简单的工厂模式 先建立一个计算类Operation Operation.h文件 @interface Operation : NSObject@property(nonatom ...

  3. 用PHP代码实现简单的工厂模式,用PHP代码实现简单的工厂模式

    PHP代码实现简单的工厂模式方法 1.定义抽象基类 //家禽类 abstract class Fowl { abstract public function eat();//吃方法 } 2.定义子类 ...

  4. 面试积累(简单的工厂模式)

    工厂模式我们常见的设计模式之一,看看下面的demo就知道一二了. 比如说"玩手机"这是一个抽象的事件,其中的手机和玩都是抽象的: public abstract class Pho ...

  5. 【设计模式自习室】理解工厂模式的三种形式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  6. 深入理解工厂模式——由对象工厂生成对象

    目录: 一 工厂模式介绍 1.1 工厂模式的定义 1.2 工厂模式的分类: 1.3 在开源框架中的使用 1.4 为什么要用工厂模式 二 简单工厂模式 2.1 介绍 2.2 适用场景 2.3 简单工厂模 ...

  7. Java的设计模式 之 简单的工厂模式(一)

    工厂模式使用到java的多态,接口知识点 本文仅仅帮助自己记住知识点. //使用的接口类interface Moveable{public void run();}//实现Moveable接口的类cl ...

  8. 简单介绍工厂模式和单例模式

    工厂模式: 介绍: 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程(new 关键字和具体的构造器)隐藏起来.用一个工厂方法来替代,对外提供的只是一个工厂方法,达到提高灵活性的目的.  ...

  9. 简单理解MVC模式和三层构架

    引述 使用开发工具写JavaWeb项目时会发现 一个中型或者大型项目 随着代码的增加增多 会发现 代码既可以写在src目录下 src下可以创建很多包 所以问题来了 一个新的类到底该往那个目录下面写呢 ...

  10. 工厂模式理解了没有?

    2019独角兽企业重金招聘Python工程师标准>>> 前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 昨天写了单例模 ...

最新文章

  1. 新书推荐 |《PostgreSQL实战》出版
  2. 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3
  3. 成功解决ImportError: cannot import name ‘joblib‘
  4. Mozilla网站安全分析工具Observatory已发布
  5. 基于可靠消息方案的分布式事务:Lottor介绍
  6. SQLite | Where 子句
  7. 断开所有sql用户连接(转)
  8. centOs环境初始化运行nginx+redis+zookeeper+dubbo_admin
  9. ai一个线段多个箭头_「平面设计」Illustrator(AI)基础教学-第2章 绘制简单的图形...
  10. csv文件导入后台乱码_win7系统下excel打开csv文件出现乱码怎么修复
  11. Tuxera NTFS2023Mac读写ntfs磁盘工具
  12. dalong(大龙燚火锅)
  13. mysql8+maven+mybatis
  14. git推送拉取需要验证信息
  15. 学校心理管理/预测系统
  16. SI522A/SI523带低功耗自动寻卡功能的13.56MHz非接触式读写器芯片
  17. lol s7 linux,LOLs7 赛季季末冲刺挑战赛参加地址介绍
  18. 【前端春招】前端春招实习+秋招心路历程
  19. 为何一些人认为从事 IT 行业的人是屌丝男?
  20. 读书笔记-人际关系与权力相互作用

热门文章

  1. 【Python游戏】Python各大游戏合集(5):塔防游戏、飞机大战、连连看、打地鼠、记忆翻牌 | 附带源码
  2. 原生JS实现记忆翻牌小游戏
  3. yuyu终于考完了!我提前过生日了!(两者好像没有关联嘛^_^)
  4. python调整dicom窗宽窗位_【基础篇】kaggle || RSNA脑溢血金牌案例技术分享!如何使用dicom格式的数据的?...
  5. EfficientDet实验笔记
  6. MvcPager分页控件
  7. Redis 运维实战 第07期:Hotkey
  8. package.json scripts 脚本使用指南
  9. 大数据基础概念(三)
  10. lisp实心圆点怎么画_cad中怎么样画实心圆点