java设计模式之简单工厂模式
定义:
由一个工厂对象决定创建出哪一种产品类的实例
类型:属于创建型,但不属于GOF23中设计模式
工厂模式分为三种:
1、简单工厂模式(静态工厂方法模式)
2、工厂方法模式(多态性工厂模式)
3、抽象工厂模式(工具箱模式)
适用场景:
工厂类负责创建的对象比较少。
客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心。
优点:
只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道其创建细节。
缺点:
工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背开闭原则。
Coding:
场景:例如课程网上有java的视频,有Python的视频,前端的视频
首先创建一个video视频抽象类
创建java的视频实现类JavaVideo类:
创建Python的视频实现类PythonVideo类:
创建一个Test测试类(应用层也就是客户端):
创建工厂类VideoFactory
修改Test类中如下
类图如下:
Test只依赖VideoFactory这个类,具体的生产过程都在VideoFactory这个类中,Test只管使用。
这就是简单工厂
接下来看一看简单工厂有什么缺点,比如我们现在要加一个算法的课程,那我们就需要修改VideoFactory这个类,随着课程不断的增加我们就需要不断地去修改工厂类,修改就会带来风险,所以简单工厂并不符合开闭原则,不易扩展。
我们可以通过反射来弥补简单工厂的不易扩展性。
首先修改VideoFactory类
修改Test类如下
这就解决了简单工厂的不易扩展性,即使有新的课程,只需要创建新的课程类就可以。
java设计模式之简单工厂模式相关推荐
- Java设计模式之简单工厂模式实验(软件工程综合实践课程第二周)
实验目的 1 .理解软件设计的相关理论 : 2 .理解面向对象设计原则: 实验内容 1 .简单工厂模式实验: (1) 参考讲义上的代码,利用简单工厂模式完成计算器应用程序: (2) 画出计算器程序简单 ...
- Java设计模式之 简单工厂模式和工厂方法实验报告书
目录 Java设计模式之 1 简单工厂模式和工厂方法实验报告书 1 实验四:简单工厂模式和工厂方法 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1简单工厂模式:女娲 2 3.2简单工 ...
- Java设计模式之简单工厂模式(Simple Factory)
[Java与模式]简单工厂模式(Simple Factory---吴义) 首先说明,Java与模式一系列的文章均是参考阎宏博士的<Java与模式>一书,加上自身的一些体会的探索,产生如下文 ...
- java设计模式:简单工厂模式
一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.简单工厂模式的角色和职责 1.工厂(C ...
- JAVA设计模式笔记(简单工厂模式)
有一个水果加工工厂,我们的需求是实现加工水果的功能.常见的做法是创建一个水果抽象类,写一个抽象的加工方法,然后创建具体的水果类去继承抽象类,再去实现抽象方法,最后客户端再去新建对象实例. public ...
- 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)
简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1 场景问题 ...
- 设计模式之简单工厂模式(Java 实现)
设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...
- .NET设计模式(1): 简单工厂模式
.NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...
- 大牧絮叨设计模式:简单工厂模式
文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...
最新文章
- 网络设置巨形帧_Trunk的概念与设置
- WebAssembly基础
- Axure RP使用攻略--入门级(七)之axure元件使用思路的补充
- (仿头条App项目)9.视频列表页面实现
- 电压放大倍数公式运放_运放电路:同相放大还是反相放大?
- 如何在liferay ,struts2中跳转页面
- 2021年宣城市高考成绩查询,宣城高考成绩查询入口
- 2009年11月14日上海讲座-Linux触摸屏驱动PPT
- 软件测试正交表用在哪里,使用正交试验法设计测试用例中的一些常用的正交表...
- win98万能显卡驱动_win98万能显卡驱动-万能显卡驱动精灵
- Linux的LCD驱动
- CNC大多数都是用什么软件编程的?这三款软件最实用!
- 免费在线的数据库建模工具,云版PownerDesigner
- 微信小程序云开发之简单两步实现集成赞赏加群弹窗功能
- Spring Cloud之openfeign 处理服务平滑上下线
- lzw编码c语言,LZW字典压缩算法的实现
- bp 神经网络 优点 不足_【学术论文】基于灰度共生矩阵和BP神经网络的乳腺肿瘤识别...
- 浙江移动智能语音服务器,电视还能这样玩?中国移动智能语音遥控器,让电视机听你的...
- unity3d Daikon GUI 图片查看器 Demo 说明
- Storm学习(一) Storm介绍