如果觉得文章不错,欢迎关注、点赞和分享!
持续分享技术博文,关注微信公众号 👉🏻 前端LeBron
在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案 —— 设计模式
设计模式原则:“找出程序中变化的地方,并将变化封装起来”
为什么要学习设计模式?
从事开发岗位也有一年多的时间了,见识过陈年老项目,也从零到一搭建过一个项目。随着项目和业务的不断扩张,写下的代码如果没有进行设计,就渐渐变成了 emm … x 山,怎么写都不对劲,过段时间就想着重构。
人之所以可以走到食物链的顶端,是因为会学习、总结,会使用“名字”和“工具”。而设计模式并不是凭空发明出来的,是经过了大量的项目实践总结出来的对某种业务场景下的程序编写最佳实践,总结出来的解决方案,并给它取了个名字,就变成了一个设计模式。就好比篮球场上的战术,组织后卫常喊出打几号战术,而不是一个人一个人地指挥,简洁的代号往往比冗杂的描述更优雅。有可能你经常写程序的一种方式,可以描述出来,但不知道它叫什么名字,有可能就是一种设计模式。所以我们在学习的过程中,经常会有这种感受: ooooo !!这玩意儿我经常用,经常这么写,原来这个是 xx 模式!
最后,为什么要学设计模式呢?虽然有时候设计模式会使代码复杂度升高,增加开发的成本,但极大地降低了维护成本。就好比图书馆中的书如果无序地散落在各个角落,找起来如同大海捞针;而如果标号且归类、有序地放在指定书架上,找起来就容易了许多。想象一个场景,某天,你指着一段代码开始骂,这谁写的 x 山!鼠标移了上去, git 修改记录显示,哦!我写的,那没事了。赶紧设计模式学起来,优雅地编写简洁、可复用、易维护的程序 ~
单例模式
1、保证一个类仅有一个实例,并提供一个访问它的全局访问点
2、主要解决一个全局使用的类频繁地创建和销毁,占用内存
实现单例模式
实现一个简洁的单例模式并不复杂,无非就是将实例对象保存起来,下一次获取/创建对象的时候,直接返回之前创建的实例
最简单例模式
- 闭包实现
- ES6 实现
// 利用闭包实现
var Singleton = (function () {
var instance;
function Instance() {
}
return function () {
if (!instance) {
instance = new Instance();
}
return instance;
};
})();
var single1 = Singleton();
var single2 = Singleton();
console.log(single1 === single2); // true
// ES6实现
class Singleton {
constructor() {
if (!Singleton.instance) {
Singleton.instance = this;
}
return Singleton.instance;
}
}
const single1 = new Singleton();
const single2 = new Singleton();
console.log(single1 === single2); // true
惰性单例
惰性单例:初始化时不进行实例创建,到获取实例时才进行实例创建,类似前端的资源懒加载思想
// 非惰性单例
class Tool{
}
class SingleTon{
constructor (name,...args) {
this.name