设计模式杂谈(一)——设计模式概述

文章目录

  • 1 设计模式概述
    • 1.1 软件设计模式的产生背景
    • 1.2 软件设计模式的概念
    • 1.3 设计模式的必要性
    • 1.4 设计模式分类

1 设计模式概述

1.1 软件设计模式的产生背景

设计模式最初并不是在软件设计中,而是被用于建筑领域的设计中。

1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托福·亚历山大在它的著作《建筑模式:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了253种关于对城镇、邻里、住宅、花园和房间等各种结构设计的基本模式。

1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。知道1995年,艾瑞克·伽马、理查德·海德姆、拉尔夫·约翰森、约翰·威利斯迪斯等4位作何合作出版了《设计模式:可复用面向对象软件的基础》一书,这本书被称为设计模式的开山鼻祖。在此书中,收录了共23个设计模式,导致了在此领域中出现了惊人的突破。而后,在软件开发领域中,这4位作者组成四人组也被称为GOF。

1.2 软件设计模式的概念

软件设计模式又简称为设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案,也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。

1.3 设计模式的必要性

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。

正确使用设计模式具有以下优点:

  • 可以提高程序员的思维能力、编程能力和设计能力
  • 使得程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期
  • 使设计的代码可重用性高、可读性高、可靠性高、灵活性好、可维护性强

1.4 设计模式分类

创建型模式

用于描述怎么创建对象,它的主要特点是将对象的创建与使用分离。GOF书中提供了单例、原型、工厂、抽象工厂、建造者等5种创建型模式。

结构型模式

用于描述如何将类或对象按某种布局组成更大的结构,GOF书中提供了代理、适配器、桥接、装饰、外观、享元、组合等7种结构型模式。

行为型模式

用于描述类或对象之间怎么去相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。GOF书中提供了模板、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等11种行为型模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hmailserver批量添加用户

2019独角兽企业重金招聘Python工程师标准>>> 将内容复制到txt文件中后缀改为vbs 将用户名密码替换为自己的 脚本内容如下: Option Explicit On Error resume nextDim obBaseApp Dim objFSO Dim objTextFile Dim strNewAlias,iDim scrreport Dim failed Dim added fa…

云说的到底对不对,京东到底行不行?

摘要:马云吐槽京东被引爆以来,似乎就没人去关注马云说的对不对,有没有价值,大家更多的是在关注马云攻击了京东,京东回击了马云,马云被偷录了,再和人说话要去澡堂了…但,马云说的到底…

JS-随机生成的密码

