热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

设计模式总结01

简单工厂模式:1.客户要要一台电脑,告诉‘工厂’,‘工厂’给客户生产出来2.客户要要一台彩电,告诉‘工厂’,‘工厂’给客户生产出来工厂方法模式:1.客户找‘电脑工

简单工厂模式:

1.客户要要一台电脑,告诉‘工厂’,‘工厂’给客户生产出来

2.客户要要一台彩电,告诉‘工厂’,‘工厂’给客户生产出来

工厂方法模式:

1.客户找‘电脑工厂’给客户生产出来一台能上网的设备

2.客户找‘家电工厂’给客户生产出来一台能接收电视节目的设备

简单工厂模式中,客户只提供参数,工厂根据参数生产出具体的对象产品,比如说:客户要一台笔记本 那就告诉工厂我要一台笔记本,工厂就根据客户的参数“笔记本”生产出来笔记本,当然存在不能生产的情况 应该说客户给定的参数和工厂能生产的产品存在对应关系 这个关系的判断过程存在于工厂中

而工厂方法模式中,客户直接通过工厂找到子工厂生产。在工厂方法模式中,客户并不需要知道这个产品叫什么 比如说:客户想要一个能上网、办公的设备,然后客户找了电脑厂 电脑厂给了客户一个设备,客户不需要关心这个谁被是台式机还是笔记本或者说是什么型号的。 子工厂能生产的具体产品跟子工厂是对应的 而客户不需要关心具体的产品叫什么  其实潜意识里应该说是客户知道这个产品能干什么

1. 结构复杂度 
简单工厂模式只需一个工厂类;而工厂方法模式的工厂类随着产品类个数增加而增加,从而增加了结构的复杂程度。 
2.代码复杂度 
代码复杂度和结构复杂度是一对矛盾,既然简单工厂模式在结构方面相对简洁,那么它在代码方面肯定是比工厂方法模式复杂的了。简单工厂模式的工厂类随着产品类的增加需要增加很多方法(或代码),而工厂方法模式每个具体工厂类只完成单一任务,代码简洁。 
3.客户端编程难度 
工厂方法模式虽然在工厂类结构中引入了接口从而满足了开放-封闭原则,但是在客户端编码中需要对工厂类进行实例化。

而简单工厂模式的工厂类是个静态类,在客户端无需实例化,这无疑是个吸引人的优点。


推荐阅读
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 如何查找和管理计算机中的C盘临时文件
    本文详细介绍了如何在计算机中找到和管理C盘的临时文件,包括其具体路径、环境变量设置方法以及清理这些文件对系统性能的影响。对于希望优化系统性能和释放磁盘空间的用户来说,这是一篇非常有价值的参考。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
author-avatar
鄢都浪子_562
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有