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 ...
随机推荐
- 在原有mysql机器上增加一台实例
采用的是yum install mysql-community-server yum方式安装mysql(社区版) 文章基础上新加一个mysql实例. 这个完全可以直接实战上应用,只要规划好即可 服务器 ...
- JavaWeb学习day6-Response初学
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpSevletRequest对象,代表响应的一个HttpSevletResponse 如果要获取客户端请求过来的数据, ...
- RecyclerView + SQLite 简易备忘录-----中(2)
(3)RecyclerView的实现 ---中间的内容 RecyclerView是一个比ListView更加强大的滚动控件.要使用这个控件需要先在项目的build.gradle中添加RecyclerV ...
- python基础练习题(题目 文本颜色设置)
day23 --------------------------------------------------------------- 实例035:设置输出颜色 题目 文本颜色设置. 分析:不会, ...
- 浅谈 TCP、IP、DNS 和 HTTP 的关系
一.浅谈三个协议的基本概念 1.IP 协议 按层次分,IP网际协议位于网络层,几乎所有的网络的系统都会用到 IP 协议,其重要性非同一般.IP 协议作用就是把各种数据包传送给对方,对方的地址就要看其 ...
- Mysql 计算地址经纬度距离实时位置
前言 最近在做项目时候,遇到一个这样子的需求, 点到卡包里面卡券使用使用,需要展示卡券使用附近门店, 思路 数据库地址表设计 通用的区域街道地址表tz_sys_area 字段名称 类型 备注 area ...
- 1.17 想学好Linux,这些习惯必须养成(初学者必读)
不管是在生活还是工作中,每个人都会逐渐养成一些小习惯.坏习惯一旦形成就很难改正,所在在系统学习 Linux之前,给大家一些建议,刻意去培养一些好的习惯,对自己是很有利的. 学习Linux,要习惯使用命 ...
- DH问题汇总
本节内容主要转载于:弄清楚DL,D-H,CDH problem,CDH assumption,DDH,BDDH,BCDH. DLP(Discrete Logarithm Problem) 在乘法群\( ...
- QY-16 浮标水质监测站 组成 及基础参数是什么?一文认识什么是浮标水质监测站
浮标水质监测站是设立在河流.湖泊.水库.近岸海域等流 域内的现场水质自动监测实验室,是以水质监测仪为核心,运用 传感器技术,结合浮标体.电源供电系统.数据传输设备组成的 放置于水域内的小型水质监测系统 ...
- 定位、z-index、JavaScript变量和数据类型
溢出属性 # 文本内容超出了标签的最大范围 overflow: hidden; 直接隐藏文本内容 overflow: auto\scroll; 提供滚动条查看 # 溢出实战案例 div { overf ...