设计模式「策略模式」
背景 在现实生活中,存在实现一个目标有多种策略可供选择的情况,比如:出门旅行的多种目的地、乘车方式等;超市打折促销的方式;吃饭做菜时,土豆丝的多种做法等; 在软件开发过程中也会遇到此类问题(模式),当实现某个功能存在多种策略时,我们根据环境(Context)的不同,选择指定的策略。比如进行排序,有冒泡排序、选择排序、插入排序、二叉树排序等。 反例介绍 当代码中存在根据环境进行多重if-else……
背景 在现实生活中,存在实现一个目标有多种策略可供选择的情况,比如:出门旅行的多种目的地、乘车方式等;超市打折促销的方式;吃饭做菜时,土豆丝的多种做法等; 在软件开发过程中也会遇到此类问题(模式),当实现某个功能存在多种策略时,我们根据环境(Context)的不同,选择指定的策略。比如进行排序,有冒泡排序、选择排序、插入排序、二叉树排序等。 反例介绍 当代码中存在根据环境进行多重if-else……
CommonJS 和 AMD 模块都只能在运行时才能确定模块导出的对象。因此运行时才能得到整个对象,也就无法做到静态优化。而 ES6 从语法层面支持模块功能,其设计初衷就是就是尽量的静态化,使得代码在编译时就能确定模块的依赖关系。 ES6 关于 Module 的介绍参考阮一峰的 ES6 教程:ECMAScript 6 入门-Module 的语法。下面是平时用到比较少的部分,使用时应该注意的地方。 ES6 模块使用时的注意点 模块转发时,当前模块不能使用转发的变量 default……
这篇文章总结 class 相关,并辐射出周边需要了解的知识点,便于形成巩固自己的心理表征。 如何编写一个类? 在 ES6 还没出来之前,前端在编写 class 时,相比去其他设计成熟的语言会显得很诡异,比如使用 JS 原生的方式实现一个类继承,这个我在之前的文章中有说明。 第六章 面相对象的程序设计(简单实现一个最理想的继承范式?) 第六章 面相对象的程序设计(new 操作符执行的过程?) 下面是 UML 说明: 传统的基于原型的实现: ES6 出来之后,关于 class……