更新记录:

完成第一次编辑:2022年4月23日20:29:33。

加入小黄人歌曲:2022年4月23日21:45:36。

1.1 设计模式(Design Pattern)是什么

设计模式是理论、是前人的经验、解决问题的方法、是一种编码的方式。由The Gang of Four:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides提出。第一次我看到设计模式解释的时候那真的是云里雾里,这TMD的说的啥玩意儿。



直到我学会了一两个设计模式,然后Get到有趣点了,才明白原来是这么回事。在现在的面向对象程序中:设计模式更多是指代码如何创建对象、如何组合对象、如何设置对象间交互。那么您可能会说了,还不简单吗,创建对象不就new一个事情嘛,对对对,说的对,但这里面有挺多的套路,很有意思,各种new的花样。通常网络上的大佬把如何创建对象的设计模式称为“创建型设计模式”。再来说组合对象,大概就是你把我包含起来,或者我把你包含起来,再或者我们都是平级,但负责的任务不同,再或者就是你当我爸爸我当儿子。通常网络上的大佬把如何组合对象的设计模式称为“结构型设计模式”。设置对象间的交互这个好理解,对象之间通过方法实现互相交互,那么方法怎么设计,方法放在哪里,这也是一个很有意思的话题,通常网络上的大佬把如何设置对象间交互称为“行为型设计模式”

1.2 设计模式分类

所以上面的大段废话可以总结为,设计模式就是一种设计上的套路 ,可以分为三类套路:

“创建型设计模式”:关注如何创建对象。通过不同方式控制对象创建来避免对象创建时可能导致设计问题或者增加设计复杂度。

“结构型设计模式”:关注类与类之间的关系,关系有很多种。组合优于继承。

“行为型设计模式”:关注类和对象如何交互和分配职责。

还是没看懂吗,没事,直接跳到后面看代码,看完代码再回来看这些没味道的文字。


1.3 为什么需要设计模式(为什么需要设计套路)

前面我们说到:设计模式是一种套路。那么为什么需要套路?先来看首牛逼的网友写的诗:

城市套路深,我要回农村。农村路也滑,套路更复杂。

城市套路深,我要回农村。农村路也滑,人心更复杂。

城市套路深,我要回农村。农村道路远,套路更加险。

城市套路深,我要回农村。农村已整改,套路深似海。

发现问题没有?套路是无处不再的。只要你在,套路就在。那么程序设计中套路也不例外,即使你不需要,本质上代码写多了,也会自己无意中用到/碰到一些套路。从本质上来说:不是我们需要设计模式,而是慢慢的代码写多了总结出来的一种套路,用这种套路可以给自己带来好处,比如:甲方爸爸要把功能改来改去、甲方爸爸想花5毛钱就把功能做出来、甲方爸爸想把A项目的代码直接改改用在B项目。 但是要注意:设计模式不是万能的,设计模式并不能解决所有问题,无论使用解决方法,都有利弊,毕竟原则是死的,人是活的。比如:妹子说:“啊啊~不要啊”。难道就真的停下来?

1.4 继续干

介绍完设计模式基本描述,接下来还要继续推进面向对象原则+具体设计模式,说好的从头到脚舔一遍,那就一定从头到脚舔一遍。

先把汇总放在这,后面搞定了再回来看。

面向对象基本原则

她们分别是:

单一职责原则(SRP): 只干好一件事。

开/闭原则(OCP): 欢迎扩展拒绝修改。

里式提换原则(LSP): 儿子代替父亲做事情。

接口隔离原则(ISP) : 细化接口。

依赖倒置原则(DIP): 面向抽象编程。

迪米特法则(LoD): 减少类公开方法。

具体设计模式,她们分别是:

创建型设计模式

工厂模式(Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)

单例模式(Singleton Pattern)

建造者模式(Builder Pattern)

原型模式(Prototype Pattern)

结构型设计模式

适配器模式(Adapter Pattern)

桥接模式(Bridge Pattern)

过滤器模式(Filter、Criteria Pattern)

组合模式(Composite Pattern)

装饰器模式(Decorator Pattern)

外观模式(Facade Pattern)

享元模式(Flyweight Pattern)

代理模式(Proxy Pattern)

行为型设计模式

责任链模式(Chain of Responsibility Pattern)

命令模式(Command Pattern)

解释器模式(Interpreter Pattern)

迭代器模式(Iterator Pattern)

中介者模式(Mediator Pattern)

备忘录模式(Memento Pattern)

观察者模式(Observer Pattern)

状态模式(State Pattern)

空对象模式(Null Object Pattern)

策略模式(Strategy Pattern)

