定义:
由一个工厂对象决定创建出哪一种产品类的实例
类型:属于创建型,但不属于GOF23中设计模式

工厂模式分为三种:
1、简单工厂模式(静态工厂方法模式)
2、工厂方法模式(多态性工厂模式)
3、抽象工厂模式(工具箱模式)

适用场景:
工厂类负责创建的对象比较少。
客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心。

优点:
只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道其创建细节。

缺点:
工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背开闭原则。

Coding:
场景:例如课程网上有java的视频,有Python的视频,前端的视频
首先创建一个video视频抽象类

创建java的视频实现类JavaVideo类:

创建Python的视频实现类PythonVideo类:

创建一个Test测试类(应用层也就是客户端):

创建工厂类VideoFactory

修改Test类中如下

类图如下:

Test只依赖VideoFactory这个类,具体的生产过程都在VideoFactory这个类中,Test只管使用。
这就是简单工厂
接下来看一看简单工厂有什么缺点,比如我们现在要加一个算法的课程,那我们就需要修改VideoFactory这个类,随着课程不断的增加我们就需要不断地去修改工厂类,修改就会带来风险,所以简单工厂并不符合开闭原则,不易扩展。
我们可以通过反射来弥补简单工厂的不易扩展性。
首先修改VideoFactory类

修改Test类如下

这就解决了简单工厂的不易扩展性,即使有新的课程,只需要创建新的课程类就可以。

java设计模式之简单工厂模式相关推荐

  1. Java设计模式之简单工厂模式实验(软件工程综合实践课程第二周)

    实验目的 1 .理解软件设计的相关理论 : 2 .理解面向对象设计原则: 实验内容 1 .简单工厂模式实验: (1) 参考讲义上的代码,利用简单工厂模式完成计算器应用程序: (2) 画出计算器程序简单 ...

  2. Java设计模式之 简单工厂模式和工厂方法实验报告书

    目录 Java设计模式之 1 简单工厂模式和工厂方法实验报告书 1 实验四:简单工厂模式和工厂方法 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1简单工厂模式:女娲 2 3.2简单工 ...

  3. Java设计模式之简单工厂模式(Simple Factory)

    [Java与模式]简单工厂模式(Simple Factory---吴义) 首先说明,Java与模式一系列的文章均是参考阎宏博士的<Java与模式>一书,加上自身的一些体会的探索,产生如下文 ...

  4. java设计模式:简单工厂模式

    一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.简单工厂模式的角色和职责 1.工厂(C ...

  5. JAVA设计模式笔记(简单工厂模式)

    有一个水果加工工厂,我们的需求是实现加工水果的功能.常见的做法是创建一个水果抽象类,写一个抽象的加工方法,然后创建具体的水果类去继承抽象类,再去实现抽象方法,最后客户端再去新建对象实例. public ...

  6. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  7. 设计模式之简单工厂模式(Java 实现)

    设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...

  8. .NET设计模式(1): 简单工厂模式

    .NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...

  9. 大牧絮叨设计模式:简单工厂模式

    文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...

最新文章

  1. 网络设置巨形帧_Trunk的概念与设置
  2. WebAssembly基础
  3. Axure RP使用攻略--入门级(七)之axure元件使用思路的补充
  4. (仿头条App项目)9.视频列表页面实现
  5. 电压放大倍数公式运放_运放电路:同相放大还是反相放大?
  6. 如何在liferay ,struts2中跳转页面
  7. 2021年宣城市高考成绩查询,宣城高考成绩查询入口
  8. 2009年11月14日上海讲座-Linux触摸屏驱动PPT
  9. 软件测试正交表用在哪里,使用正交试验法设计测试用例中的一些常用的正交表...
  10. win98万能显卡驱动_win98万能显卡驱动-万能显卡驱动精灵
  11. Linux的LCD驱动
  12. CNC大多数都是用什么软件编程的?这三款软件最实用!
  13. 免费在线的数据库建模工具,云版PownerDesigner
  14. 微信小程序云开发之简单两步实现集成赞赏加群弹窗功能
  15. Spring Cloud之openfeign 处理服务平滑上下线
  16. lzw编码c语言,LZW字典压缩算法的实现
  17. bp 神经网络 优点 不足_【学术论文】基于灰度共生矩阵和BP神经网络的乳腺肿瘤识别...
  18. 浙江移动智能语音服务器,电视还能这样玩?中国移动智能语音遥控器,让电视机听你的...
  19. unity3d Daikon GUI 图片查看器 Demo 说明
  20. Storm学习(一) Storm介绍

热门文章

  1. leetcode-python-优先级队列与时间复杂度
  2. [UOJ62]怎样跑得更快
  3. buf.readInt32LE函数详解
  4. linux中的压缩命令详细解析(一)
  5. 数据库基本知识篇二:关系数据库那些事儿
  6. python核心编程6-14习题的解题思路
  7. nfs文件服务器以及客户端基本配置
  8. 【.Net Micro Framework PortingKit – 12】SysTick驱动开发
  9. 基于语言文件的asp.net全球化解决方案
  10. c++设计模式:单例模式