请选择 进入手机版 | 继续访问电脑版
切换皮肤
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F942e30a6p00q9yhph008fc000u000k6m.jpg

#前言
为什么要学习设计模式?迫切想提升自己,却找不到方向,整体梳理了一下知识体系,觉得还是从基础开始。设计模式不是看一遍就学会的,需要不断在编写、优化代码的过程中深入理解
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2Fff34e3d0p00q9yhph000ic000u000bam.jpg
设计模式的定义是:
“在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案”
通俗一点说,设计模式是在某种场合下对某个问题的一种解决方案。如果再通俗一点说,设计模式就是给面向对象软件开发中的一些好的设计取个名字
相信大家都听过三十六计,走为上策,意为败局已定,无可挽回,唯有退却,方是上策。在战场上,瞬息万变,统帅不可能和士兵慢慢的分析局势。一个跑字,简洁明了,能让士兵们直接领悟到统帅表达的意思。
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F36f328d2p00q9yhph000bc000md00cim.jpg
适合JavaScript的设计原则,对其他设计原则感兴趣的同学可以自行百度。
1 单一职责原则
功能要单一。一个对象(方法)只做一件事情。
2 最少知识原则
尽量减少对象之间的交互。如果两个对象之间不必彼此直接通信,那么这两个对象就不要发生直接的相互联系。
3 开闭原则
对扩展开放,对修改关闭。当需要改变一个程序的功能或者给这个程序增加新功能的时候,可以使用增加代码的方式,但是不允许改动程序的源代码。
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F5eabaa5cp00q9yhph000ic000u000bam.jpg
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F24ccf90cp00q9yhph000gc000cf00d6m.jpg
单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点
有一些对象往往只需要一个,例如vuex和redux中的store、购物车、登录弹出等等。
上面介绍的是单例模式的恶汉模式,还有一种懒汉模式,有兴趣的可以研究一下。
懒汉式:和懒加载一样,使用得时候去创建实例子(实例复杂的时候可以使用。)
饿汉式:生命周期开始的时候就创建实例(实例不复杂的时候可以,复杂的时候影响页面加载速度)。
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2Fbb36930ap00q9yhph007lc000u000qam.jpg
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2Fdba9c1d7p00q9yhph000gc000cf00d6m.jpg
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。
在生活中可以找到很多代理模式的场景。比如,你是一个导演,你肯定不会直接联系明星,而是联系明星的经纪人,由明星的经纪人来决定明星是否和你合作。
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2Fa9400b3ap00q9yhph00a1c000u000zwm.jpg
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2Fb4b1d149p00q9yhph000sc000rs00d4m.jpg
发布—订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
举个现实中的栗子,容易理解。去星巴克点咖啡,点好之后坐等被叫。
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F75043888p00q9yhph00dnc000qh01eam.jpg
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F1f6c85b7p00q9yhph000ic000g300d6m.jpg
适配器模式的作用是解决两个软件实体间的接口不兼容的问题。
现实中有很多栗子,比如,不同国家没有统一电源插座需要转换头。
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F4d0ce441p00q9yhph0065c000u000p9m.jpg
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F03ae234dp00q9yhph000gc000cf00d6m.jpg
策略模式的思想是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
我的理解是不同的逻辑分开处理,避免出现大量if...else或者switch...case。
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0507%2F867ec267p00q9yhph008oc000qh019pm.jpg
#总结
这里只是总结了一些常用的设计模式,后续还会持续更新,对设计模式有兴趣的可以读一读《JavaScript设计模式与开发实践》。

回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    Archiver|手机版|小黑屋|齐聚无忧 |网站地图

    Powered by Discuz! X3.4  © 2001-2013 Comsenz Inc.