模板模式(Template Pattern)

访问者模式(Visitor Pattern)

1.5 如何学习设计模式

掌握以下要点:

设计模式的名称(叫什么)

设计模式的原理(是什么)

设计模式解决的问题和使用场景(可以干嘛,在哪里干)

描述设计模式的如何解决问题(怎么干)

具体的代码实现(具体干)

项目中使用设计模式(创造价值)

总结交流

即:叫什么→是什么→可以干嘛→在哪里干→怎么干→具体干→创造价值→活用

使用模式的最好境界:不拘泥于模式。

1.设计模式第一步-《设计模式从头到脚舔一遍-使用C#实现》的更多相关文章

  1. [JAVA设计模式]第一部分:接口、抽象类、设计原则

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. IOS设计模式第一篇之MVC

    设计模式的好处:我们可以写出容易理解,重用度很高的代码.降低代码的耦合度,符合软件工程的思想. 设计模式主要分为三类:创造型的:单例和抽象工厂.结构类型的: MVC  Decorator, Adapt ...

  3. head first 设计模式第一章笔记

    设计模式是告诉我们如何组织类和对象以解决某种问题. 学习设计模式,也就是学习其他开发人员的经验与智慧,解决遇到的相同的问题. 使用模式的最好方式是:把模式装进脑子,然后在设计的时候,寻找何处可以使用它 ...

  4. [head first 设计模式] 第一章 策略模式

    [head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继 ...

  5. 第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码

    新手教程: 前言:最近在看了一下很久很久以前做的qq机器人失效了,最近也在换工作目前还在职,时间很挺宽裕的.就决定从新搞一个web qq机器人 PC的协议解析出来有点费时间以后再做. 准备工作: 编译 ...

  6. Java设计模式 --- 七大常用设计模式示例归纳

    设计模式分为三种类型,共23种: 创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式 行为型模式:模 ...

  7. [EntLib]微软企业库5.0 学习之路——第一步、基本入门

    话说在大学的时候帮老师做项目的时候就已经接触过企业库了但是当初一直没明白为什么要用这个,只觉得好麻烦啊,竟然有那么多的乱七八糟的配置(原来我不知道有配置工具可以进行配置,请原谅我的小白). 直到去年在 ...

  8. Java设计模式—单例设计模式(Singleton Pattern)全然解析

    转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...

  9. 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析

    Newbe.Claptrap 框架非常适合于解决具有并发问题的业务系统.火车票售票系统,就是一个非常典型的场景用例. 本系列我们将逐步从业务.代码.测试和部署多方面来介绍,如何使用 Newbe.Cla ...

随机推荐

  1. 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习

    一.技术产生的背景 1.1 背景 先来了解一下分布式链路追踪技术产生的背景. 在现在这个发达的互联网世界,互联网的规模越来越大,比如 google 的搜索,Netflix 的视频流直播,淘宝的购物等. ...

  2. Java报错:Failed to execute goal org.eclipse.jetty:jetty-maven-plugin:9.4.26.v20200117:run (default-cli) on project ssm-mybatis-plus: Failure

    修改一下端口就好了,不要用80端口. <plugin> <groupId>org.eclipse.jetty</groupId> <!--嵌入式Jetty的M ...

  3. python"温度转换"实例编写

    介绍 实现华氏度和摄氏度之间的转换. 代码: #TempCovert.py TempStr = input("请输入带有符号的温度值") if TempStr[-1] in [&q ...

  4. 记-Golang日志文件读取及写入操作

    Golang语言的 os 包中OpenFile 函数,如下所示: func OpenFile(name string, flag int, perm FileMode) (*File, error) ...

  5. LC-349

    Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the ...

  6. Kubernetes架构-图解

  7. 帝国CMS实现栏目批量修改:是否生成

    帝国cms实现栏目批量修改 是否生成:不生成栏目页, 不生成内容页, 不生成JS调用, 标签不调用的修改方本文关键字词:栏目批量设置第一步./e/admin/SetMoreClass.php中查找: ...

  8. Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据

    前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...

  9. Java开发中关于资源路径获取问题

    描述 在开发中经常会读取配置文件,在Web开发中大多数都是在项目路径下.核心的API类或者是Controller异或是jsp页面等,基本都是基于web应用的相对路径,很少去操作绝对路径,但是在客户端. ...

  10. 不care工具,在大数据平台中Hive能自动处理SQL

    摘要:有没有更简单的办法,可以直接将SQL运行在大数据平台? 本文分享自华为云社区<Hive执行原理>,作者: JavaEdge . MapReduce简化了大数据编程的难度,使得大数据计 ...