【javascript】javascript设计模式之工厂模式
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设计模式之工厂模式的更多相关文章
- javascript 面向对象编程(工厂模式、构造函数模式、原型模式)
javascript 面向对象编程(工厂模式.构造函数模式.原型模式) CreateTime--2018年3月29日17:09:38 Author:Marydon 一.工厂模式 /** * 工厂模 ...
- javascript创建对象的方法--工厂模式(非常好理解)
javascript创建对象的方法--工厂模式(非常好理解) 一.简介 创建对象的方法 本质上都是把"属性"和"方法",封装成一个对象 创建对象的基本模式 普通 ...
- [JS设计模式]:工厂模式(3)
简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- 设计模式之工厂模式(Factory)
设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...
- php设计模式:工厂模式
php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
随机推荐
- canvas+js绘制折线图
效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Python数据类型之数字
数字(数值) 整数 :123 (int型) 浮点数: 0.25(带小数点的数字即为浮点数,Float型) 布尔值:False,True(即0和1,bool型) 复数 (暂无资料,complex型) 整 ...
- 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: ...
- wusir FTP与HTTP文件传输之TCP Packet解析
向服务器传输文件(上传或下载)时,FTP与HTTP是两种最常用的应用层协议,这两个协议都是基于TCP协议之上.如果深入到数据包内(Packet)进行查看时,FTP与HTTP进行文件传输时有什么特征代码 ...
- (java/javascript) list 交集 并集 差集 去重复并集
java list 交集 并集 差集 去重复并集 package com; import java.util.ArrayList; import java.util.Iterator; import ...
- Javac之关于方法的选择
15.12. Method Invocation Expressions 15.12.1. Compile-Time Step 1: Determine Class or Interface to S ...
- JavaScript数据结构-14.集合
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Struts dispatchAction
在Struts中定义动态Action,不用定义多个Action,可以实现一个action,多个跳转. 在定义时,继承DispatchAction,并定义parameter的名字 在jsp页面选择act ...
- 开始使用 Vuejs 2.0 ---简单总结2
Vuejs的常用指令 v-html v-show v-if v-for v-on 1 .v-html v-html 更新元素或者变量的innerHTML,按普通html解析,和v-text的区别是在变 ...
- 【Echo】实验 -- 实现 C/C++下TCP, 服务器/客户端 通讯
本次实验利用TCP/IP, 语言环境为 C/C++ 利用套接字Socket编程,实现Server/CLient 之间简单的通讯. 结果应为类似所示: 下面贴上代码(参考参考...) Server 部分 ...