编程中的那些经典套路——设计模式汇总

CSDN博主
• 阅读 9679

在正式阅读前,我先谈谈我们该用什么姿势和心态学习设计模式:

  • 如果你还没有过多的编程经验(泛指半年以下),我建议你把它当做小说来看,能看懂多少是多少,因为半年以下经验的程序员用到设计模式的情况只会出现在面试上,至于实际工作中?相对来说这部分不会由你负责。

  • 如果你已经对编程,对模块结构有一些感觉了(一年经验以上),我相信你能够看懂了,但能理解到什么程度,就看你自己的理解能力了。但是你要明白设计模式是那些大牛们研究出来的套路,是面向”人民大众”,它绝对不会太难。

  • 如果你已经资深程序员、架构师,那么你可以忽略我这篇文章了,当然你可以考虑在评论中指出我的错误。

此系列均以PHP语言实现,不过大多数设计模式具有语言无关性,你可以用PHP或者JAVA写一个设计模式,你也可以用JavaScript写一个设计模式。

定义:在软件开发过程中,经常出现的典型场景的典型解决方案,称为设计模式

回归题目,设计模式其实就是一个套路,只是专业人士们把它们称之为”设计模式”,你愿意的话可以称它们为”编程中的一些很棒的,可以节省维护成本,可拓展性极强的套路”。

理论上最符合规范的设计模式会具备以下特性:

  • 可拓展性强,可维护性强,复用性强,杜绝”牵一发而动全身”的情况出现。

  • 代码 很少/无 耦合,遵循面向对象五大原则,最重要的是符合单一职责(S)开放封闭原则(O)

    **S – 单一职责原则**
    **O – 开放封闭原则**
    L – 里氏替换原则
    I – 接口隔离原则
    D – 依赖倒置原则
    

属于面向接口开发而不是面向对象
清晰易懂
学习设计模式的意义:

  1. 更深入的理解面向对1象的思想.

  2. 有利于开发出扩展性强的程序

  3. 面试时的重要考察方面

以下是具体的设计模式讲解,为了保证简单易懂,文章的篇幅普遍保持在五分钟内可阅读完。

如果无法全部理解的同学,可以优先看工厂模式单例模式观察者模式,这三者模式我认为我比较常用的。

单例模式

简单工厂模式

工厂模式

观察者模式

适配器模式

桥接模式

策略模式

责任链模式

装饰器模式

我认为设计模式的产生是基于面向对象三特性五原则而产生的,你可以顺带看看这方面的知识。

最后提醒一点,设计模式中具体的代码是项目的不同而不同的,没必要死守着这套规范(也就是说我例子里的代码你可以尽情改,只要符合你自己的项目需求就好),设计模式出现的目的是为了代码可读性,拓展性更强而并不是为了展示你的编程技巧,一切都是为了人能看懂,服务器运行起来效率高,后期改代码的时候不会那么麻烦
等目的 而服务的,切勿舍本逐末!

希望你全部都能看懂,那证明我的语言表述能力还不错。如果看不懂的话,可以在评论区中提问,我会第一时间回答你!无论何时我一直都在~嗯哼

该文章属于《编程中的那些经典套路——设计模式汇总》系列

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
4年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
00_设计模式之语言选择
设计模式之语言选择设计模式简介背景设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这