JavaScript设计模式(一)-- 简单工厂模式

简单工厂模式,又称静态工厂方法,用于创建同一类对象。当类的数量过多时,通过一个工厂函数封装创建过程,便于使用。例如,创建basketball, football, tennis对象。此模式下,一个对象可以替代多个类,提供一种创建相似或不同对象的方式,类似于继承中的寄生模式,但无需继承。简单工厂模式适用于产品对象较少且固定需求的情况。" 105344989,9401345,PTA 1047: 编程团体赛 C语言解决方案,"['C语言', '编程竞赛', '算法实现']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

简单工厂模式:又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象。

如果类太多,就提供一个

对于多个类,在每次创建时还要找相对应的类。为此,直接封装在一个函数中。每次通过这个函数就可以创建我需要的对象为我所用。而且其他人都不用关注创建这些对象到底依赖于哪个基类了。这个函数通常被称为工厂函数,这种模式叫简单工厂模式

举例

//basketball class
    var basketball = function(){
        this.intro = 'Basketball from America.';
    }
    basketball.prototype = {
        getMember: function(){
            console.log('Every team has five member');
        },
        getBallSize:function(){
            console.log('Basketball is not big');
        }
    }

    //football class
    var football = function(){
        this.intro = 'Football in the world.';
    }
    football.prototype = {
        getMember: function(){
            console.log('Every team has eleven member');
        },
        getBallSize:function(){
            console.log('Football is not big');
        }
    }

    //tennis class
    var tennis = function(){
        this.intro = 'Tennis in the world.';
    }
    tennis.prototype = {
        getMember: function(){
            console.log('Every team has one member');
        },
        getBallSize:function(){
            console.log('Tennis is very samll');
        }
    }

创建三个类,分别为:basketball,football,tennis。写一个简单的工厂函数。

var SportsFactory = function(name){
        switch(name){
            case 'NBA':
                return new basketball();
            case 'worldCup':
                return new football();
            case 'FrenchOpen':
                return new tennis();
        }
    }

编写函数调用

var Football = SportsFactory('worldCup');
    console.log(Football);
    console.log(Football.intro);
    Football.getMember();

一个对象也可以替代许多类

    总的来说,简单模式工厂的理念就是创建对象,上面这种是创建相似对象,也可以用来对不同对象进行实例化。有点类似继承中的寄生模式,但又不太一样,因为这里没有父类,无需做任何的继承。只需要创建一个简单对象,通过这个对象大量拓展方法和属性,最终将对象返回出来。

    比如,书都有目录,页码等。也有一些不同的地方:书名,出版时间,出版社等等。

function createBook(name,time,type){
    //创建一个简单对象,通过这个对象大量拓展方法和属性
    var e = new Object();
    e.name = name;
    e.time = time;
    e.type = type;
    e.getName = function(){
        console.log(this.name);
    }
    //return object
    return e;
}

var book1 = createBook('Javascript Book',2018,"js");
var book2 = createBook('CSS Book',2014,"css");

book1.getName();
book2.getName();

总结

第一种是通过实例化对象创建的,第二种是通过创建一个对象然后包装增强其属性和功能进行实现。他们之间的差异性造成前面通过类创建的对象,如果这些类继承同一父类,那么父类上的原型方法是可以进行共用的。后面寄生方式创建的对象都是一个新的个体,方法不能共用。

简单工厂只适合于产品对象较少,且产品固定的需求,对于产品变化无常的需求来说显然不合适;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值