设计模式(通往高手之路的必备技能)

简介: ‘从大处着眼,从小处着手’,以前对这句话一知半解,自从踏出校门走入社会,开始工作以来,有了越来越深的理解,偶有发现这句话用在程序开发中也有用,所以,近段时间开始尝试着分析jQuery源码,分析angularjs源码,学习设计模式。

‘从大处着眼,从小处着手’,以前对这句话一知半解,自从踏出校门走入社会,开始工作以来,有了越来越深的理解,偶有发现这句话用在程序开发中也有用,所以,近段时间开始尝试着分析jQuery源码,分析angularjs源码,学习设计模式。

设计模式的由来

看过GOF的总结的23种设计模式的人,都或多或少的有种似曾相识的感觉,事实确实如此,这些设计模式原来就有,是前人优秀的工作成果,只不过是GOF他们给这些原本就有的东西重新定义了一下,给予这些东西名称和原理,使之更容易被人理解和接受,这本身就体现了GOF的伟大,让好的东西更容易传播。

设计模式的定义

在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。

如何学习设计模式

设计模式也并不是什么洪水猛兽,高不可攀,一个有一定经验的软件开发者都会在不知不觉中使用它,这可能中间经历了很多的尝试,当他看过设计模式后,会发现原来已经有人对它进行过总结。

使用设计模式实现的代码,使用一般的方法都能实现,所以使用设计模式,会无形中增加代码的量,尤其是不正确的使用,更会带来毁灭性的灾难,所以,一般的开发人员唯恐避之不及。

理解‘可复用的面向对象软件基础’

设计模式的实现都遵循一条原则‘找出程序中变化的地方,并将它封装起来’。在程序设计中总分为可变的地方和不可变的地方,可变的地方我们往往将他封装起来,不可变的地方也即是代码稳定和不可变的部分的,往往这部分代码是可复用的。这也是标题《可复用的面向对象软件基础》的由来。

好了,废话不多说,下面进入常见的设计模式学习。

如何分辨设计模式

有时侯我们经常会遇到这样的问题,许多设计模式的实现看起来几乎一模一样,比如:代理模式和装饰者模式,策略模式和状态模式。

你不仅会大声问,他们有什么区别呢?

其实,从代码结构上看并没什么区别,就像一把手枪,你拿它来杀人,它就是凶器,你拿它来救人它就是武器。跟你的用途有关系,其实最根本的是你的意图。所以,在学习设计模式的时候,不要在在意代码的结构形式,要多留意模式的使用场景,在这种场景下解决了什么问题,多进行对比(使用前,使用后有何差别)。

重新审视JavaScript设计模式

JavaScript从开始被人当成为一种玩具语言,到后来发展为一门流行的可靠的语言。人们从开发做一些简单的交互,到后来Google做的第一个邮件系统,再到后来Google推出的angular框架的出现,js的威力在被人们认识的同时,伴随着浏览器支持js做更多的东西,与此同时它也变得痈肿起来,框架间各种复杂的依赖甚至能让你崩溃。随着ES6, TypeScript, CoffeScript 等各种转编译语言的兴起,无疑给前端开发者带来了不小的学习压力。像React,vue,angular这些当下流行的框架,大家都知道一些,但是要说有深入研究,不见得有多少人。17年年底我发现各个公司的在招人时,对开发人员的要求越来越高,要知道这些框架的原理,要知道某些具体的功能如何实现,同时对于设计模式的考察也越来越突出。所以,基于开发语言的使用环境,以及工作面试需要,我们不得不认真对待JavaScript常见的设计模式。

从前由于使用的局限性,和做的应用相对简单,js不被重视,js就更谈不上设计模式的问题。虽然,现在JavaScript被开发人员越来越重视,但是JavaScript设计模式的讨论还不是那么活跃,有研究和见地的还是少数人,但是研究过源码的同学就会知道,在vue,angular种设计模式已经相当普遍。

作为一个励志成为前端小牛的我,现在也甚是心痒。

目录

‘大处着眼,小处着手’——设计模式系列

注:这是我个人对设计模式的认识和理解,仅代表个人观点个看法,不足之处欢迎大家指正,随着认识的加深这篇文章(包括设计模式其他系列文章)会不断地进行更新。

javascript 设计模式

面向对象的JavaScript

构造器 设计模式

外观 设计模式

工厂 设计模式

观察者 设计模式

单例 设计模式

持续更新中...

参考资料

学习JavaScript设计模式

腾讯全端 AlloyTeam 设计模式系列文章

JavaScript设计模式与开发实践

