【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操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
随机推荐
- C#-WebForm-★★★JQuery知识——DOM操作★★★
例如: $("#btn1").attr( "disabled" , "disabled" ); 例如: $("#d1") ...
- CentOS 7 安装程序介绍
(一).引导菜单 使用 UEFI 引导 Install CentOS Linux 7 选择此选项开始在你的计算机系统中使用图形安装程序安装 CentOS 7 Test this media & ...
- [性能测试]:关于MQ协议脚本开发
消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们. 银行脚本使用MQ通信的较多,下面介绍一个MQ的脚本: M ...
- 思科设备配置DHCP服务
路由器,三层交换机都是可以做DHCP服务的,下面以Cisco 3750G-24TS-S为例配置DHCP服务,指令如下: ip dhcp pool DHCP-Server network 192.168 ...
- OS X获取process.env.NODE_ENV出错
原来项目是其它小组在维护,现在我们需要维护部分功能,把项目带到OS X上运行发现 webpack.config.js获取process.env.NODE_ENV变量出错 解决: 根据电脑操作系统平台类 ...
- 一张图说清楚SQL的Join
话不多说..看图
- Orleans框架------基于Actor模型生成分布式Id
一.Actor简介 actor模型是一种并行计算的数学模型. 响应于收到的消息,演员可以:做出决定,创建更多Actor,发送更多消息,并确定如何响应接收到的下一条消息. 演员可以修改自己的状态,但只能 ...
- 微服务Kong(三)——添加一个API
在开始前,请确保您已经安装了KONG服务,并且已经启动了KONG服务. 在本节中,您可以学习到:如何在KONG层添加一个API.这是您使用KONG来管理您的API的第一步.对于此篇教程,我们将使用 h ...
- AMQP技术术语
什么是AMQP AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.基 ...
- PTA (Advanced Level) 1013 Battle Over Cities
Battle Over Cities It is vitally important to have all the cities connected by highways in a war. If ...