工厂设计模式 - 详解
介绍
工厂模式是Java中最常用的设计模式之一,这种类型的设计模式数据创建型模式。
主要就是负责创建对象的,当我们使用new创建对象的时候会导致对该对象的耦合性很严重,当我们需要修改的时候需要对所有new的对象进行修改,违反了软件设计的开闭原则,当我们使用工厂来生产对象的时候,我们只需要和工厂打交道就可以了。
简单工厂模式
简单工厂都有哪几个角色:
- 抽象产品(Car)
- 具体产品(WuLingCar,DaZhongCar)
- 具体工厂(CarFactory )
- 产品使用者(SimplenessFactory )
使用时通过调用工厂的 getCar() 方法,传入指定参数返回对应对象
package factory;public class SimplenessFactory {public static void main(String[] args) {Car wuling = CarFactory.getCar("wuling");wuling.wheel();Car dazhong = CarFactory.getCar("dazhong");dazhong.wheel();}
}interface Car {void wheel();
}class WuLingCar implements Car {@Overridepublic void wheel() {System.out.println("五菱车装轮子");}
}class DaZhongCar implements Car {@Overridepublic void wheel() {System.out.println("大众车装轮子");}
}class CarFactory {public static Car getCar(String name) {if (name == null) {return null;}if (name.equals("dazhong")) {return new DaZhongCar();} else if (name.equals("wuling")) {return new WuLingCar();}return null;}
}
就这样一个简单工厂就创建好了,但是这种方式创建的工厂是违反了开闭原则的,试想当我们需要新增一种车型的时候,是不是需要修改之前的代码?是的!
工厂方法模式
工厂方法模式都有哪几个角色:
- 抽象产品(Car)
- 具体产品(WuLingCar,DaZhongCar)
- 抽象工厂(CarFactory )
- 具体工厂(WuLingFactory,DaZhongFactory)
- 产品使用者(SimplenessFactory )
将工厂进行一层抽象,具体生产什么产品由子类决定。
和上面例子差不多,只不过这一层多了一层对工厂的抽象。
package factory;public class SimplenessFactory {public static void main(String[] args) {Car wuling = new WuLingFactory().getCar();Car dazhong = new DaZhongFactory().getCar();wuling.wheel();dazhong.wheel();}
}interface Car {void wheel();
}class WuLingCar implements Car {@Overridepublic void wheel() {System.out.println("五菱车装轮子");}
}class DaZhongCar implements Car {@Overridepublic void wheel() {System.out.println("大众车装轮子");}
}interface CarFactory {Car getCar();
}class WuLingFactory implements CarFactory {@Overridepublic Car getCar() {return new WuLingCar();}
}class DaZhongFactory implements CarFactory {@Overridepublic Car getCar() {return new DaZhongCar();}
}
工厂方法模式无疑满足了开闭原则,当需要进行扩展的时候只需要继承实现抽象工厂类和抽象产品类,就可以进行使用了。
结论
无论是结构复杂度,代码复杂度,编程复杂度,管理复杂度,简单工厂无疑是优于工厂方法模式的。
虽然说我们根据设计原则我们应该选择工厂方法模式,但是实际业务中更多的时候使用的是简单工厂模式,因为工厂方法模式从各方面来讲复杂度要高于简单工厂模式。所以有时候并不非要满足所有原则,如果为了一个原则把一段程序设计的极其复杂,也是不好的。
工厂设计模式 - 详解相关推荐
- getinstance方法详解_二、设计模式总览及工厂模式详解
二.架构师内功心法之设计模式 2.架构师内功心法之设计模式 2.1.课程目标 1.通过对本章内容的学习,了解设计模式的由来. 2.介绍设计模式能帮我们解决哪些问题. 3.剖析工厂模式的历史由来及应用场 ...
- 23种设计模式之简单工厂模式,工厂方法模式,抽象工厂模式详解
工厂模式详解 1. 简单工厂模式 1.1 需求分析 1.2 使用传统方式实现 1.2.1 类图 1.2.2 代码实现 1.2.2.1 新建pizza抽象类 1.2.2.2 希腊披萨实现类 1.2.2. ...
- 《设计模式详解》创建型模式 - 工厂模式
<设计模式详解> 4.2 工厂模式 4.2.1 概述 4.2.2 简单工厂模式 4.2.2.1 结构 4.2.2.2 实现 4.2.2.3 优缺点 4.2.2.4 扩展 - 静态工厂 4. ...
- 设计模式详解(四)抽象工厂模式
文章目录 1. 简介 2. 代码实例 3. 抽象工厂的优缺点 1. 简介 定义:为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类 与工厂方法模式不同(工厂方法的升级,在工厂方法模式 ...
- 设计模式之工厂模式详解(附应用举例实现)
文章目录 1 工厂模式介绍 2 工厂模式详解 2.1 简单工厂模式 2.1.1 简单工厂模式结构 2.1.2 简单工厂模式实现 2.1.3 简单工厂模式应用举例 2.2 工厂方法模式 2.2.1 工厂 ...
- Javascript常用的设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- 《设计模式详解》笔记目录
<设计模式详解> 前言 后记 目录 设计模式概述.UML 软件设计原则 创建型模式 单例模式 工厂模式 原型模式 建造者模式 结构型模式 代理模式 适配器模式 装饰者模式 桥接模式 外观模 ...
- 《设计模式详解》手写简单的 Spring 框架
自定义 Spring 框架 自定义 Spring 框架 Spring 使用回顾 Spring 核心功能结构 bean 概述 Spring IOC 相关接口 BeanFactory 接口 BeanDef ...
- 《设计模式详解》结构型模式 - 代理模式
代理模式 5.1 代理模式 5.1.1 概述 5.1.2 结构 5.1.3 静态代理 5.1.4 动态代理 JDK 动态代理 JDK 动态代理分析 CGLIB 动态代理 5.1.5 三种代理的对比 5 ...
最新文章
- 【es6】es6学习笔记
- Linux数据文件自动迁移,linux下增加磁盘改变指定文件路径分区挂载点和迁移数据...
- 基础-栈队列简单测试
- java list 取几个字段组装成map_24道Java各类常见问题整理
- 寻路机器人单片机程序示例_C51独立按键的识别示例程序
- RocketMQ核心架构设计思想
- 前后端分离后的前端时代 1
- 《编程导论(Java)·9.3.1回调·3》回调的实现
- 卡巴斯基称新型黑客雇佣组织正在攻击欧洲律所
- 在Windows平台使用SSH连接Linux服务器
- 大数据时代的回收生意经(淼一专访)
- 【数学建模】基于matlab GUI干线交通控制方法【含Matlab源码 1259期】
- JAVA 生成API接口文档
- RTCM-SSR信息读取与解码
- PC微信小程序突然Charles抓不到包
- R 语言 iris 数据集的可视化
- latex数学公式转换器
- Flutter修改App名称(Android+IOS)
- git squash 和 git rebase
- 猫盘plus开启ssh登录