美文网首页JavaScript
01 简单工厂模式

01 简单工厂模式

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

    本系列文章是我在阅读《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 简单工厂模式

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