js原生之设计模式开篇介绍
本文主要讲述一下,什么是设计模式(Design pattern),作为敲键盘的我们要如何学习设计模式。设计模式真的是一把万能钥匙么?
Erich
Gamma等人在上世纪90年代从建筑设计领域引入到计算机科学的(很难想象到底有多大关联)。它是对软件设计中一些反复出现,普遍存在的问题所提出的解
决方案。所以说设计模式并不是某种语言的某块代码,设计模式是一种思想,提供给在编码时候遇到的各种问题是可以采取的解决方案,更倾向于一种逻辑思维,而
不是万能代码块。
设计模式的四要素
23种设计模式
设计模式描述
抽象工厂模式(Abstract Factory)
工厂方法模式(Factory Method)
建造者模式(Builder)
适配器模式(Adapter)
桥接模式(Bridge)
职责链模式(Chain of Responsibility)
命令模式(Command)
组合模式(Composite)
装饰者模式(Decorator)
外观模式(Facade 门面模式)
享元模式(Flyweight)
享元模式以共享的方式高效的支持大量细粒度对象。共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部不会随环境的改变而有所不同。外蕴状态就是
随环境的改变而变化的。两者相互独立互不影响。将可以共享的状态和非共享的状态从常规类里面区分出来。客户不可以直接创建共享对象,应当使用一个工厂对象
负责创建共享的对象。享元模式可以大幅度的降低内存中对象的数量。
解析器模式(Interpreter)
给定一个语言后,解析器模式可以定义出其文法的表示,并提供一个解析器。客户端可以使用这个解析器来解析该语言中的语句。解析器模式将描述怎样再有了一个
简单的文法后使用模式设计解析这些语句。该语言是指任何解析器对象能够解释的任何组合。在解析器模式中需要定义一个代表文法的命令类的等级结构,每一个命
令都有一个对应的解释。
迭代器模式(Iterator)
迭代器模式可以顺序访问一个聚集中的元素而不必暴露内部表象。多个对象聚集在一起形成的整体称之为聚集,聚集对象则是包含一组对象的容器。迭代模式将迭代
逻辑封装到一个独立的对象中,与本身的聚集对象分离开来。迭代模式简化了聚集的逻辑思想,将行为独立分割开来方便调整修改替换。所以迭代算法可以独立于聚
集对象进行变化。
中介者模式(Mediator)
中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互有明显的联系。使耦合变得松散。当某些对象发生改变的时候也不会影响其他的对象之间的作
用,保证各个对象之间的作用相互独立,这边并不是对象与对象之间,而是作用与作用之间的联系变得独立开。中介者模式将多对多的相互作用转化为一对多的相互
作用,将对象的行为和协作抽象画,把对象的一些小行为与其他对象的相互作用分开处理。
备忘录模式(Memento)
观察者模式(Observer)
原型模式(Prototype)
代理模式(proxy)
代理模式给某一个对象提供一个代理对象,并由代理对象控制对象源对象的引用。在某些情况下客户不想活着不能够直接引用一个人对象,代理对象在客户和目标对
象中起到中介者的作用,代理对象可以仅仅只有一个被代理的接口,这时候代理对象不能创建被代理的对象,被代理的对象必须由系统的其他角色代为创建和传入。
单例模式(Singleton)
状态模式(state)
状态模式允许一个对象在其内部状态改变的时候改变行为。使得看上去和改变了类是一样的。状态模式将所研究的对象的行为包装在不同的对象里,每一个状态都属
于一个抽象状态类的一个子类。状态模式需要对每一个系统可能取得的状态创建一个状态类的子类。当系统的状态发生变化的时候,系统便改变所选的子类。
策略模式(Strategy)
策略模式针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响客户端的情况下发生变化。将
行为与环境分开。环境类负责维持和查询行为类,各个算法在具体的策略类中提供。所以算法的增减不会影响环境和客户端。
模板方法模式(Template Method)
访问者模式(Visitor)
访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦操作需要做修改,接受设个操作的数据结构可以保持不变。适用于数据结构相对未定的系
统,将数据结构和作用于结构上的操作耦合解脱开使得操作可以相对自由的演化。访问者模式使得增加新的操作变得更为容易。访问者模式将有关的行为集中到一个
访问者对象中,而不是分散在一个个环节节点中。当使用访问者模式的时候要将尽可能多的对象浏览逻辑放在访问者类中,而不是子类中。
来自维基百科(很是一个好东西)与百度百科,网上各方面博客以及自己的部分观点,很多地方都未作修改,BUT 纯手工码字。
很多东西,你写一遍,你会懂得很多,这是个人十分相信的一个观点。与大家共勉。接下来会学习各大设计模式,并且应用到 JS 上进行实现)
js原生之设计模式开篇介绍的更多相关文章
- React与ES6(一)开篇介绍
React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...
- JS原生Ajax&Jquery的Ajax技术&Json
1.介绍Ajax Ajax = 异步 JavaScript 和 XML Ajax是一种创建快速动态网页的技术 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以不用整个 ...
- Vue.js是什么,vue介绍
Vue.js是什么,vue介绍 Vue.js 是什么Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用. ...
- JS原生ajax
原文链接:http://caibaojian.com/ajax-jsonp.html 一.JS原生ajax ajax:一种请求数据的方式,不需要刷新整个页面: ajax的技术核心是 XMLHttpRe ...
- js原生高逼格插件
如何定义一个高逼格的原生JS插件 作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高 ...
- js原生代码实现轮播图案例
一.轮播图是现在网站网页上最常见的效果之一,对于轮播图的功能,要求不同,效果也不同! 我们见过很多通过不同的方式,实现这一效果,但是有很多比较麻烦,而且不容易理解,兼容性也不好. 在这里分享一下,用j ...
- ABP理论学习之开篇介绍
返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...
- JS原生效果瀑布流布局的实现(一)
JS原生效果 实现: HTML页面布局: <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu ...
- 工作当中实际运用(3)——js原生实现鼠标点击弹出div层 在点击隐藏
function onmou(){ var divs=document.getElementById('kefuDV');//获取到你要操作的div if (divs.style.display==& ...
随机推荐
- java中把list列表转为arrayList以及arraylist数组截取的简单方法
java中把list列表转为arrayList以及arraylist数组截取的简单方法 package xiaobai; import java.util.ArrayList; import java ...
- 2016大连网络赛 Sparse Graph
Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) P ...
- FIFO 和 LRU 调度算法
在一个采用页式虚拟存储管理的系统中(字地址序列.页号.块号均从零开始编址),有一用户作业,它依次要访问的字地址序列是:15,128,300,388,246,402,223,142,360,267,若该 ...
- mysql Explain 性能分析关键字
EXPLAIN 输出格式select_typetabletypepossible_keyskeykey_lenrowsExtra MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT ...
- PAT1009
多项式乘法 和多项式加法类似,参考之前多项式加法的代码改改就出来了. 主要是注意一下.最大次数应该会有1000000,然后按照乘法规则来,分配率就没有问题 #include<cstdio> ...
- sql语句之字符串匹配like
sql没有正则表达式,只能使用like 语法 match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ] 参数 match_ex ...
- sqlite manager
http://www.isummation.com/blog/how-to-use-sqlite-manager-extension-in-firefox/ 工具条上右键选定制
- ural1090 In the Army Now
In the Army Now Time limit: 1.0 secondMemory limit: 64 MB The sergeant ordered that all the recruits ...
- w3school之JavaScript学习笔记
在前端测试过程中,少不了听到开发说到JS,JS在webJavaScript 是浏览器脚本语言(简称JS),主要用来向HTML页面添加交互行为. 学习网址:http://www.w3school.com ...
- The 2014 ACM-ICPC Asia Mudanjiang Regional
继续复盘之前的Regional......出题者说这一套题太简单,对当时没有AK很不满......真是醉了,弱校没法活了 [A]签到题 [B]树结构,树的中心 [C]-_-/// [D]概率DP [E ...