javascript的设计模式(一)———— 多态

从事前端有两年的时间了,一直觉得自己只致力于实践而忽视了理论上的知识,所以现在想边看《javascript设计模式与开发实践》这本书的同时边记录下自己的学习与理解。刚开始写自己的博文,嗯。。。不怎么会组织文字。。。还是快点开始正文吧^^

正文

What is 设计模式?

设计模式其主要思想就是面向对象编程,即不在乎你是谁(is-A),而在于你可以做什么(Has-A)。就像你不必知道电视机里面有些什么、怎么焊接。。。你只要使用发明者提供给你的按钮或遥控器来使用它,就ok了。

多态

设计模式主要是使用封装、继承、多态、组合等技术实现,而对象多态性的概念是其重要的基本编程思想。

what is 多态?

多态,其根本就是将过程化的条件语句变成对象的多种状态设定。举个栗子:

var person1 = function(){};

var person2 = function(){};

var showName = function(person){
  if(person instanceof person1){
    console.log('小明');
  }else if(person instanceof person2){
    console.log('小红');
  }
}

showName(new person1); //小明
showName(new person2); //小红

从上面的代码可以看到,我们通过if...else if语句判断是哪个人,再打印出他相对应的名字。那么当需要增添其他人的时候,我们就需要修改showName方法,或许你也觉得这没什么,但是当我们还有showAge、showSex等等的方法的时候,每增添多一个人就需要同时修改N多的方法,这样并不利于代码的维护性,也增加了自己的工作量。

那就来看看利用对象多态特性的写法吧

var person1 = function(){
  this.name = '小明';
};

var person2 = function(){
  this.name = '小红';
};

var showName = function(person){
  console.log(person.name?person.name: '他没有名字');
}

showName(new person1); //小明
showName(new person2); //小红

上面的代码中,showName方法根本不用判断你是‘小明’还是‘小红’,它只负责显示对象的‘name’这一个属性,而name就是对象的其中一个状态表示,即使新增N个人,只要他拥有‘name’这个属性他就能显示出来,管理人员的人并不需要知道showName这个方法内部是如何运作。

Ps

js是一种动态语言,他没有类型检查,这对于利用对象多态特性进行编程来说十分的便利。而静态语言,在实现这种方式编程中不可避免的要经过类型检查这个关卡(本人觉得这是个非常蛋疼的过程)。静态语言实现方式在这里就不多讲了,有兴趣的人可以去看看《javascript设计模式与开发实践》中1.2.3节的介绍…^^

posted @ 2017-08-04 15:18  Marys  阅读(816)  评论(0)    收藏  举报