美文网首页
设计模式

设计模式

作者: sunny在未来等我们 | 来源:发表于2017-08-31 16:09 被阅读3次

1工厂模式

function createPerson(name, age, job ) {
      var o = new Object();
      o.name = name;
      o.age = age;
      o.job = job;
      o.sayName = function() {
        alert(this.name);
      }
     return o;
  }
var person1 = createPerson("spademan", 26, "front-end");
var person2 = createPerson("ivan", 27, "seller");
person1.sayName(); //"spademan"
person2.sayName(); //"ivan"

特点:

通过 new Object() 来创建一个对象实例,并为其添加属性和方法并返回

优点:

工厂类集中了所有对象的创建,便于对象创建的统一管理,且可以大量创建

缺点:

(1).工厂模式却无从识别对象的类型,因为它们直接由 Object() 构造函数创建,原型链上只有 Object.prototype 对象,不像Date、Array等 .(2).每创建一个对象实例,就会为每个对象实例创建一遍相同功能但是是不同函数实例的方法,它们并不相等。这显然是不可取的另外在相应的业务方面,除非是适用场景,否则不可滥用工厂模式,会造成代码的复杂度(参考)
注意:除了简单工厂模式之外还有抽象工厂模式

2构造函数模式

function GitHub(name, url) {
    this.name = name;
    this.url = url;
    this.alertUrl = function() {
        alert(this.url);
    }
}
var git = new GitHub('spademan', 'https://github.com/spademan');
console.log(git instanceof GitHub);    // true, 判断git是否是GitHub的实例,即解决了工厂模式中不能识别对象的类型的问题

特点:

需要使用new,并且没有return关键字

优点:

可以识别对象的类型

缺点:

使用构造函数的最大的问题在于每次创建实例的时候都要重新创建一次方法(理论上每次创建对象的时候对象的属性均不同,而对象的方法是相同的),然而创建两次完全相同的方法是没有必要的,因此,我们可以将函数移到对象外面(这一点和工厂模式相同)

3原型模式

function Person() {}
Person.prototype.name = 'spademan'
Person.prototype.age = 23
Person.prototype.getName = function () {
    return this.name
}
Person.prototype.setName = function () {
    this.name = name
}
var spademan_1 = new Person()
var spademan_2 = new Person()
console.log(spademan_1.getName === spademan_2.getName)    // => true

特点:

构造函数内不定义属性和方法,把属性和方法都定义在构造函数的原型上。这样所有的对象实例都共享对象原型上的属相和方法

优点:

多个实例可以共享原型上的属性和方法

缺点:

修改原型上的一些引用属性,所有实例对应的属性也将被改变(引用类型的数据Array String Date...等等),这样可能带来一些问题

4构造函数模式 + 原型模式(也叫混合模式)

function Person(name, age) {
    this.name = name
    this.age = age
    this.getAge = function () {
        return this.age
    }
}
Person.prototype.country = 'China'
Person.prototype.getName = function () {
    return this.name
}
Person.prototype.setName = function (name) {
    this.name = name
}
var spademan = new Person('spademan', 26)
var spademan_2 = new Person('spdeman_2', 27)

优点:

构造函数内定义私有的属性和方法,构造函数的原型上定义共有的属性和方法。是目前最常用的方式之一

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

      本文标题:设计模式

      本文链接:https://www.haomeiwen.com/subject/ptqfjxtx.html