超级简单理解工厂模式
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();}
}
总结 :工厂方法模式能够在增加新的汽车的时候不去改变核心的代码,只需添加对应的汽车的工厂。虽然这样满足了开闭原则,但是这让代码量大大增加,维护成本变高,在日常开发中,简单工厂模式仍然是用的比较多。
超级简单理解工厂模式相关推荐
- 工厂模式及简单的工厂模式详解
工厂模式 实现了创造者和调用者的分离 核心本质 实例化对象用工厂方法代替new操作 将选择实现类.创建对象统一管理和控制,从而将调用者跟我们的实现类解耦 详细分类 ① 简单工厂模式 用来生产同一等级结 ...
- 大话设计模式之简单的工厂模式
第一章:代码无错就是优-简单的工厂模式 先建立一个计算类Operation Operation.h文件 @interface Operation : NSObject@property(nonatom ...
- 用PHP代码实现简单的工厂模式,用PHP代码实现简单的工厂模式
PHP代码实现简单的工厂模式方法 1.定义抽象基类 //家禽类 abstract class Fowl { abstract public function eat();//吃方法 } 2.定义子类 ...
- 面试积累(简单的工厂模式)
工厂模式我们常见的设计模式之一,看看下面的demo就知道一二了. 比如说"玩手机"这是一个抽象的事件,其中的手机和玩都是抽象的: public abstract class Pho ...
- 【设计模式自习室】理解工厂模式的三种形式
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 深入理解工厂模式——由对象工厂生成对象
目录: 一 工厂模式介绍 1.1 工厂模式的定义 1.2 工厂模式的分类: 1.3 在开源框架中的使用 1.4 为什么要用工厂模式 二 简单工厂模式 2.1 介绍 2.2 适用场景 2.3 简单工厂模 ...
- Java的设计模式 之 简单的工厂模式(一)
工厂模式使用到java的多态,接口知识点 本文仅仅帮助自己记住知识点. //使用的接口类interface Moveable{public void run();}//实现Moveable接口的类cl ...
- 简单介绍工厂模式和单例模式
工厂模式: 介绍: 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程(new 关键字和具体的构造器)隐藏起来.用一个工厂方法来替代,对外提供的只是一个工厂方法,达到提高灵活性的目的. ...
- 简单理解MVC模式和三层构架
引述 使用开发工具写JavaWeb项目时会发现 一个中型或者大型项目 随着代码的增加增多 会发现 代码既可以写在src目录下 src下可以创建很多包 所以问题来了 一个新的类到底该往那个目录下面写呢 ...
- 工厂模式理解了没有?
2019独角兽企业重金招聘Python工程师标准>>> 前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 昨天写了单例模 ...
最新文章
- 新书推荐 |《PostgreSQL实战》出版
- 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3
- 成功解决ImportError: cannot import name ‘joblib‘
- Mozilla网站安全分析工具Observatory已发布
- 基于可靠消息方案的分布式事务:Lottor介绍
- SQLite | Where 子句
- 断开所有sql用户连接(转)
- centOs环境初始化运行nginx+redis+zookeeper+dubbo_admin
- ai一个线段多个箭头_「平面设计」Illustrator(AI)基础教学-第2章 绘制简单的图形...
- csv文件导入后台乱码_win7系统下excel打开csv文件出现乱码怎么修复
- Tuxera NTFS2023Mac读写ntfs磁盘工具
- dalong(大龙燚火锅)
- mysql8+maven+mybatis
- git推送拉取需要验证信息
- 学校心理管理/预测系统
- SI522A/SI523带低功耗自动寻卡功能的13.56MHz非接触式读写器芯片
- lol s7 linux,LOLs7 赛季季末冲刺挑战赛参加地址介绍
- 【前端春招】前端春招实习+秋招心路历程
- 为何一些人认为从事 IT 行业的人是屌丝男?
- 读书笔记-人际关系与权力相互作用
热门文章
- 【Python游戏】Python各大游戏合集(5):塔防游戏、飞机大战、连连看、打地鼠、记忆翻牌 | 附带源码
- 原生JS实现记忆翻牌小游戏
- yuyu终于考完了!我提前过生日了!(两者好像没有关联嘛^_^)
- python调整dicom窗宽窗位_【基础篇】kaggle || RSNA脑溢血金牌案例技术分享!如何使用dicom格式的数据的?...
- EfficientDet实验笔记
- MvcPager分页控件
- Redis 运维实战 第07期:Hotkey
- package.json scripts 脚本使用指南
- 大数据基础概念(三)
- lisp实心圆点怎么画_cad中怎么样画实心圆点