GOF23-工厂模式
1.什么是工厂模式
就是实现创建者与调用者分离,工厂模式的核心(灵魂)其实就是:分工。
2.工厂模式有哪些
- 简单工场模式(静态工厂)
简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法,通过接受的参数的不同来创建不同的对象并返回。其缺点是对新增的业务类无能为力,必须要修改代码来完成扩展(不满足OCP原则)。
我们先来看下没有工程类的情况
测试类Main方法及测试结果:
我们可以看出创建对象要直接与Audi、BMW类直接打打交道。
我们再来看使用简单工厂类
可以看出,测试类并没有直接跟Audi、BMW类“直接打交道”,而是通过CarFactory来达到目的,可以理解创建对象的活已经交给CarFactory来做,不再由测试类直接创建(这也就是所谓的控制反转)。
- 工厂方法模式
创建工厂类接口,通过新增业务类,来满足新功能(满足OCP原则),缺点:结构变得更加复杂,代码更加复杂,理论上工厂方法更优,但实际我们常用简单工厂模式。
我们需要创建一个工厂接口,及对应工厂实现类。
测试类及结果
可以看出,我们是通过新增产品工厂类来实现产品对象的创建,试下如果要新增一个保时捷对象,我们此时需要怎么做?其实我们只需要新增一个保时捷的工厂类(实现CarFactory)即可。与简单工厂模式相比较:工厂方法模式结构更复杂(需要多个产品类),代码上也相对复杂,管理难度大(维护起来麻烦)。
- 抽象工厂模式
适用于生成不同产品族的全部产品,对于新产品无能为力,而是适用于产品族。比其上面两种工厂模式更复杂。
假设我们现在要创建多个接口产品,上面两种工厂模式就无能为力了。
我们目前仅创建了一个Engine接口,分别创建了超级引擎类,中端引擎类,低端引擎类。其余接口由于篇幅关系就不一一截图了,道理类似。比如:我们再增加一个座椅接口,再分别创建超级座椅,中端座椅,低端座椅。
超级引擎+超级座椅+超级轮胎=超级汽车
中端引擎+超级座椅+超级轮胎=中级汽车
……..
这就形成了不同产品族。
测试类及结果
超级汽车工厂创造出汽车引擎是超级引擎。
3.总结
- 简单工厂
即使在某种程度上不满足OCP设计原则,但是实际项目中用的最多。
- 工厂方法
在不修改已存在类的前提下,通过增加新的工厂类来达到实现扩展的目的。
- 抽象工厂
不能单独增加某个产品,可以增加产品族。
GOF23-工厂模式的更多相关文章
- GoF23:工厂模式(Factory)
目录 GoF23:工厂模式(Factory) 工厂模式三种模式 简单工厂模式(静态工厂模式) 工厂方法模式 抽象工厂模式 举例说明 代码实现 GoF23:工厂模式(Factory) 核心本质: 实例化 ...
- 设计模式之GOF23工厂模式02
抽象工厂模式 不能添加单个产品,产品族 public interface Seat { void anmo();}class GoodSeat implements Seat { @Override ...
- 【GOF23设计模式】工厂模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_简单工厂模式详解.面向对象设计原则.开闭原则.依赖反转原则.迪米特法则 没有工厂模式的情况 package com.te ...
- Java中的GOF23(23中设计模式)--------- 工厂模式(Factory)
Java中的GOF23(23中设计模式)--------- 工厂模式(Factory) 在给大家介绍工厂模式之前,我想和大家聊聊面向对象的那点事,在这里,引入三个概念. 开闭原则(Open Close ...
- GOF23设计模式之工厂模式
-实现了创建者和调用者的分离 -面向对象设计的基本原则: ·OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭 ·DIP(依赖倒转原则,Depen ...
- 【GOF23设计模式】--工厂模式
工厂模式: 实现了创建者调用者的分离 详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当 ...
- 工厂模式的认识(GOF23)
---恢复内容开始--- 对于所有的设计模式来说,其本质是哪里变化封装哪里.寻找变化点,没有万能的模式,只有适合情况的应用 工厂模式从简单工厂开始演化 1.简单工厂的主要作用在于从源头开始封装实例化, ...
- GOF23设计模式之工厂模式(factory)
一.工厂模式概述 实现了创建者和调用者的分离 (1)分类 ①简单工厂模式 虽然某种程度不符合设计原则,但实际使用最多. ②工厂方法模式 不修改已有类的前提下,通过增加新的工厂类实现扩展. ③抽象工厂模 ...
- GOF23种设计模式-工厂模式
• 工厂模式: – 实现了创建者和调用者的分离. – 详细分类: • 简单工厂模式 • 工厂方法模式 • 抽象工厂模式 • 面向对象设计的基本原则: – OCP(开闭原则,Open-Closed Pr ...
- 设计模式GOF23之工厂模式01
简单工厂模式和工厂方法模式 工厂模式核心:分工 简单工厂模式不符合OCP(Open-Closed Princinple)原则,扩展时需要更改原代码 工厂方法模式增加了类复杂度代码复杂度等,所以一般使用 ...
随机推荐
- Bzoj: 2073 [POI2004]PRZ 题解
2073: [POI2004]PRZ Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 401 Solved: 296[Submit][Status][D ...
- Java编程思想:XML
/* 本次实验需要在www.xom.nu上下载XOM类库 */ import nu.xom.*; import java.io.BufferedOutputStream; import java.io ...
- 网络编程模型及TCP、UDP编程设计
1.Linux网络模型 Linux网络编程--->>>socket套接字的编程 2.TCP网络模型 ...
- 抓包自定义过滤器需加%XXXX%,如%third_play%
抓包自定义过滤器需加%XXXX%,如%third_play%
- .NET Core 3.0之深入源码理解HttpClientFactory(一)
写在前面 创建HttpClient实例的时候,在内部会创建HttpMessageHandler链,我们知道HttpMessageHandler是负责建立连接的抽象处理程序,所以HttpClient的维 ...
- Error:Failed to resolve: com.android.support:support-annotations:26.0.2
异常信息记录: Error:Failed to resolve: com.android.support:support-annotations:26.0.2 <a href="ins ...
- ASP.NET登录验证码解决方案
目录 #验证码效果图 #代码 0.html代码 1.Handler中调用验证码生成类 2.验证码图片绘制生成类 3.高斯模糊算法类 #注意 #参考 在web项目中,为了防止登录被暴力破解,需要在登录的 ...
- python包-logging-hashlib-openpyxl模块-深浅拷贝-04
包 包: # 包是一系列模块文件的结合体,表现形式是文件夹,该文件夹内部通常会包含一个__init__.py文件,本质上还是一个模块 包呢,就是前两篇博客中提到的,模块的四种表现形式中的第三种 # 把 ...
- configASSERT( uxCriticalNesting == ~0UL );问题
今天在单步调试FreeRTOS时,一直进入port.c 中的configASSERT( uxCriticalNesting == ~0UL ):函数.照片如下 上网一查,并且结合这个英文注释,才发现, ...
- JSP一二章笔试题
一. 什么是B/S架构,什么是C/S架构B/S(Browser/Server) 浏览器/服务器 C/S(Client/Server) 客户端/服务器 二. B/S架构的工作原理 浏览器请求服务器 通过 ...