js构造器模式和工厂模式

1.构造器模式
  1. 构造器

    当新对象的内存被分配后,用来初始化对象的一个特殊的函数

  2. 什么是构造器模式

    构造器模式即以构造器的角度来创建对象,通过对比以不同构造器的方式创建对象,选择出最佳性能来创建对象

  3. es5之前创建对象的方式

    // 1.字面量
    var obj = {
        uname: 'zt',
        age: 19
    }
    // 2.Object对象创建空对象 不方便对象属性赋值
    var obj2 = new Object();
    // 3.Object.create()方式常见可继承于某个对象的新对象,不直观
    var obj3 = Object.create();
    // 3.构造函数 不方便继承操作,每次新增对象让其指向同一个对象函数
    function Fn() {
        this.uname = 'zt',
        this.age = 19
    }
    var obj4 = new Fn();// 通过new 方式 将函数Fn中的属性uname等作为构造对象obj4的属性
    
  4. es5之后方式

    通过原型prototype使其子对象可以公用父对象的属性

2.工厂模式
  1. 什么是工厂模式

    也是从创建对象的角度出发,但是不同于构造器模式明确要求使用构造器来实现,而此模式提供了创建对象的公共接口,而创建对象的方式则被封装在工厂中,只需要调用工厂接口不需要知道具体的实现,就可以创建不同类型的对象

  2. 案例(使用工厂模式创建对象)

    // Types.js - Constructors used behind the scenes
    
    // A constructor for defining new cars
    function Car( options ) {
    
      // some defaults
      this.doors = options.doors || 4;
      this.state = options.state || "brand new";
      this.color = options.color || "silver";
    
    }
    
    // A constructor for defining new trucks
    function Truck( options){
    
      this.state = options.state || "used";
      this.wheelSize = options.wheelSize || "large";
      this.color = options.color || "blue";
    }
    
    // FactoryExample.js
    
    // Define a skeleton vehicle factory
    function VehicleFactory() {}
    
    // Define the prototypes and utilities for this factory
    
    // Our default vehicleClass is Car
    VehicleFactory.prototype.vehicleClass = Car;
    
    // Our Factory method for creating new Vehicle instances
    VehicleFactory.prototype.createVehicle = function ( options ) {
    
      if( options.vehicleType === "car" ){
        this.vehicleClass = Car;
      }else{
        this.vehicleClass = Truck;
      }
    
      return new this.vehicleClass( options );
    
    };
    
    // Create an instance of our factory that makes cars
    var carFactory = new VehicleFactory();
    var car = carFactory.createVehicle( {
                vehicleType: "car",
                color: "yellow",
                doors: 6 } );
    
    // Test to confirm our car was created using the vehicleClass/prototype Car
    
    // Outputs: true
    console.log( car instanceof Car );
    
    // Outputs: Car object of color "yellow", doors: 6 in a "brand new" state
    console.log( car );
    
  3. 使用场景

    1. 创建对象比较复杂的情况下
    2. 当需要生成不同对象类型的实例的时候
    3. 不同对象类型之间需要公用一些数据的时候
  4. 抽象工厂

3.抽象工厂模式
  1. 以一个通用的目标将一组独立的工厂进行封装。
  2. 使用场景:适用于必须从其创建或生成对象的方式处独立,或者需要同多种类型的对象一起工作的情况下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值