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的方式传入参数数组来调用。这时我们就可以看到构造器和工厂的最大区别了。

【javascript】javascript设计模式之工厂模式的更多相关文章

  1. javascript 面向对象编程(工厂模式、构造函数模式、原型模式)

      javascript 面向对象编程(工厂模式.构造函数模式.原型模式) CreateTime--2018年3月29日17:09:38 Author:Marydon 一.工厂模式 /** * 工厂模 ...

  2. javascript创建对象的方法--工厂模式(非常好理解)

    javascript创建对象的方法--工厂模式(非常好理解) 一.简介 创建对象的方法 本质上都是把"属性"和"方法",封装成一个对象 创建对象的基本模式 普通 ...

  3. [JS设计模式]:工厂模式(3)

    简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...

  4. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  5. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  6. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  7. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  8. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

  9. php设计模式:工厂模式

    php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...

  10. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

随机推荐

  1. 蓝牙4.0BLE抓包(一) - 搭建EN-Dongle工作环境 使用EN-Dongle抓包 nRF51822

     版权声明:本文为博主原创文章,转载请注明作者和出处.           蓝牙4.0 BLE的开发过程中,使用抓包器进行抓包分析无疑会极大地提高我们的开发效率,同时能帮我们快速的定位问题.对于初学者 ...

  2. Welcome! This is the documentation for Python 3.6.8

    The Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simp ...

  3. 2019.04.18 第六次训练 【2018-2019 ACM-ICPC, NEERC, Southern Subregional Contest, Qualification Stage】

    题目链接: https://codeforces.com/gym/101911 又补了set的一个知识点,erase(it)之后it这个地址就不存在了,再引用的话就会RE A: ✅ B:  ✅ C: ...

  4. Mac 10.12安装Homebrew图形化界面管理工具Cakebrew

    下载: (链接: https://pan.baidu.com/s/1mivJ9H2 密码: f8dr)

  5. (转)基于OpenStack构建企业私有云(1)实验环境准备

    原文:https://www.unixhot.com/article/407 https://www.cnblogs.com/kevingrace/p/5707003.html-----完整部署Cen ...

  6. underscore相关记录

    为什么使用void 0代替undefined? 在很多框架的源码以及webpack打包出来的bundle.js中,我们都可以看到void 0的身影,如下: function generateRando ...

  7. vSphere虚拟主机安装Centos7系统

    经过上一帖的主机设置,这一步就可以开始安装系统了,本次详细记录各个过程并分析结果. Centos7 1.右键点击列表中的虚拟主机,打开控制台. 点击绿色开机键,开始安装. 这里有一个很关键的点,就是上 ...

  8. PHP在 win7 64位 旗舰版 报错 Call to undefined function curl_init()

    代码在ubuntu下无缝运行OK 转到我的win7 64位 期间 学习机上 报错: Call to undefined function curl_init() 因为用到curl 远程抓取数据. 所以 ...

  9. 对 BOIS 的一些介绍

    BIOS里不可调节CPU将在64/32位系统下工作 知识点延伸1,一般CPU要想在64位状态下运行必须具备两个条件: 1)安装64位操作系统 2)CPU本身就支持64位指令集 知识点延伸2有必要了解B ...

  10. 对于SQL Server 2008删除或压缩数据库日志的方法

    由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400M的数据库居然有4G的LOG文件,严重占用了磁盘空间.由于主要是做OLAP,所以数据库本身不会有大变动,所以日志也就没有 ...