【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操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
随机推荐
- docker版redmine安装部署
数据库准备 docker run -d --name some-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=redmine postgr ...
- SpringBoot 整合 中国移动 MAS HTTP1.0 实现短信发送服务
因为客户需要,本身使用的 阿里云的短信服务改为了中国移动MAS HTTP 1.0 短信通知,因为看到网络上关于此类的博客知识很少,再趟完坑后特地写下这篇博客,提醒后来人. 特别感谢 中国移动MAS ...
- Java NIO学习与记录(四): SocketChannel与BIO服务器
SocketChannel与BIO服务器 SocketChannel可以创建连接TCP服务的客户端,用于为服务发送数据,SocketChannel的写操作和连接操作在非阻塞模式下不会发生阻塞,这篇文章 ...
- 为什么要重写hashcode方法和equals方法
我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...
- Angular Material 按钮图标系列
工做中经常用到Angular Material 中的好多按钮素材,奈何官网经常上不去,所以只能自己把这些常用的按钮扒下来了,留给自己同时也留给大家方便查看. Angular material mat- ...
- js数字动画
项目中需要的数字动画效果,网上找不到需要的效果,所以自己写了一个. 不多说,直接上干货:
- 配置tomcat-users
<role rolename="admin-gui"/><role rolename="admin-script"/><role ...
- jmeter笔记
Jmeter性能测试 入门 Jmeter 录制脚本:使用一个叫badbody的工具录制脚步供jmeter使用,http://www.badboy.com.au/:也可以用jmeter来录制 Jmete ...
- maven的安装配置超详细教程【含nexus】
1 下载 下载地址:http://maven.apache.org/download.cgi 界面效果如下: 点击之后进入的apache 软件基金的发布目录,在这里你可以下载apache的所有项目. ...
- 关于Input输入框蓝色外框的操作
1.去掉input外框的css: input { outline : none; //去掉外框 //outline:medium; } input:focus { outline : none; } ...