文章目录

  • 一. 工厂模式概要
  • 二.简单工厂模式
  • 三. 工厂模式

一. 工厂模式概要

  1. 理解:用factory模式代替使用new创建对象,实现了创建者和调用者的分离,方便维护对象。
  2. 实现方式:是面向接口编程
  3. 主要遵循:开闭原则,对类可以扩展,但是不允许对类修改。
    这原则核心思想,宁愿多创建几个类,也不要去修改已经写好的类,但如果是系统逻辑的错误,可以修改类。

面向对象设计基本原则:

原则 说明
开闭原则 软件实体应该是可扩展的,而不可修改的
里氏替换原则\color {red}{里氏替换原则}里氏替换原则 子类必须能够替换其基类,保证继承复用的基础
依赖倒转原则 依赖于抽象,高层模块不依赖于底层模块,二者都同依赖于抽象
单一职责 一个类,只做一件事并且做好
接口隔离原则 使用多个小的专门的接口,而不要使用一个大的总接口
迪米特法则 如果两个类之间无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用
模式 说明
简单工厂模式 用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)(违反开闭原则)
工厂模式 用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

二.简单工厂模式

创建意图就是,把对类的创建初始化全都交给一个工厂来执行,而用户不需要去关心创建的过程是什么样的,只用告诉工厂我想要什么就行了。违背了设计模式的开闭原则,如果你要增加其他产品,就必须对工厂进行改建。
例如我开了奔驰公司想要生产A系列的车和B系列的车,首先定义接口,创建两种车的类,和工厂类,就可以生产车了。
类图:

实现代码:

