博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【javascript】javascript设计模式之工厂模式
阅读量:5293 次
发布时间:2019-06-14

本文共 2970 字,大约阅读时间需要 9 分钟。

1.要解决的问题

2.如何实现

3.与构造函数的区别

4.总结

1.要解决的问题

工厂模式通常用于重复创建相似对象,提供动态创建对象的接口。

2.工厂模式最为设计模式中构造模式之一,通常在类或类的静态方法中应用,主要为了实现:

①重复创建相似对象

②根据类型名在运行时动态创建对象

【简单工厂模式】:同种类

var cat = function () {        this.hh = '高冷'    }    cat.prototype = {        pin: function () {            console.log("白色");        }    }    var dog = function () {        this.hh = '粘人'    }    dog.prototype ={        pin: function () {            console.log("黄色");        }    }    var ren = function(pet){        switch (pet){            case 'qinjin':                return new dog();            case 'gaoleng':                return new cat();        }    }   var guke =  ren(qinjin)    console.log(guke);function cat(name,pinzhong,price) {    var o = new Object();    o.name = name;    o.pinzhong = pinzhong    o.price = price    o.getName = function () {        console.log(this.name);    }    return o;}var meiduan = cat('xiaoduanduan', 'meiduan', 2000)var jiafei = cat('xiaofeifei','feifei', 9000)    meiduan.getName();    jiafei.getName()

 

【工厂方法模式】

var Factory = function (type,content) {        if(this instanceof Factory){            var s = new this[type](content)            return s        }else{            return new Factory(type, content)        }    }    Factory.prototype = {        dog: function (content) {            this.content = content;            (function (content) {                var div = dosumnet.createElement('div');                div.innerHTML = content;                div.style.border = '1px solid red'                document.getElementById('conta')            })(content)        },        lv: function (content) {        }    }    var data = [        {type:'dog',content:'我是一只狗'},        {type:'lv',content:'我是一只狗'}    ]    for(var i = 2; i>0;i--){        Factory(s[i].type,s[i].content)    }

  

【抽象工厂模式】

//  抽象工厂模式 每个子类都有一个继承var home = function (subType,superType) {    //  判断抽象工厂中是否有该对象类    if (typeof home[superType] === 'function'){        //  缓存类        function F() {            this.type='户型'        }        //  继承父类属性和方法        F.prototype = new home[superType];        //  将自雷constructor指向子类        subType.constructor = subType        //  子类原型继承"父类"        subType.prototype = new F();    }else{        //  不存在该抽象类抛出错误        throw  new Errow('未创建该抽象类')    }}//  别墅类home.villa = function () {    this.type = 'villa'    console.log('car', this);}home.villa.prototype = {    getPrice: function () {    },    gethuxing: function () {            }}//  低档住宅var swimvilla = function (mianji,huxing) {    this.mianji = mianji;    this.huxing = huxing;}//  抽象工厂实现对villa抽象类的继承home(swimvilla, 'villa');swimvilla.prototype.getPrice = function () {    console.log(this.price)}swimvilla.prototype.gethuxing = function () {    console.log(this.huxing);}const swimvilla1 = new swimvill(100,'5室')swimvilla1.getPrice()

 3.与构造函数的区别

除了工厂模式,很多时候我们也会直接采用new关键字调用构造函数来创建对象。

构造函数并不能直接通过call或者apply的方式传入参数数组来调用。这时我们就可以看到构造器和工厂的最大区别了。

 

转载于:https://www.cnblogs.com/teemor/p/8538540.html

你可能感兴趣的文章
Java实现二叉树先序,中序,后序遍历
查看>>
Hello World
查看>>
java 打印栈信息
查看>>
解决flex4 分辨率自适应问题
查看>>
表扫描和索引扫描
查看>>
移动硬盘加密!让windows用户无法查看移动硬盘!
查看>>
部署Flask项目到腾讯云服务器CentOS7
查看>>
使用python实现京东抢购脚本
查看>>
登录之后更新导航
查看>>
saddle中每一个属性赋值给到WebPlate中的同名属性
查看>>
图论专题考试2 爆零祭
查看>>
21.centos7基础学习与积累-007-远程连接
查看>>
获取当前日期和随机数
查看>>
透视ERP会计科目 (转自SAP屠夫的博客)
查看>>
0049 MyBatis关联映射--一对一关系
查看>>
解决ultravnc在win2008 R2下CTRL+ALT+DELETEA组合键发送失败的问题
查看>>
Ceph相关
查看>>
大小写转换
查看>>
AJAX
查看>>
maven项目启动报错ContainerBase.addChild: start
查看>>