简单工厂、工厂方法、抽象工厂三种模式总是不能正确区分,以下是自己浅薄的理解。并附上一个还不错的详解博客

简单工厂:一个工厂一条产品线生产所有产品,如果想要新的产品,则要修改产品线。
工厂方法:一个工厂,多条产品线。如果想要新产品,则增加产品线
抽象工厂:一个工厂,多条产品线,每条产品线可以生成多个不同种类的产品

.

简单工厂模式:

看一个披萨的项目:要便于披萨种类的扩展,要便于维护
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---工厂模式相关推荐

  1. 工厂模式 android,当Android遇见工厂模式

    设计模式.png 我们先看一下一个Android系统应用中的工厂模式列子,再讲解工厂模式. package com.android.mms.ui; import android.content.Con ...

  2. java工厂模式 uml_简单工厂模式的UML类图与源码实现(转) | 学步园

    简单工厂模式的UML图 源码:Operation类 Java代码 packageOperation; publicabstractclassOperation { doublenumberA=0; d ...

  3. java设计模式之工厂模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  4. UML图解简单工厂模式工厂方法模式抽象工厂模式区别

    简述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一: 工厂模式包含 简单工厂模式& 工厂方法模式& 抽象工厂模式这三种: 这三者主要区别在于工厂实现的 ...

  5. 简单工厂模式(附带UML图解和代码实现)

    一.定义 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类. 二.UML结构图 三.简单工厂模式实现 抽象产品: 将要批量生产的对象实体进行一个抽象提取,便于扩展 ...

  6. 策略与简单工厂模式结合的实现--收银软件的代码及UML图

    策略模式和简单工厂模式的结合:把分支判断放到环境角色中. 解决简单工厂模式中提到的问题: ●关键:分支的switch依然去不掉 ●解决方法:依赖注入.反射.XML 简单工厂模式 策略模式 收银软件的策 ...

  7. 工厂模式UML关系图

    工厂模式学习总结: 工厂模式主要有3类 一.简单工厂 二.工厂方法 三.抽象工厂 具体UML 如下图示

  8. 23种设计模式C++源码与UML实现--工厂模式

    工厂模式 工厂方法模式同样属于类的创建型模式,又被称为多态工厂模式.工厂方法的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不在负责产品的创建,这样核心类成为一个抽象 ...

  9. 23种设计模式C++源码与UML实现--简单工厂模式

    简单工程模式 简单工厂模式,属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 模式中包含的角色及其职责 工厂角色 简单工厂模式的 ...

  10. ASP.net 中的页面继承实现和通用页面的工厂模式的实现

    最近用.Net做web项目的时候遇到了一些问题,就是很多的页面的处理一样的,不一样的就是我们写的存储过程不同,为了考虑代码的重复利用和可维护性和可 扩展性,于是写了一个对于单据页面的工厂模式,采用界面 ...

最新文章

  1. Go 分布式学习利器(9)-- Go语言 结构体的行为定义和实现
  2. Xcode调用栈时小图标代表什么意思
  3. 如何使用阿里云主机搭建lordofpomelo
  4. 用VisualVM分析MyEclipse
  5. Android Studio 设置编辑器背景颜色
  6. oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...
  7. gitlab+jenkins=自动化构建
  8. Android的activity的title设定内容
  9. loadrunner- winsock 函数 一览表
  10. 导弹拦截(NOIP2010 普及组第三题)
  11. win10计算机停止工作,Win10系统总提示Rundll32已停止工作的解决方法
  12. 三角函数的正交性及其公式推导
  13. qq三国华容道算法(拼图问题,8数码问题?)
  14. iOS APP上线App Store流程(包括.p12导出)
  15. 物联网 USN架构 和 M2M架构
  16. JavaScript学习笔记(6)变量
  17. 华为Atlas200DK的环境部署与运行demo(人脸识别)
  18. linux运维自动化脚本,linux运维自动化shell脚本小工具
  19. python设置子图的坐标_python如何调整子图的大小?
  20. 第一个divcss属性失效_复合材料失效理论知多少(三):一战封神Pinho理论

热门文章

  1. 运行无法打开计算机策略,“组策略不能打开”的解决方案
  2. 对坐标的曲线积分求做功_曲线积分与曲面积分(前篇 曲线积分-坐标曲线积分-格林公式)...
  3. libreCAD源码阅读笔记3
  4. 提高期英语学习——第二次罗塞塔
  5. C语言strcpy()函数,字符数组复制
  6. 父类引用指向子类对象,为什么会调用的是子类中重新的方法
  7. QList(增删改查)示例
  8. html根据PC手机设置不同背景图,Html-根据不同的分辨率设置不同的背景图片
  9. 虚拟机打不开是黑屏状态
  10. 改变el-input框的样式(去掉边框),及scoped实现原理