当前位置: 首页 > news >正文

郑州做营销型网站建设兰州业之峰装饰公司

郑州做营销型网站建设,兰州业之峰装饰公司,沈阳seo建站,副业做网站程序模式有三种#xff1a;Architectural Pattern、Design Pattern、Coding Pattern#xff0c;即#xff1a;框架模式、设计模式、编程模式。本文主要讲解javascript中的设计模式#xff0c;好的设计模式能够提高代码的重用性#xff0c;可读性#xff0c;使代码更容易的维护…模式有三种Architectural Pattern、Design Pattern、Coding Pattern即框架模式、设计模式、编程模式。本文主要讲解javascript中的设计模式好的设计模式能够提高代码的重用性可读性使代码更容易的维护和扩展。本文适合有一点javascript基础对javascript的概念有所了解。 一、单例模式  单例模式是javascript中最常用的模式它是将自己的代码放在一个命名空间下这样的好处是可以减少使用全局变量在多人协同开发时也能避免命名冲突等问题。这样的好处是维护起来非常方便如下例 1 var m { 2 name: dog, 3 action: function() { 4 console.log(this.name); 5 } 6 }; 7 m.action();//调用   或者 1 var dog function() { 2 this.name dog; 3 this.action function() { 4 return console.log(this.name); 5 }; 6 action(); 7 }; 8 dog(); //调用   工厂模式 工厂模式就是将对象的方法创建交给外部对象这样的好处就是解决了对象之间的相互影响、即耦合避免了使用new来实例化对象有助于创建模块化的代码维护起来也方便。 工厂模式分为简单工厂模式和抽象工厂模式下面介绍简单工厂模式 1 var m {}; 2 m.action function() { 3 console.log(dog); 4 }; 5 var demo function() { 6 m.action(); 7 }; 8 demo()//调用   抽象工厂模式先设计一个抽象类这个类不能被实例化只能用来派生子类最后通过对子类的扩展实现工厂方法。如下 1 var f function() {};2 f.prototype {3 c: function() {4 throw new Error(can\t use this method);//如果调用此方法会报错因为它是用来派生子类不能实例化5 }6 };7 var e function() {8 f.call(this);9 } 10 e.prototype new f(); 11 e.prototype.constructor e; 12 e.prototype.c function() { 13 console.log(this method is redefine); 14 } 15 // 调用 16 var demo new e(); 17 demo.c();   桥接模式 桥接模式是将抽象与实现隔离一遍二者独立变化。在设计一个javascript API的时候它可以用来弱化类和对象之间的耦合。它还可以用来把多个类联接在一起。例如 1 var class1 function(a,b,c) {2 this.a a;3 this.b b;4 this.c c;5 };6 var class2 function(d) {7 this.d d;8 };9 var demo function(a,b,c,d) { 10 this.one new Class1(a,b,c); 11 this.two new Class2(d); 12 };   组合模式 组合模式可以用一条命令在多个对象上激发复杂的或递归的行为。好处是可以用同样的发放处理对象的集合与其中的特定子对象也可以用来把一批子对象组织成树形结构并且使整个树都可被遍历。如下 1 // DynamicGallery Class2   var DynamicGallery function (id) { // 实现CompositeGalleryItem组合对象类 3   this.children [];4   this.element document.createElement(div);5   this.element.id id;6   this.element.className dynamic-gallery;7   }8   DynamicGallery.prototype {9   // 实现Composite组合对象接口 10   add: function (child) { 11   this.children.push(child); 12   this.element.appendChild(child.getElement()); 13   }, 14   remove: function (child) { 15   for (var node, i 0; node this.getChild(i); i) { 16   if (node child) { 17   this.children.splice(i, 1); 18    break; 19   } 20   } 21   this.element.removeChild(child.getElement()); 22   }, 23   getChild: function (i) { 24   returnthis.children[i]; 25   }, 26   // 实现DynamicGallery组合对象接口 27   hide: function () { 28   for (var node, i 0; node this.getChild(i); i) { 29   node.hide(); 30   } 31   this.element.style.display none; 32   }, 33   show: function () { 34   this.element.style.display block; 35   for (var node, i 0; node getChild(i); i) { 36   node.show(); 37   } 38   }, 39   // 帮助方法 40   getElement: function () { 41   returnthis.element; 42   } 43   }   1 var GalleryImage function (src) { // 实现Composite和GalleryItem组合对象中所定义的方法 2   this.element document.createElement(img);3   this.element.className gallery-image;4   this.element.src src;5   }6   GalleryImage.prototype {7   // 实现Composite接口 8   // 这些是叶结点所以我们不用实现这些方法我们只需要定义即可 9   add: function () { }, 10   remove: function () { }, 11   getChild: function () { }, 12   // 实现GalleryItem接口 13   hide: function () { 14   this.element.style.display none; 15   }, 16   show: function () { 17   this.element.style.display ; 18   }, 19   // 帮助方法 20   getElement: function () { 21   returnthis.element; 22   } 23   } 1 var topGallery new DynamicGallery(top-gallery); 2   topGallery.add(new GalleryImage(/img/image-1.jpg)); 3   topGallery.add(new GalleryImage(/img/image-2.jpg)); 4   topGallery.add(new GalleryImage(/img/image-3.jpg)); 5   var vacationPhotos new DyamicGallery(vacation-photos); 6   for(var i 0, i 30; i){ 7     vacationPhotos.add(new GalleryImage(/img/vac/image- i .jpg)); 8   } 9   topGallery.add(vacationPhotos); 10   topGallery.show(); 11   vacationPhotos.hide();   门面模式 门面模式常常是开发人员最亲密的朋友他几乎是所有javascript库的核心原则。门面模式有两个作用一是简化类的接口二是消除类与使用它的客户代码之间的耦合。示例如下 1 function a() {2 3 }4 function b() {5 6 }7 function ab() {8 a();9 b(); 10 }   适配器模式 适配器模式可以用来在现有接口和不兼容的类之间进行适配。从表面上看适配器模式很像门面模式都对别的对象进行包装并改变其呈现的接口。二者的区别在与它们如何改变接口门面元素展现的是一个简化的接口它并不提供额外的选择而且有时为了方便完成常见任务它还会做出一些假定。而适配器则要把一个接口转换为另一个接口它并不会过滤某些能力也不会简化接口。 1 var str {2 a: a,3 b: b,4 c: c5 };6 function i(s1,s2,s3) {7 console.log(s1 , s2 , s3);8 }9 function demo(o) { 10 i(o.a,o.b,o.c); 11 }   装饰者模式 装饰者模式可用来透明地把对象包装在具有同样接口的另一个对象之中装饰者可以用于为对象添加功能可以用来代替大量子类。装饰者模式和组合模式有很多共同点它们都与所包装的对象实现统一的接口并且会把任何方法条用传递给这些对象。可是组合模式用于把众多子对象组织为一个整体而装饰者模式用于在不修改现有对象或从派生子类的前提下为其添加方法。如下 1 var m {}; 2 m.child {}; 3 m.child.one function() {}; 4 m.child.two function() {};    享元模式  享元模式最适合于解决因创建大量类似对象而累及性能的问题。通过把大量独立对象转化为少量共享对象可以降低运行web应用程序所需的资源数量。 javascript设计模式中的示例 1 //汽车登记示例2   var Car function(make,model,year,owner,tag,renewDate){3     this.makemake;4     this.modelmodel;5     this.yearyear;6     this.ownerowner;7     this.tagtag;8     this.renewDaterenewDate;9   } 10   Car.prototype { 11     getMake:function(){ 12       returnthis.make; 13     }, 14     getModel:function(){ 15       returnthis.model; 16     }, 17     getYear:function(){ 18       returnthis.year; 19     }, 20     transferOwner:function(owner,tag,renewDate){ 21       this.ownerowner; 22       this.tagtag; 23       this.renewDaterenewDate; 24     }, 25     renewRegistration:function(renewDate){ 26       this.renewDaterenewDate; 27     } 28   } 29   //数据量小到没多大的影响数据量大的时候对计算机内存会产生压力下面介绍享元模式优化后 30   //包含核心数据的Car类 31   var Carfunction(make,model,year){ 32     this.makemake; 33     this.modelmodel; 34     this.yearyear; 35   } 36   Car.prototype{ 37     getMake:function(){ 38       returnthis.make; 39     }, 40     getModel:function(){ 41       returnthis.model; 42     }, 43     getYear:function(){ 44       returnthis.year; 45     } 46   } 47   //中间对象用来实例化Car类 48   var CarFactory(function(){ 49     var createdCars {}; 50     return { 51       createCar:function(make,model,year){ 52         var carcreatedCars[make-model-year]; 53         return car ? car : createdCars[make - model - year] (new Car(make,model,year)); 54       } 55     } 56   })(); 57   //数据工厂用来处理Car的实例化和整合附加数据 58   var CarRecordManager (function() { 59     var carRecordDatabase {}; 60     return { 61       addCarRecord:function(make,model,year,owner,tag,renewDate){ 62         var car CarFactory.createCar(make, model, year); 63         carRecordDatabase[tag]{ 64           owner:owner, 65           tag:tag, 66           renewDate:renewDate, 67           car:car 68       } 69     }, 70       transferOwnership:function(tag, newOwner, newTag, newRenewDate){ 71         var recordcarRecordDatabase[tag]; 72         record.owner newOwner; 73         record.tag newTag; 74         record.renewDate newRenewDate; 75       }, 76       renewRegistration:function(tag,newRenewDate){ 77         carRecordDatabase[tag].renewDatenewRenewDate; 78       }, 79       getCarInfo:function(tag){ 80         return carRecordDatabase[tag]; 81       } 82     } 83   })();   代理模式 代理是一个对象它可以用来控制对另一个对象的访问。它与另外那个对象实现了同样的接口并且会把任何方法调用传递给那个对象。代理模式适合处理实例化比较费时的本体也适合处理那些需要较长时间才能把数据载入用户界面的类。 javascript设计模式中的示例 1 var Publication new Interface(Publication, [getIsbn, setIsbn, getTitle, setTitle, getAuthor, setAuthor, display]);2   var Book function(isbn, title, author) {3    //...4   } 5   // implements Publication6   implements(Book,Publication);7 8   /* Library interface. */9   var Library new Interface(Library, [findBooks, checkoutBook, returnBook]); 10 11   /* PublicLibrary class. */ 12   var PublicLibrary function(books) { 13    //... 14   }; 15   // implements Library 16   implements(PublicLibrary,Library); 17 18   PublicLibrary.prototype { 19    findBooks: function(searchString) { 20    //... 21   }, 22   checkoutBook: function(book) { 23    //... 24    }, 25   returnBook: function(book) { 26    //... 27    } 28   }; 29 30   /* PublicLibraryProxy class, a useless proxy. */ 31   var PublicLibraryProxy function(catalog) { 32    this.library new PublicLibrary(catalog); 33   }; 34   // implements Library 35   implements(PublicLibraryProxy,Library); 36 37   PublicLibraryProxy.prototype { 38    findBooks: function(searchString) { 39    returnthis.library.findBooks(searchString); 40   }, 41   checkoutBook: function(book) { 42    returnthis.library.checkoutBook(book); 43    }, 44    returnBook: function(book) { 45    returnthis.library.returnBook(book); 46    } 47   };   观察者模式 观察者模式是一种管理人与其任务之间的关系的得力工具。观察者模式中存在两个角色:观察者和被观察者。这种模式的好处是你可以对程序中某个对象的状态进行观察并且在其发生改变时能够得到通知。 1   var f1 function(){2   //code3   }4   var f2 function(){5   //code6   }7   addEvent(element,click,f1)8   addEvent(element,click,f2)9 10 11   element.onclick f1; 12   element.onclick f2;   命令模式 命令模式可以用来对方法调用进行参数化处理和传送经这样处理过的方法调用可以在任何需要的时候执行。好处是可以用来消除调用操作的对象和实现操作的对象之间的耦合使对象间的互动方式更高的模块化。这为各种具体的类更换带来了极大的灵活性。 1 car Calculator{2   add:function(x,y){3    return xy;4   },5   substract:function(x,y){6    return x-y;7   },8   multiply:function(x,y){9    return x*y; 10   }, 11   divide:function(x,y){ 12    return x/y; 13   } 14   } 15   Calculator.calc function(command){ 16   return Calculator[command.type](command.op1,command.opd2) 17   }; 18   Calculator.calc({type:add,op1:1,op2:1}); 19   Calculator.calc({type:substract,op1:5,op2:2}); 20   Calculator.calc({type:multiply,op1:5,op2:2}); 21   Calculator.calc({type:divide,op1:8,op2:4});   职责链模式 职责链模式是通过实现一个由隐式地请求进行处理对象组成的链而做到的。可以用来消除请求的发送者和接收者之间的耦合 javascript内部就使用了这种模式来处理事件捕获和冒泡的问题。 职责链由多个不同类型的对象组成发送者是发出请求的对象而接收者则是接收请求并且对其进行处理或传递的对象请求本身有时也是一个对象它封装着与操作有关的所有数据。其典型的流程大致是 发送者知道链中第一个接收者它向这个接收者发出请求。每一个接收者都对请求进行分析然后要么处理它要么将其往下传。每一个接收者知道的其他对象只有一个即它在链中的下家。如果没有任何接收者处理请求那么请求将从链上离开不同的实现对此也有不同的反应一般会抛出一个错误。小结   每种模式都有自己的优点选择一种适合自己业务的模式非常重要能够提高代码的可读性、可维护性等等希望本文能够对你有所帮助。   本文参考电子书《javascript设计模式》  转载于:https://www.cnblogs.com/xiyangbaixue/p/3902699.html
http://www.huolong8.cn/news/307020/