interface car {public  void run();
}class carA implements car {public void run(){System.out.println("carA 时速100km");}
}class carB implements car {public void run(){System.out.println("carB 时速200km");}}
//如果生产C系列的车
class carC implements car {   public void run(){System.out.println("carC 时速300km");}}class Factory {public car createCar(String name){if (name.equalsIgnoreCase("carA")) {return new carA();}else if (name.equalsIgnoreCase("carB")) {return new carB();}return null;}
}class SimpleFactoryClient{public static void main(String[] args) {Factory factory = new Factory();car car1= factory.createCar("carA"); //给个名,工厂就生产car1.run();car car2= factory.createCar("carB");car2.run();car car3= factory.createCar("carC");car3.run();}
}

如果改天想生产C系列的车carC,就得先造carC的类,但是要想完成对carC的生产,此时只能去修改工厂类,在里面添加一个新的方法,制造carC,但是不符合开闭原则。

三. 工厂模式

  • 解决简单工厂方法模式的缺点:使用工厂方法模式为每一种产品生成一个对应的工厂。
  • 工厂方法模式的核心思想:讨论的仍然是如何构建同一类型产品(都实现同一个接口)的问题,只不过每个工厂只生产一种特定的产品。
  • 优势:是当以后需要增加新的产品时,直接新增加一个对应的工厂就可以了,而不是去修改原有的工厂
    奔驰厂商优化生产线类图:

    实现
interface car {public  void run();
}class carA implements car {public void run(){System.out.println("carA 时速100km");}
}class carB implements car {public void run(){System.out.println("carB 时速200km");}}
//如果生产C系列的车
class carC implements car {   public void run(){System.out.println("carC 时速300km");}}interface CarFactory {public  car creatCar();
}
class  CarAFactory implements CarFactory {public  car creatCar(){return new carA();};
};
class  CarBFactory implements CarFactory {public  car creatCar(){return new carB();};
};
class  CarCFactory implements CarFactory {   //生产新车了public  car creatCar(){return new carC();};
};public class FactoryClient {public static void main(String[] args) {car car1 =new CarAFactory().creatCar(); car car2= new CarBFactory().creatCar();car car3= new CarCFactory().creatCar();car1.run();car2.run();car3.run();}
}

优缺点

  • 优点:不直接在客户端创建具体产品的实例,降低了耦合性。
  • 缺点:每增加一种产品就要相应的增加一个工厂类,比较繁琐。

技术要点总结

  • 构建的都是同一类型的对象,即实现相同的接口
  • 每一类对象对应一个工厂

欠的有一天不得不补回来 (| _ |
参考

Java 简单工厂模式和工厂模式(类图及实现)相关推荐

  1. Java设计模式(二):UML 类图和概述

    目录 一·UML类图 1.1 UML 基本介绍 1.2 UML 图 1.3 UML 类图 1.4 类图-依赖关系 ( Dependence) 1.5 类图-泛化关系(generalization) 1 ...

  2. java报告:小不点超市售货系统类图设计

    由于不是我自己的作业,就偷工减料了,没写缓存系统和后台自动保存 这里只放类图,没有源码!!!抄代码可耻!!!!

  3. 分析一下 原型模式的 UML 类图 。 复制对象, 深浅拷贝 月经贴 ,请回避

    转载于:https://www.cnblogs.com/ganmk--jy/p/5574662.html

  4. 简单工厂模式,工厂方法模式,抽象工厂模式,spring的狂想

    菜鸟D在项目中遇见一个比较纠结的高耦合,所以就想办法来解耦.情况是这样的:系统通过用户选择treeview控件的节点判断调用不同的处理,这些处理中某些东西又是类似的.同事的建议是采用简单工厂,耦合就耦 ...

  5. 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...

  6. Java设计模式之策略模式(UML类图分析+代码详解)

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

  7. Java设计模式(四):结构性模式(适配器模式、桥接模式、装饰模式、组合模式、外观模式、亨元模式、代理模式)

    目录 一· 适配器设计模式 1.1 现实生活中的适配器例子 1.2 基本介绍 1.3 工作原理 1.4 类适配器模式 1.5 对象适配器模式 1.6 接口适配器模式 1.7 适配器模式在 Spring ...

  8. iOS开发 - 面向对象设计的设计模式(一):创建型模式(附 Demo UML类图)

    继上一篇的面向对象设计的设计原则,本篇是面向对象设计系列的第二个部分:面向对象设计的设计模式的第一篇文章. 另外,本篇博客的代码和类图都保存在我的GitHub库中:中的Chapter2. 最开始说一下 ...

  9. 23种设计模式【全】 包含:模式定义 使用场景 实现步骤 优缺点 模式区别 UML类图 示例代码 注意项等

    23种设计模式(全) ***项目地址***:[GitHub](https://github.com/yjhroot/design-pattern) 声明 模式分类(3大类) 创建型模式(共5种) 结构 ...

  10. java学习之设计模式-享元模式

    享元模式 概述 定义: 运用共享技术来有效地支持大量细粒度对象的复用.它通过共享已经存在的对象来大幅度减少需要创建的对象数量.避免大量相似对象的开销,从而提高系统资源的利用率. 结构 享元(Flywe ...

最新文章

  1. 前端面试题(html篇)
  2. css:hover选择器
  3. Zabbix如何实现Server和Agent的通信加密
  4. SpringBoot+JsTree实现在编辑时能选择树形结构并获取选中的ID
  5. [PKUWC2018][loj2541]猎人杀
  6. promise设置多个接口并行调用
  7. 循环链表实现两个多项式相加主要代码
  8. 2020科目一考试口诀_二级建造师考试科目有哪些2020
  9. mysql 单表查询
  10. Shiro系列-Authenticator和AuthenticationStrategy是什么
  11. 数学公式的规约(reduce)和简化(simplify)
  12. Atitit 分布式之道 attilax著 第4章 通信 第7章 一致性和复制 第8章 容错性 第9章 安全性 第10章 基于对象的分布式系统 第11章 分布式文件系统 第12章 基于Web的分
  13. foxmail的邮局和端口_Foxmail如何进行POP、SMTP设置(pop)
  14. ipxspx协议linux,三大协议 TCPIP NETBIOS IPX (转)
  15. LibVLC —— 《基于Qt的LibVLC专业开发技术》视频教程
  16. 西方文学名著鉴赏——英文诗歌翻译赏析
  17. OPENGL中GLAD的代码实现过程
  18. java开发人员的小习惯
  19. 享元模式实例与解析实例二:共享网络设备(有外部状态)
  20. 2417. Loan Repayment

热门文章

  1. python使用matplotlib可视化矢量流场图、使用streamplot函数可视化矢量流场图、矢量流场图包含坐标和方向
  2. 大漠插件ocr多选字库_大漠ocr识别字库的生成,和使用方法
  3. maven项目中配置pom.xml引用ojdbc14.jar出错
  4. maven下载 oracle 驱动包com.oracle:ojdbc14:jar
  5. 人脸识别Demo解析C#
  6. CocosCreator代码混淆加密
  7. 公交车管理系统C语言
  8. dcp9020cdn硒鼓!错误_打印机硒鼓错误是什么意思?故障解决【详解】
  9. 社区团购微信小程序开发
  10. chrome书签搜索