其它设计模式相关文章请转‘大处着眼,小处着手’——设计模式系列

相关文章
|
4月前
|
机器学习/深度学习 设计模式 SQL
编程之路上的飞跃:那些让我技能显著提升的关键概念与技术
编程之路上的飞跃:那些让我技能显著提升的关键概念与技术
54 10
|
1月前
|
设计模式 算法 开发者
后端开发中的设计模式探索之旅
【8月更文挑战第21天】设计模式是解决常见问题的优雅方案,它们在软件开发中扮演着至关重要的角色。本文将带你走进后端开发的世界,探索设计模式如何影响代码结构、提升可维护性与扩展性,并分享一些实用的设计模式案例。通过深入浅出的方式,我们将一起理解设计模式背后的哲学和它们在日常开发工作中的应用价值。
|
1月前
|
机器学习/深度学习 人工智能 测试技术
软件测试的艺术:从基础到进阶的探索之旅
在数字时代的浪潮中,软件测试作为确保产品质量的重要环节,其重要性不言而喻。本文将通过一系列生动的案例和深入的分析,探讨软件测试的核心概念、方法以及发展趋势,旨在为读者提供一条从入门到精通的软件测试之路。我们将一起见证,如何通过系统化的测试策略和方法,将潜在的风险转化为产品的优势,确保软件在快速迭代的同时,依旧保持高质量标准。
|
1月前
|
机器学习/深度学习 设计模式 开发框架
编程之舞:技术感悟与实践
在数字世界的舞台上,编程不仅是技术的展示,更是一种艺术的体现。本文将通过个人的技术旅程,探讨如何将编程从一项技能转变为一种创造性的实践。我们将一起探索代码背后的哲学,学习如何在解决复杂问题时保持创新和灵活性,并讨论持续学习的重要性以及它如何塑造我们的技术之路。
|
3月前
|
设计模式 开发者
设计模式:软件工程的永恒话题
【6月更文挑战第10天】设计模式是软件工程中解决常见问题的最佳实践,分为创建型、结构型和行为型三大类。它们提升代码质量、可维护性,促进团队协作。识别问题场景,选择合适模式并实现,验证优化是应用设计模式的关键步骤。学习与应用设计模式能助开发者成为更优秀的工程师。
|
3月前
|
设计模式 C#
技术经验分享:C#设计模式
技术经验分享:C#设计模式
19 0
|
4月前
|
人工智能 算法 数据处理
代码之禅:从技术实践中领悟软件开发的艺术
【5月更文挑战第27天】 在数字世界的迷宫中,每一行代码都如同艺术家的笔触,描绘出千变万化的技术图景。本文将探讨软件开发的艺术性和技术性如何交织在一起,通过个人的技术实践和感悟,阐述如何在编码的过程中寻找到创造力与逻辑力的平衡点。我们将一起走进那些看似平凡却蕴含深意的编程实践,探索它们背后隐藏的智慧与哲学。
|
4月前
|
程序员 UED 开发者
代码之禅:技术感悟与软件开发艺术
【4月更文挑战第30天】 在数字化的浪潮中,我们如同编织网络的蜘蛛,用代码构建起一个又一个世界。本文将深入探讨软件开发的艺术与实践,从编程哲学到技术实现,揭示那些隐藏在键盘敲击背后的智慧。我们将穿越技术的迷宫,探索如何将冷冰冰的代码转化为生动的故事,如何在逻辑的严密性与创意的自由间找到平衡点。这不仅是对编程语言的深刻理解,更是对软件开发过程中持续学习、适应和创新的一次思考。
|
4月前
|
设计模式 缓存 算法
探索设计模式的魅力:创新思维与面试中的设计模式问题(超详细38题3万8字参考答案)
设计模式是在软件设计中经常出现的问题的解决方案。它是由经验丰富的开发人员在解决常见设计问题时总结出来的一套通用的解决方案,是一种对反复出现的设计问题的可重用的抽象描述。设计模式可以用于高质量的软件开发,它在软件开发过程中提供了一种复用可扩展性简化代码维护等方面的解决方案。设计模式通常包括以下几个要素:用来描述问题、解决方案和效果的简洁术语。描述了在何时使用该模式以及问题的背景和条件。
123 0
|
设计模式 算法 前端开发
软件开发常见的一些设计模式,留着供自己研究和面试使用
说到软件开发,就不得不提到设计模式,比如大家基本上都用过什么MVC框架开发各种系统,一些好的设计模式不仅能让软件运行的更为流畅,更能让开发人员的工作效率大大提高。本文就来列举一些常用的设计模式,供大家参考收藏。
118 1