工厂模式

什么是工厂模式

定义一个 用于创建对象 的接口。(但是让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。)

  • 工厂
    创建其他对象 的对象

    构造方法的抽象

  • 说明
    1.这个接口 由子类决定 实例化哪一个类。所创建的 实例类型 由所属实例 指定,因此不知道具体类的情况下,为客户提供一种创建对象的接口

2.子类 可以重写 接口方法 以便创建的时候 指定 自己的对象类型

用来干啥

用来定义接口的

  • 定义什么接口?
    定义 创建对象的 接口。

这种模式 抽象了 创建对象的过程。

首先,ECMAScript中无法创建类,so,有人发明一种函数,用来封装 以特定接口创建对象 的细节。

栗子:

function createPerson(name, age, job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function(){
        console.log(this.name);
    }
    return o;
}


var person1 = createPerson('Amy', 18, "Software Engineer");
var person2 = createPerson('Bob', 21, "Doctor");

函数createPerson()能够 根据接受的参数 来构建一个包含所有必要信息的Person对象。

  • 什么时候使用工厂模式,以下几种情景下工厂模式特别有用:
    .对象的构建十分复杂
    .需要依赖具体环境创建不同实例
    .处理大量具有相同属性的小对象

优缺点

缺点:
1、重构已经存在的类会破坏客户端代码。

2、因为工厂方法所实例化的类具有私有的构造方法,所以这些类就不能扩展了。

3、如果确实扩展了工厂方法所实例化的类(例如将构造方法设为保护的,虽然有风险但也是可行的),子类必须具有所有工厂方法的一套实现。

posted @ 2016-04-20 04:51  Sameen  阅读(178)  评论(0编辑  收藏  举报