01 简单工厂模式

本系列文章是我在阅读《JavaScript 设计模式》这本书的一些笔记,这本书是国内的张容铭写的,注意和另一本外国的同名书籍进行区分。

场景

当你使用面向对象开发 web 应用时,会创建很多很多的类。比如控制登录的 Login 类,控制注册的 Register 类,和用户有关的 User 类等。
这样的类越来越多,你不得不一一记住这些类的名字,并在开发过程中初始化这些类,代码结构看起来很散乱,到处都是 new xxx 这样的语句。
简单工厂模式就是为了解决类似这种问题的:通过一个公共的工厂函数(类),根据传入的参数不同,向外暴露不同的对象。
事实上,简单工厂模式的思想不仅仅用在面向对象编程中,普通的面向过程编程也会运用这种思想,只不过我们不把它叫做简单工厂模式而已。看下面的代码:

function checkRole(role_id){
    switch(role_id){
        case "0":
            return "超级管理员";
        case "1":
            return "普通管理员"
        case "3":
            return "注册用户"
        default:
            return "游客"
    }
}

根据不同的角色 id,返回相应的角色描述,这本身就是工厂模式的思想。

实现

简单工厂模式的实现比较简单:我们只需在工厂函数(类)上根据参数进行判断,然后返回特定类的实例即可。

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

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

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

// 简单工厂
class BallFactory{
    constructor(type) {
        switch(type){
            case "FootBall":
                return new FootBall();
            case "BasketBall":
                return new BasketBall();
            case "Golf":
                return new Golf();
        }
    }
}

// 创建对象
const football = new BallFactory("FootBall")
const basketball = new BallFactory("BasketBall")
const golf = new BallFactory("Golf")
football.playFootBall()
basketball.playBasketBall()
golf.playGolf()

运行结果:

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

使用简单工厂模式,我们只需在工厂函数(类)内部维护一套类的列表,根据参数来创建相应的类的实例对象,提高了代码的整洁性和可维护性。

完。

你可能感兴趣的:(01 简单工厂模式)