设计模式篇

一. 什么是设计模式

  纠结了好久,今天终于下定决心开始写设计模式系列,因为这个系列章节确实不好写,在这之前,也看了好多关于设计模式的博客、视频、书籍等,大多数用的例子要么猫啊狗啊、大雁等动物类;要么就是学生类,教师类,试想一下,哪个项目中会用这些动物类教师类呢?

  我也和我同行的朋友交流了一下关于设计模式,对设计模式的理解,可以分为这么几个层次:

  ①:根本不知道什么是设计模式。

  ②:听说过几种设计模式,理解不深。

  ③:能写出并理解几种设计模式,但不知道在项目中该怎么用。

  毋庸置疑,能否灵活的运用好设计模式,是一个名开发工程师迈向架构师的必经之路,上面说的这么玄乎,那么到底什么是设计模式呢?这里先借助金庸的武侠小说来类比一下。

  作为金庸迷的我,金庸老师的“飞雪连天射白鹿,笑书神侠倚碧鸳”14部小说每一部看了都不低于3遍以上,对里面个各种武功也是了如指掌,像效果比较炫丽,威力比较大的有:“乔帮主降龙十八掌、段誉的六脉神剑、杨过的黯然销魂掌、任我行的吸星大法等等”,这些都是外家功夫,种类很多,一个人可能会多种,这就好比.Net的中MVC、EF、SignalR等等;当然也有内功心法,典型的有:”少林和尚的易筋经、张无忌的九阳神功”,这两种功夫本身并没有太大的杀伤力,但会了这种功夫,更容易融会贯通外家功夫,使外家功夫发挥出更大效果,拿到我们开发领域,“设计模式”就是内功心法,没有语言之分,它是一种模式,一种思想指导着我们开发。

  那么怎么才能算精通设计模式呢?

  看过《倚天屠龙记》的朋友可能会记得里面有这么一个场景:赵敏冒充明教挑战张三丰的时候,张无忌办成小道童出来救场,在对阵三个家奴的的时候,张三丰教了张无忌一套太极拳法,里面有这么一段对话:

   

  张三丰演示完后,问张无忌:“无忌,你记住了多少”,张无忌回答说:“无忌不才,只有一小部分没有记住”;过了一会,张三丰又问道:“现在能记住多少”,无忌说:“太师傅,我已经全部忘记了”,这时,张三丰说:“无忌你可以上了”,结果显然而知,对手被打的那叫一个惨啊。

  所以:设计模式的最高境界是,忘记设计模式,将23种的设计模式自然而然的融入开发中,哈哈,当然这个有点难,没有个五年以上的功力,很难达到这个层次。

  

二. 设计模式的内容

  设计模式是一种套路,是把 “别人成功的例子” 拿过来灵活运用,我们的优秀的前辈总结出来7个设计原则23种设计模式

设计原则:

    1. 单一职责原则    2. 里氏替换原则                        3. 依赖倒置原则

    4. 接口隔离原则    5. 迪米特原则(最小知道原则)    6. 开闭原则

    7. 组合聚合原则

 

设计模式:

  1. 创建型模式 :工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

  2. 结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

  3. 行为型模式:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

 

   解释:设计模式只是一个大概的套路,不能生搬硬套,有一些做法可能是多个设计模式的融合,有的也很难归为某个设计模式。不要为了设计模式而设计模式,没有十全十美的代码。

  在上述设计模式中,大部分设计模式都用到了上面的设计思想,在设计模式中,我们会经常看到:开闭原则、里氏替换原则(多态)、面向接口编程、面向抽象编程、抽象类、override覆写这几种技术。

  如果对于抽象类或者override不明白的,有必要先看一下下面的章节:

                           第一节:从面向对象思想(oo)开发、接口、抽象类以及二者比较 

                          第二节:重写(new)、覆写(overwrite)、和重载(overload)

 

三. 系列章节

   下面将由浅入深,结合实际案例来讲解设计原则和设计模式。

 

     第一节:见识设计模式的神器之处。

     第二节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第三节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第四节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第五节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第六节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第七节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第八节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第九节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十一节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十二节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十三节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十四节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十五节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十六节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十七节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十八节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第十九节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十一节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十二节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十三节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十四节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十五节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十六节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十七节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十八节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第二十九节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第三十节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第三十一节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第三十二节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     第三十三节:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

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