相关文章:

  • 万众城网站建设小米网络营销案例分析
  • 关于手机的网站有哪些内容吗潍坊专业网站制作公司营销
  • 北京网站建设91086武进做网站的公司
  • 湖南网站开发公司电话上海公司注册流程及费用标准
  • 英文网站建设服务合同企业做网站都需要准备哪些材料
  • 室内设计网站配色app深圳品牌公寓
  • 网站单页seo网站须知
  • 做地方门户网站的排名wordpress hook 数据库
  • 网站后台在哪里大都会app支持城市
  • 免费做网站的网址有哪些免费开网站
  • 做网站还是小程序承德名城建设集团网站
  • 保险购买网站宁波建网站模板
  • 电子商务网站建设体会在本地服务器上建设网站的步骤
  • 摄影网站的设计wordpress加漂浮广告
  • 西安微官网自助建站公司网站建设 淘宝客末班
  • 做照片相册最好的网站网站运营需要 做哪些工作
  • 网站建设什么代码最简单wordpress 社交登陆
  • 自己做网站咋做网站地图 seo
  • 免费网站现在是怎么了做网站的皮包公司
  • 网站备案要幕布自媒体平台账号注册
  • 企业网站建设背景安徽省建筑人员信息网
  • pc网站自动生成app制作电子印章
  • 哪个浏览器任何网站都可以访问wordpress显示网站在线人数
  • 做产品推广什么网站会比较好pc手机模板网站建设
  • 常见的有利于seo的网站系统wordpress网站数据迁移
  • 马鞍山网站建设制作公司如今做那些网站能致富
  • 长春网站开发做视频网站审核编辑有假么
  • seo在线网站推广五里桥街道网站建设
  • 阿里企业邮箱登录seo查询网址
  • 网站建设搭建是什么意思北京做微信网站