randPassword(size) >{ //数组 let seed new Array(A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z, a,b,c,d,e,f,g,h,i,j,k,m,n,p,Q,r,s,t,u,v,w,x,y,z, 2,3,4,5,6,7,8,9 ) //数组长度 seedlength seed.length; let creatPassword[]; for (i0;i<size;i) { j Mat…

数据库杂谈(九)——事务管理

文章目录9 事务管理9.1 恢复机制9.2 事务和日志9.2.1 事务9.2.2 运行记录的结构9.2.2.1 活动事务表9.2.2.2 提交事务表9.2.2.3 日志9.2.3 提交规则和先记后写规则9.2.3.1 提交规则9.2.3.2 先记后写规则9.3 更新策略以及故障后的恢复9 事务管理 9.1 恢复机制 数据对一个单位是…

CSS邮件相关

转载于:https://blog.51cto.com/8465917/1758775

MySql 错误 Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes

今天在用Navicat导入SQL文件时报错&#xff1a;MySql 错误 Err [Imp] 1153 - Got a packet bigger than max_allowed_packet bytes 查了一下&#xff0c;原来是MySQL默认读取执行的SQL文件最大为16M&#xff0c;我这个SQL文件260M&#xff0c;所以执行不过去 解决方法&#xff…

沙箱模式以及其使用到的IIFE

//沙箱//与外界隔绝的一个环境&#xff0c;外界无法修改该环境内任何信息&#xff0c;沙箱内的东西单独属于一个世界//360沙箱模式//将软件和操作系统进行隔离&#xff0c;以达到安全的目的//苹果手的app使用的就是沙箱模式去运行//隔离app的空间&#xff0c;每个app独立运行//…

C++从0到1的入门级教学(十)——类和对象

文章目录10 类和对象10.1 封装10.1.1 封装的意义10.1.2 struct和class的区别10.1.3 成员属性设置为私有10.2 对象的初始化和清理10.2.1 构造函数和析构函数10.2.2 构造函数的分类及调用10.2.3 关于拷贝构造函数调用时机10.2.4 构造函数调用规则10.2.5 深拷贝和浅拷贝10.2.6 初始…

js二级导航

js写二级导航要点 1.ul li 2.js获取元素 3.setInterval(function(),time); 代码如下 1 <style type"text/css">2 ul,li,body{margin:0;padding: 0;}3 #nav{width: 500px;margin: 10px auto;}4 ul li{list-style: none;}5 .clear{clear: both;}6 #n…

关于STM32的两个小问题的总结

一、最近做了一个关于自动转速测试仪的项目&#xff0c;其中用到了STM32的RTC时钟的功能&#xff0c;然后开始写代码&#xff0c;并且成功的跑了起来&#xff0c;于是将自己的板子放到桌面上让它跑了一个晚上看下误差&#xff0c;结果发现经过一晚上&#xff0c;误差并不是很大…

深度学习修炼(六)——神经网络分类问题

文章目录6 分类任务6.1 前置知识6.1.1 分类6.1.2 分类的网络6.2 动手6.2.1 读取数据6.2.2 functional模块6.2.3 继续搭建分类神经网络6.2.4 继续简化6.2.5 训练模型6.3 暂退法6.3.1 重新看待过拟合问题6.3.2 在稳健性中加入扰动6.3.3 暂退法实际的实现6.4 后话6 分类任务 在这…

修改NavigationBar的分根线颜色

[self.navigationController.navigationBar setShadowImage:[Static ColorToImage:[Static colorWithHexString:[UIColor red]]]]; Static 里的几个静态方法 (UIImage *)ColorToImage:(UIColor *)color{CGRect rectCGRectMake(0.0f, 0.0f, 1.0f, 1.0f);UIGraphicsBeginImageCo…

Java IO 之 InputStream源码(2)

Writer&#xff1a;李强强 一、InputStream InputStream是一个抽象类&#xff0c;即表示所有字节输入流实现类的基类。它的作用就是抽象地表示所有从不同数据源产生输入的类&#xff0c;例如常见的FileInputStream、FilterInputStream等。那些数据源呢&#xff1f;比如&#xf…

【CTSC2017】【BZOJ4903】吉夫特 卢卡斯定理 DP

题目描述 给你一个长度为\(n\)的数列\(a\)&#xff0c;求有多少个长度\(\geq 2\)的不上升子序列\(a_{b_1},a_{b_2},\ldots,a_{b_k}\)满足\[ \prod_{i2}^k\binom{a_{b_{i-1}}}{a_{b_i}}\mod 2>0 \]   答案对\({10}^97\)取模。 \(n\leq211985,a_i\leq 233333\) \(\forall i\…

深度学习修炼(七)——卷积神经网络

文章目录7 卷积神经网络7.1 卷积网络和传统网络的区别7.2 卷积7.2.1 卷积过程画大饼7.2.2 图像的不变性7.2.3 互相关运算*(补充)7.2.4 图像颜色通道*(补充)7.2.5 步幅7.2.6 多次卷积7.2.7 边缘填充7.2.8 特征图的大小7.2.9 卷积参数共享7.3 池化7.4 整体网络架构7.5 后话7 卷积…

Java并发编程:ThreadLocal

Java并发编程&#xff1a;深入剖析ThreadLocal ThreadLocal ThreadLocal之我见 Struts2中的设计模式----ThreadLocal模式 ThreadLocal ThreadLocal原理及其实际应用 ThreadLocal 转载于:https://www.cnblogs.com/a198720/articles/4229366.html

用递归形成树结构数据

定义一个树形实体 public class orgTrees{public orgTrees(){this.Children new List<orgTrees>();}public int Id { get; set; }public int FatherId { get; set; }public string Name { get; set; }public int Lever { get; set; }public bool HasChildren { get; se…

网络爬虫(一)——爬虫及其实现

文章目录1.1 爬虫概述1.1.3 网络爬虫和浏览器的区别1.1.2 网络爬虫的定义1.2 requests请求库1.2.1 requests基本概念1.2.2 疫情数据爬取1.2.3 get请求1.2.4 headers请求头1.2.5 Cookies验证1.3 Beautiful Soup解析库1.3.1 安装1.3.2 对象的创建1.3.3 find方法1.3.4 后话1.4 正则…

C# winform 窗体怎么隐藏标题栏,不显示标题栏

//没有标题 this.FormBorderStyle FormBorderStyle.None; //任务栏不显示 this.ShowInTaskbar false;转载于:https://www.cnblogs.com/qq260250932/p/4230472.html

sqL编程篇(三) 游标与存储过程

sql编程2 游标与存储过程 sql编程中的游标的使用&#xff1a;提供的一种对查询的结果集进行逐行处理的一种方式不用游标的处理解决方式&#xff1a;逐行修改工资update salar set 工资‘新工资’ where 雇员号0101 //通过查出雇员号而修改工资过程&#xff1a;1.定义一个游标&a…