相关文章

Navicat15安装笔记

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🔎关注➕🤞点赞➕📋评论➕😄收藏 📅创作日期:2021年12月29日 📅修改日期…

MySQL5安装配置笔记【超详细】

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

IDEA常用快捷键大合集

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

KnockoutJs篇:快速掌握KnockoutJs

一、引言 之前这个系列文章已经介绍Bootstrap。由于最近项目中,前端是Asp.net MVC KnockoutJs Bootstrap来做的。所以我又重新开始写这个系列。今天就让我们来看看Web前端的MVVM框架——KnockoutJs。 二、KnockoutJs是什么? 做.NET开发的人应该都知道…

IDEA常用设置【很实用】

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

【git下载安装与配置】

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

git 连接gitee时报错 Auth error: Access deined: authorize failure

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

C#多线程编程系列(五)- 使用任务并行库

目录 1.1 简介1.2 创建任务1.3 使用任务执行基本的操作1.4 组合任务1.5 将APM模式转换为任务1.6 将EAP模式转换为任务1.7 实现取消选项1.8 处理任务中的异常1.9 并行运行任务1.10 使用TaskScheduler配置任务执行参考书籍笔者水平有限,如果错误欢迎各位批评指正&…

【VSCode快捷键大合集】

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,欢迎🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &…

浅谈Vue.js的优势

写在前面 今天小梦跟小伙伴们简简单单聊一下Vue.js的优势。小梦也是刚刚接触Vue.js,在学习一门新的技术之前,我们当然要了解其优势,知道优势在哪更加有利于我们去学习并转换为自己的储备。 浅谈Vue.js的优势 首先Vue.js是一个轻巧、高性能、…

async await 的前世今生(Updated)

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了。但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug&…

MySQL八大约束

MySQL约束MySQL约束主键约束(primary key)自增长约束(auto_increment)非空约束(not null)唯一约束(unique)默认约束(default)零填充约束(zerofill)外键约束(foreign key)MySQL约束 概念 约束英文:constraint约束实际上就是表中数据的限制条件 作用 表在设计的时…

ASP.NET使用管道模型(PipleLines)处理HTTP请求

大多数人认为ASP.NET仅仅只是页面——使用模板来创建HTML页面然后返回给浏览器。但是这仅仅只是ASP.NET使用HTTP管道模型处理WEB程序很小的一方面。管道模型是类似于Web Services的一种在服务器端处理ASP.NET页面的框架技术。作为一名高级的ASP.NET的开发者,你必须清…

【LeetCode-SQL每日一练】——1.组合两个表

🎈写在前面 🙋‍♂️大家好呀,我是超梦梦梦梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好…

【LeetCode-SQL每日一练】——2. 第二高的薪水

🎈写在前面 🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL&am…

【LeetCode-SQL每日一练】—— 181. 超过经理收入的员工

🎈写在前面 🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL&am…

【windows环境——VSCode安装教程】

大家好呀!我是超梦,今天给小伙伴们带来一个最新版在windows环境的VSCode安装教程,话不多说我们开始吧。 VSCode安装下载与安装设置中文环境下载与安装 1. 第一步,进入官网,根据自己的电脑位数选择下载,小梦…

C#通用类Helper整理

★前言 最近下载了tita_chou在CSDN上传的一个资源,是在工作中整理的C#帮助类,里面包含了很多实用的类,想到我之前收集过自己用到少的可怜的类,心生敬意啊。当粗略的查看了那个资源,发现有一些是重复的,有一…

【LeetCode-SQL每日一练】—— 182. 查找重复的电子邮箱

🎈写在前面 🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟【数据库】打交道的,为了更好的操作数据库,我们的SQL【知识储备】是必不可少的。想要掌握…

【你会用代码画年兽吗】20行代码使用JS实现虎年春节倒计时 —— 红红火火过虎年

🍊前言 🍊哈喽小伙伴们好呀,我是超梦,大家可以叫我小梦~,马上就要过虎年春节啦,在新的一年里祝愿大家🐯身体健康,🐯平平安安,🐯虎气冲天&#xf…