1.设计模式第一步-《设计模式从头到脚舔一遍-使用C#实现》
更新记录:
完成第一次编辑: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#实现》的更多相关文章
- [JAVA设计模式]第一部分:接口、抽象类、设计原则
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- IOS设计模式第一篇之MVC
设计模式的好处:我们可以写出容易理解,重用度很高的代码.降低代码的耦合度,符合软件工程的思想. 设计模式主要分为三类:创造型的:单例和抽象工厂.结构类型的: MVC Decorator, Adapt ...
- head first 设计模式第一章笔记
设计模式是告诉我们如何组织类和对象以解决某种问题. 学习设计模式,也就是学习其他开发人员的经验与智慧,解决遇到的相同的问题. 使用模式的最好方式是:把模式装进脑子,然后在设计的时候,寻找何处可以使用它 ...
- [head first 设计模式] 第一章 策略模式
[head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继 ...
- 第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码
新手教程: 前言:最近在看了一下很久很久以前做的qq机器人失效了,最近也在换工作目前还在职,时间很挺宽裕的.就决定从新搞一个web qq机器人 PC的协议解析出来有点费时间以后再做. 准备工作: 编译 ...
- Java设计模式 --- 七大常用设计模式示例归纳
设计模式分为三种类型,共23种: 创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式 行为型模式:模 ...
- [EntLib]微软企业库5.0 学习之路——第一步、基本入门
话说在大学的时候帮老师做项目的时候就已经接触过企业库了但是当初一直没明白为什么要用这个,只觉得好麻烦啊,竟然有那么多的乱七八糟的配置(原来我不知道有配置工具可以进行配置,请原谅我的小白). 直到去年在 ...
- Java设计模式—单例设计模式(Singleton Pattern)全然解析
转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...
- 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析
Newbe.Claptrap 框架非常适合于解决具有并发问题的业务系统.火车票售票系统,就是一个非常典型的场景用例. 本系列我们将逐步从业务.代码.测试和部署多方面来介绍,如何使用 Newbe.Cla ...
随机推荐
- Java学习笔记(韩顺平教育 b站有课程)
Java重要特点 面向对象(oop) 健壮性:强类型机制,异常处理,垃圾的自动收集 跨平台性的 (一个编译好的.class可以在多个系统下运行) TEST.java -> TEST.class ...
- 解决“WARNINGThe remote SSH server rejected X11 forwarding request.“警告
使用xshell连接服务器时,出现了"WARNING! The remote SSH server rejected X11 forwarding request.",意思是&qu ...
- Java对象和多态
Java对象和多态 (面向对象) 面向对象基础 面向对象程序设计(Object Oriented Programming) 对象基于类创建,类相当于一个模板,对象就是根据模板创建出来的实体(就像做月饼 ...
- 测试脚本配置、ORM必知必会13条、双下划线查询、一对多外键关系、多对多外键关系、多表查询
测试脚本配置 ''' 当你只是想测试django中的某一个文件内容 那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可 脚本代码无论是写在应用下的test.py还是单独开设py文件都可以 ' ...
- RPC及Dubbo和ZooKeeper的安装
RPC及Dubbo和ZooKeeper的安装 RPC 通信有两种方式:HTTP(无状态协议,通信协议),RPC(远程过程调用) 它两的本质没有区别,只是功能有点不一样 官方解释: RPC是指远程过程调 ...
- 解决hexo报错spwan failed
报错1 FATAL { err: Error: Spawn failed at ChildProcess.<anonymous> (/usr/local/src/hexo/cairbin/ ...
- JavaScript基础第05天笔记
JavaScript基础第05天笔记 1 - 作用域 1.1 作用域概述 通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域.作用域的使用提 ...
- 【面试普通人VS高手系列】Spring Boot中自动装配机制的原理
最近一个粉丝说,他面试了4个公司,有三个公司问他:"Spring Boot 中自动装配机制的原理" 他回答了,感觉没回答错误,但是怎么就没给offer呢? 对于这个问题,看看普通人 ...
- 了解mybatis
什么是mybatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBati ...
- 用户与安全 -(1)Linux用户及组管理
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登 ...