UML---工厂模式
简单工厂、工厂方法、抽象工厂三种模式总是不能正确区分,以下是自己浅薄的理解。并附上一个还不错的详解博客
简单工厂:一个工厂一条产品线生产所有产品,如果想要新的产品,则要修改产品线。
工厂方法:一个工厂,多条产品线。如果想要新产品,则增加产品线
抽象工厂:一个工厂,多条产品线,每条产品线可以生成多个不同种类的产品
.
简单工厂模式:
看一个披萨的项目:要便于披萨种类的扩展,要便于维护
1)披萨的种类很多(比如 GreekPizz、 Cheese pizz等)
2)披萨的制作有 prepare,bake, cut, box
3)完成披萨店订购功能。
增加一个PepperPizza时,所有的店面进行的OrderPizza操作都要进行修改,这是不理想的情况。
优缺点分析 :
1、优点:比较好理解,简单易操作
2、缺点:违反了设计模式的 ocp原则(对扩展开放,对修改关闭)。即:当我们给类增加新功能的时候,尽量不修改代码,或者少修改代码。
3、如果新增一个 Pizza 种类,则订购 Pizza 的代码都要修改。(下面的代码是传统方法)
4、改进的思路分析:
分析:如果在多处 都有创建 Pizza 实例的代码,要修改多处。
思路:如果把创建 Pizza 对象 封装到一个 类种,这样的话,增加新的 Pizza 种类时,只需要修改该类 即可。其它有创建 Pizza 对象的代码 就不需要修改了。------》简单工厂模式
orderPizza会传入一个SimpleFactory类型的对象,
该简单工厂对象会根据用户输入的披萨种类调用creatpizza方法,生产一个“某种种类”的pizza饼,返回给orderpizza
orderpizza会将pizza饼进行prepare、bake、cut、box操作。
如果新加入一种种类的Pizza、一个新的店面,只需要修改SimpleFactory中的代码即可:
在上述代码的结尾加上“ChinaPizza”即可。
工厂方法模式
新需求:客户在点 披萨时,点不同口味的 Pizza ,比如 北京的奶酪披萨、北京的芝士披萨、洛杉矶的胡椒披萨
思路1:使用 简单工厂模式,创建不同的简单工厂类,比如 BJPizzaSimpleFactory 、LSJPizzaSimpleFactory 等等。这种方法满足了当前的需求,但考虑到项目的规模,软件的可维护性、可扩展性 并不好。
思路2:工厂方法模式
工厂方法模式介绍
1、工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点
餐子类中具体实现。
2、工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方
法模式将对象的实例化推迟到子类。
应用案例
1、披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨,比如 北京的奶酪
pizza、北京的胡椒pizza 或者是伦敦的奶酪pizza、伦敦的胡椒pizza
2、思路分析图解
抽象工厂模式
基本介绍
1)抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类
2)抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合
3)从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象
4)将工厂抽象成两层: AbsFactory(抽象工厂)和具体实现的工厂子类。
程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇更利于代码的维护和扩展。
5)类图
UML---工厂模式相关推荐
- 工厂模式 android,当Android遇见工厂模式
设计模式.png 我们先看一下一个Android系统应用中的工厂模式列子,再讲解工厂模式. package com.android.mms.ui; import android.content.Con ...
- java工厂模式 uml_简单工厂模式的UML类图与源码实现(转) | 学步园
简单工厂模式的UML图 源码:Operation类 Java代码 packageOperation; publicabstractclassOperation { doublenumberA=0; d ...
- java设计模式之工厂模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- UML图解简单工厂模式工厂方法模式抽象工厂模式区别
简述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一: 工厂模式包含 简单工厂模式& 工厂方法模式& 抽象工厂模式这三种: 这三者主要区别在于工厂实现的 ...
- 简单工厂模式(附带UML图解和代码实现)
一.定义 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类. 二.UML结构图 三.简单工厂模式实现 抽象产品: 将要批量生产的对象实体进行一个抽象提取,便于扩展 ...
- 策略与简单工厂模式结合的实现--收银软件的代码及UML图
策略模式和简单工厂模式的结合:把分支判断放到环境角色中. 解决简单工厂模式中提到的问题: ●关键:分支的switch依然去不掉 ●解决方法:依赖注入.反射.XML 简单工厂模式 策略模式 收银软件的策 ...
- 工厂模式UML关系图
工厂模式学习总结: 工厂模式主要有3类 一.简单工厂 二.工厂方法 三.抽象工厂 具体UML 如下图示
- 23种设计模式C++源码与UML实现--工厂模式
工厂模式 工厂方法模式同样属于类的创建型模式,又被称为多态工厂模式.工厂方法的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不在负责产品的创建,这样核心类成为一个抽象 ...
- 23种设计模式C++源码与UML实现--简单工厂模式
简单工程模式 简单工厂模式,属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 模式中包含的角色及其职责 工厂角色 简单工厂模式的 ...
- ASP.net 中的页面继承实现和通用页面的工厂模式的实现
最近用.Net做web项目的时候遇到了一些问题,就是很多的页面的处理一样的,不一样的就是我们写的存储过程不同,为了考虑代码的重复利用和可维护性和可 扩展性,于是写了一个对于单据页面的工厂模式,采用界面 ...
最新文章
- Go 分布式学习利器(9)-- Go语言 结构体的行为定义和实现
- Xcode调用栈时小图标代表什么意思
- 如何使用阿里云主机搭建lordofpomelo
- 用VisualVM分析MyEclipse
- Android Studio 设置编辑器背景颜色
- oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...
- gitlab+jenkins=自动化构建
- Android的activity的title设定内容
- loadrunner- winsock 函数 一览表
- 导弹拦截(NOIP2010 普及组第三题)
- win10计算机停止工作,Win10系统总提示Rundll32已停止工作的解决方法
- 三角函数的正交性及其公式推导
- qq三国华容道算法(拼图问题,8数码问题?)
- iOS APP上线App Store流程(包括.p12导出)
- 物联网 USN架构 和 M2M架构
- JavaScript学习笔记(6)变量
- 华为Atlas200DK的环境部署与运行demo(人脸识别)
- linux运维自动化脚本,linux运维自动化shell脚本小工具
- python设置子图的坐标_python如何调整子图的大小?
- 第一个divcss属性失效_复合材料失效理论知多少(三):一战封神Pinho理论
热门文章
- 运行无法打开计算机策略,“组策略不能打开”的解决方案
- 对坐标的曲线积分求做功_曲线积分与曲面积分(前篇 曲线积分-坐标曲线积分-格林公式)...
- libreCAD源码阅读笔记3
- 提高期英语学习——第二次罗塞塔
- C语言strcpy()函数,字符数组复制
- 父类引用指向子类对象,为什么会调用的是子类中重新的方法
- QList(增删改查)示例
- html根据PC手机设置不同背景图,Html-根据不同的分辨率设置不同的背景图片
- 虚拟机打不开是黑屏状态
- 改变el-input框的样式(去掉边框),及scoped实现原理