设计模式
文章平均质量分 91
theanarkh
这个作者很懒,什么都没留下…
展开
-
简单的命令行模式
命令模式主要对操作和具体的实现进行解耦。我们只需告诉系统我们需要什么操作,而不关心具体是怎么怎么实现了这个操作。这样当我们需要修改对外的接口时也不会影响用户的功能。-->var sqlOperation={id:0,//数据唯一索引db:{},//数据存储对象argumentsConfig:{select:1,add:1,delete:1原创 2016-05-28 01:14:59 · 738 阅读 · 0 评论 -
享元模式
享元模式主要是分析应用程序的数据,分出可共享的部分和不可共享的部分,对于可共享的部分,我们可以放到一个地方单独维护。让多个对象共享,其他的数据则每个对象自己维护。//学生可共享的信息function infoShare(student,schoolName) {this.identity = student;this.schoolName = schoolName; }原创 2016-09-19 18:25:35 · 342 阅读 · 0 评论 -
代理模式
代理模式主要利用代理,代理持有其他多方的对象,然后负责多个对象的通信和联系。function a() {this.talk = function() {console.log('hello b i am sorry');}}function b() {this.talk = function() {console.log('hello a i am so原创 2016-09-19 19:34:28 · 262 阅读 · 0 评论 -
原型模式
原型模式主要是为了代码重用。问题在于在子类的指针指向父类的可重用数据时,应该怎么处理,因为共享意味着互相影响。子类修改了共享的数据,也会影响父类。所以这里需要用一个中间的,空白的函数作中继。这样不仅可以重用父类的代码和数据,还可以重写父类的的数据和方法而不影响父类。function Parent(name){ this.name = name;}Parent.prot原创 2016-09-20 18:27:00 · 357 阅读 · 0 评论 -
访问者模式
访问者模式一般来说是把多种类型对象的共同操作抽象起来,放到一个函数里,然后以对象为参数,在函数里统一执行操作。类似于c++的多态,以子类指针或者引用为函数参数,然后根据传进来的对象类型,执行他所对应的方法。这个前提是,多个对象都具有相同的操作,但是不同的对象具体执行的代码可以不同。而在js里,是弱类型的,只要某个对象具有相应的方法就能被执行,这个传入的对象可以是函数参数或者this,c++里传入的原创 2016-09-30 16:19:06 · 349 阅读 · 0 评论 -
js实现中介者模式
中介者模式主要用于一个系统中存在大量的对象,而且这些大量的对象需要互相通信,因为两个对象需要通信,一个对象必须要持有另一个对象,这样就会导致,系统里,每个对象都互相引用,会引起混乱,中介者把所有的对象都统一管理起来,其他的对象通过中介者去和别的对象通信。function A(mediator) { this.mediator = mediator;}A.prototype = {原创 2017-02-12 13:57:54 · 1198 阅读 · 0 评论 -
js实现一个粗略的四则运算解释器
这样的一个解释器几乎没用,不过只是为了学习一下解释器的知识,有空继续学习。function Context(map) { this.map = map;}Context.prototype.getContext = function() { return this.map;}var context;function AbstractExpression() {}AbstractE原创 2017-09-03 21:22:40 · 619 阅读 · 0 评论 -
js设计模式之Facade
原始实现获取用户信息的代码function getUserName() { return 'name';}function getUserAge() { return 'age';}var userName = getUserName();var userAge = getUserAge();console.log(userName,userAge);使用Facade模式实现原创 2017-09-02 01:48:32 · 315 阅读 · 0 评论 -
使用babel深入理解es7的decorator
es7提出了decorator的语法,让我们能写出更优雅更好维护的代码,装饰器的本质是对现有的功能进行包装,可以用来加钩子或者增强功能等,js从语法层面支持这种写法,让我们可以保持代码解耦。 比如我们有一个函数 funciton update() { console.log('update db')}我们想在执行这个函数时打日志,我们可能会这样改写funciton update()原创 2017-12-23 18:38:24 · 4475 阅读 · 2 评论