资讯专栏INFORMATION COLUMN

设计模式1

reclay / 2898人阅读

摘要:模式是什么设计模式是在软件设计过程中针对特定问题的简洁而优雅的解决方案。模式的意义设计模式的意义是让人们写出可复用和可维护性高的程序。所有设计模式的实现都遵循一条原则,即找出程序中变化的地方,并将变化封装起来。

模式是什么

设计模式是:在软件设计过程中针对「特定」问题的「简洁而优雅」的解决方案。

在软件开发的历史中,沉淀了一些好的软件设计,而设计模式便是给这些好设计取了个名字。「好的设计」并不是某人发明的。一个稍有经验的程序员也许在不知不觉中数次使用过这些设计模式。

模式的意义

设计模式的意义是让人们写出可复用和可维护性高的程序。

举个例子,假设有一个空房间,我们要日复一日地往里面放一些东西。最简单的办法当然是把这些东西直接扔进去,但是时间久了,就会发现很难从这个房子里找到自己想要的东西,要调整某几样东西的位置也不容易。

所以在房间里做一些柜子也许是个更好的选择,虽然柜子会增加我们的成本,但它可以在维护阶段为我们带来好处。使用这些柜子存放东西的规则,或许就是一种模式。

所有设计模式的实现都遵循一条原则,即「找出程序中变化的地方,并将变化封装起来」。

一个程序的设计总是可以分为可变的部分和不变的部分。当我们找出可变的部分,并且把这些部分封装起来,那么剩下的就是不变和稳定的部分。这些不变和稳定的部分是非常容易复用的。

熟悉这些模式的程序员,对某些模式的理解也形成了条件反射,当合适的场景出现时,他们可以很快地找到某种模式作为解决方案。

我们主要学习以下模式:

单例模式

策略模式

代理模式

发布订阅模式

命令模式

状态模式

单例模式

单例模式的定义是:「保证仅有一个实例,并提供一个访问它的全局访问点」。

单列模式场景

单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如全局缓存、浏览器中的 window 对象等。

举个前端的例子,网页loading图(菊花图)。页面整个生命周期,我们只需要生成一个loading就好了。既简化了逻辑(不必去考虑多个请求打开了多个loading)又减少了dom的创建。

实现单例

javascript中,函数是一等公民,所以例子我都优先使用函数来实现(原书是以面向对象的形式展现)

function generateInstance() {
  return {
    say() {
      console.log("hello")
    }
  }
}

let single = (function() {
  let instance  // 哨兵变量
  return function getSingle() {
    if (!instance) {
    // 如果还没有生成实例,那么生成一个。
      instance = generateInstance()
    }
    return instance
  }
})()

let a = single()
let b = single()
console.log(a === b)  // true

以上就是一个单例的例子了。

我们利用闭包保存了一个哨兵变量,用来判断单例是否生成。

单例模式的优缺点
优点:

应用周期,只需实例化一次,对于生成实例开销大的情况,可以提高性能。

方便管理,确保的所有的引用都是同一个实例。

缺点:

实例储存在闭包,是无法销毁的。

范式

下面是一个生成单例的高阶函数。

var getSingle = function(fn) {
  var result
  return function() {
    return result || (result = fn.apply(this, arguments))
  }
}

// 用法
let singeName = getSingle(() => `hello ${Math.random()}`)
let a = singeName()
let b = singeName()
console.log(a === b) // true

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100684.html

相关文章

  • 设计模式1.绪论

    摘要:设计模式是一套被反复使用的多数人知晓的经过分类编目的代码设计经验的总结。使用设计模式是为了重用代码让代码更容易被他人理解保证代码可靠性。由此可见,其实设计模式就是从大型软件架构出发便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。 点击进入我的博客 1.1 设计模式概述 什么是设计模式 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。设计模式是一套被反复使用的、...

    bovenson 评论0 收藏0
  • php设计模式(1) 前言

    摘要:就像一群人完成某一项工作,不能一窝蜂全上,需要有组织有纪律,这个组织和纪律就是设计模式的概念。行为型设计模式用于在不同的对象之间管理算法关系以及职责结构型设计模式用于在不同的对象之间构造大的对象结构。 前言:php设计模式这个系列是基于我2012年的学习笔记,共11篇,结合近几年一些开发实践,也参考网上的一些高手的文章和视频,编辑整理而成,希望能给大家的帮助带来一些帮助。php设计模式...

    twohappy 评论0 收藏0
  • PHP设计模式范例 — DesignPatternsPHP(1)创建型设计模式

    摘要:抽象工厂目的创建一系列相关或依赖的对象,而不指定它们的具体类。这个模式是一个真正的设计模式,因为它遵循了依赖反转原则众所周知这个代表了真正的面向对象程序设计。 【搬运于GitHub开源项目DesignPatternsPHP】 项目地址:戳我 1、创建型设计模式 在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建适合程序上下文的对象,对象创建设计模式的产生是由于软件工程设计的问...

    lidashuang 评论0 收藏0
  • Python进阶:设计模式之迭代器模式

    摘要:抓住了迭代器模式的本质,即是迭代,赋予了它极高的地位。输出结果输出结果小结迭代器模式几乎是种设计模式中最常用的设计模式,本文主要介绍了是如何运用迭代器模式,并介绍了模块生成迭代器的种方法,以及种生成迭代器的内置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在软件开发领域中,人们经常会用到这一个概念——设...

    pubdreamcc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<