美文网首页JavaScript
02 工厂方法模式

02 工厂方法模式

作者: 柏丘君 | 来源:发表于2017-08-08 16:41 被阅读8次

场景

还是以上文中的场景进行举例:每新增一个球类,就需要新建一个相关类,并修改工厂类中的 constructor 方法,把这个新增的类添加进去。
当类越来越多时,可能修改的也就愈加频繁。
这种情况下,我们可以使用工厂方法模式,工厂方法模式在简单工厂模式上进行了一点点改进:解决了新增类时既要写新增的类的代码又要修改工厂函数(类)的问题。

实现

要实现工厂方法模式,我们需要改变一下定义类的方式:将类定义在工厂类的prototype上,在工厂类中创建对象时,用prototype上的类进行创建。

// 工厂类
class BallFactory{
    constructor(type) {
        return new this[type]();
    }
}

// 足球类
BallFactory.prototype.FootBall = class {
    playFootBall(){
        console.log("我是一个愉快的足球")
    }
}

// 篮球类
BallFactory.prototype.BasketBall = class {
    playBasketBall(){
        console.log("我是一个胖胖的篮球")
    }
}

// 高尔夫球
BallFactory.prototype.Golf = class {
    playGolf(){
        console.log("我是一个高贵的高尔夫")
    }
}

// 创建对象
const football = new BallFactory("FootBall")
const backetball = new BallFactory("BasketBall")
const golf = new BallFactory("Golf")

football.playFootBall()
backetball.playBasketBall()
golf.playGolf()

运行结果:

我是一个愉快的足球
我是一个胖胖的篮球
我是一个高贵的高尔夫

分析

上面的代码中,我们将 FootBallBasketBallGolf 三个类添加到了工厂类的 prototype 上,于是工厂类以及其子类就可以访问到这些类了,然后在工厂类的 constructor 中返回相应的对象。
上面的 constructor 也可以这样写:

constructor(type) {
    return new BallFactory.prototype[type]();
}

完。

相关文章

  • 设计模式

    一 生成对象类(创建对象)01 单例模式02 工厂方法模式03 抽象工厂模式04 原型模式二 面向对象编程灵活化0...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 设计模式-工厂方法模式

    1、工厂方法模式(Factory Method) 工厂方法模式分为三种: 普通工厂模式 多个工厂模式 静态工厂模式...

  • 设计模式 工厂模式

    工厂模式 工厂模式三大类1、简单工厂模式(静态工厂方法模式)2、工厂方法模式3、抽象工厂模式(Kit模式) 简单工...

  • python设计模式 - 工厂模式之工厂方法

    python 环境 工厂方法模式简介 工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

  • 建造模式

    包括:简单工厂、工厂方法、抽象工厂、单例模式、多例模式、建造模式、原始原型模式。 简单工厂:又名静态工厂方法模式,...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式学习--工厂方法模式

    模式定义 工厂方法模式又称工厂模式,也叫虚拟构造器模式或者多态工厂模式,它属于类创建型模式。在工厂方法模式中,工厂...

网友评论

    本文标题:02 工厂方法模式

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