23种设计模式+额外常用设计模式汇总 (持续更新)

简单工厂模式

简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的“消费”和生产完全分开,客户端只需要知道自己需要什么产品,如何来使用产品就可以了,具体的产品生产任务由具体的工厂类来实现。工厂类根据传进来的参数生产具体的产品供消费者使用。这种模式使得更加利于扩展,当有新的产品加入时仅仅需要在工厂中加入新产品的构造就可以了。

优点
  • 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端与产品的创建分离,客户端可以免除直接创建产品对象的责任,不需要知道产品创建的逻辑,而仅仅工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费消费"产品。简单工厂模式通过这种做法实现了对责任的分割。
缺点
  • 当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
  • 同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。
  • 另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构
  • 工厂类集成了所有产品的创建逻辑,当工厂类出现问题,所有产品都会出现问题;还有当新增加产品都会修改工厂类,违背开闭原则
使用场景
  • 如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,则可以选用简单工厂。让客户端通过工厂来获取相应的接口,而无需关心具体的实现。
  • 如果想要把对外创建对象的职责集中管理
    和控制,可以选用简单工厂

实现

简单工厂模式的构成

具体的工厂角色:Factory;在工厂中可以调用方法生产出具体的某个类型的产品;
抽象的产品角色:Father_Product;在抽象产品类型中可以声明抽象接口,在具体的产品类中实现;
具体的产品角色:Ex_Product_1 和Ex_Product_2;在具体的类中必须实现抽象类的接口,也可以实现自己的业务逻辑。

简单工厂模式的UML

代码实现

别诟病我这中文写代码,问就是不是做项目,这样更容易知道自己写的啥!

package 简单工厂模式;public abstract class Father_Product {  //定义产品的父类String Attribute; //产品必备属性public abstract void Method(); //产品的功能
}
package 简单工厂模式;public class Ex_Product_1 extends Father_Product {@Overridepublic void Method() {System.out.println("我是第一种产品,这是我的功能");}}
package 简单工厂模式;public class Ex_Product_2 extends Father_Product {@Overridepublic void Method() {System.out.println("我是第二种产品,这是我的功能");}}
package 简单工厂模式;public class Factory {public Father_Product createProduct(String productName) {Father_Product product = null;switch(productName){case "1":product = new Ex_Product_1();//生产产品1break;case "2":product = new Ex_Product_2();//生产产品2break;default:break;}return product;}
}

写在最后:
我叫风骨散人,名字的意思是我多想可以不低头的自由生活,可现实却不是这样。家境贫寒,总得向这个世界低头,所以我一直在奋斗,想改变我的命运给亲人好的生活,希望同样被生活绑架的你可以通过自己的努力改变现状,深知成年人的世界里没有容易二字。目前是一名在校大学生,预计考研,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你!
如果有什么想看的,可以私信我,如果在能力范围内,我会发布相应的博文!
谢谢大家的阅读!

『设计模式』简单工厂模式相关推荐

  1. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  2. C#设计模式(2)——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

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

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

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

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

  5. JS常用的设计模式(2)——简单工厂模式

    JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...

  6. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

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

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

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

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

  9. php设计一个盒子类代码_PHP设计模式之简单工厂模式(Simple Factory)代码实例大全(七)...

    目的[1] 简单工厂模式是一个精简版的工厂模式. 它与静态工厂模式最大的区别是它不是『静态』的.因为非静态,所以你可以拥有多个不同参数的工厂,你可以为其创建子类.甚至可以模拟(Mock)它,这对编写可 ...

最新文章

  1. OpenStack如何实现高可用集群介绍
  2. python零基础入门大数据_【资源分享】零基础入门大数据(数据分析)经验分享...
  3. html表单php比较三个值大小,PHP比较三个数大小实现办法
  4. 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接
  5. javaSE各阶段练习题--数据类型运算符
  6. Mouse Jiggler – 自动移动光标,防止电脑启动屏保、进入休眠[Windows]
  7. mysql5.7.17免安装版_MySql 5.7.17免安装配置
  8. vue 实现压缩图片上传到oss
  9. 从Waymo挖来感知负责人张一萌,以及Pony.ai的又半年
  10. 六石编程学:如何整合两个项目的代码
  11. SDU-nachos安装及初步编译
  12. Hive教程(一) Hive入门教程
  13. 禁用word公式编辑器
  14. BAT三巨头谁最先进五百强?
  15. 从CentOS7默认安装的/home中转移空间到根目录/ - LVM操作简明教程
  16. win10设置护眼模式
  17. 一点知识丨Base64 的图片如何完美复制到系统粘贴板
  18. Unity线性空间UI制作方面总结
  19. 大功率高精度恒流源的设计
  20. Obsidian media extended以及bilibili插件链接总是打开外部网页以及退回编辑视图会弹出另外一个相同文件

热门文章

  1. Android开发之线程池管理ThreadPoolExecutor和Executors.newSingleThreadExecutor()
  2. Android通过WebView在线打开PDF文件(文中提供源码下载)
  3. 2. with check option能起什么作用?_家装要选择第三方装修监理吗?为什么?
  4. c语言二维数组省略号,LaTex 常用语法
  5. 从集合中查找最值得方法——max(),min(),nlargest(),nsmallest()
  6. Jmeter中使用循环如何保证数据不重复
  7. Linux集群和自动化维1.4.2 优化Linux下的内核TCP参数以提高系统性能
  8. eclipse导出Maven依赖的Jar
  9. java遍历所有目录和文件
  10. ios模拟器的路径-打开沙盒路径