javascript设计模式-工厂方法模式
工厂方法模式笔记
通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例
对于创建多类对象,简单工厂不太实用,这是简单工厂模式的应用局限,当然这正是工厂方法模式的价值之所在
通过工厂方法模式可以轻松的创建多个类的实例对象,而且创建对象的方式避免了使用者与对象类之间的耦合,用户不必关心创建该对象的具体类,只需调用工厂方法即可。
demo实例:为页面创建不同功能的按钮
按钮工厂类
/*按钮工厂类*/
var ButtonFactory=function(type,content){
if(this instanceof ButtonFactory){
var s = new this[type](content);
}else{
return new ButtonFactory(type,content);
}
}
工厂原型中设置创建所有类型数据对象的基类
//工厂原型中设置创建所有类型数据对象的基类
ButtonFactory.prototype = {
defaultBtn:function(content){
//默认/基本按钮
this.content = content;
(function(content){
var btn=document.createElement("button");
btn.innerHTML=content;
btn.style.color='#333';
btn.style.background='#fff';
document.getElementById('container').appendChild(btn); })(content);
},
primaryBtn:function(content){
//原始按钮
this.content = content;
(function(content){
var btn=document.createElement("button");
btn.innerHTML=content;
btn.style.color='#fff';
btn.style.background='#337ab7';
btn.style.borderColor='#2e6da4';
document.getElementById('container').appendChild(btn);
})(content);
},
successBtn:function(content){
//操作成功按钮
this.content = content;
(function(content){
var btn=document.createElement("button");
btn.innerHTML=content;
btn.style.color='#fff';
btn.style.background='#5cb85c';
btn.style.borderColor='#4cae4c';
document.getElementById('container').appendChild(btn);
})(content);
},
infoBtn:function(content){
//弹出信息的按钮
this.content = content;
(function(content){
var btn=document.createElement("button");
btn.innerHTML=content;
btn.style.color='#fff';
btn.style.background='#5bc0de';
btn.style.borderColor='#46b8da';
document.getElementById('container').appendChild(btn);
})(content);
},
warnBtn:function(content){
//谨慎操作的按钮
this.content = content;
(function(content){
var btn=document.createElement("button");
btn.innerHTML=content;
btn.style.color='#fff';
btn.style.background='#f0ab4e';
btn.style.borderColor='#eea236';
document.getElementById('container').appendChild(btn);
})(content);
},
dangerBtn:function(content){
//危险动作的按钮
this.content = content;
(function(content){
var btn=document.createElement("button");
btn.innerHTML=content;
btn.style.color='#fff';
btn.style.background='#d9534f';
btn.style.borderColor='#d43f3a';
document.getElementById('container').appendChild(btn);
})(content);
}
}
//测试的数据
var data=[
{type:'defaultBtn',content:'默认按钮'},
{type:'primaryBtn',content:'原始按钮'},
{type:'successBtn',content:'成功按钮'},
{type:'infoBtn',content:'信息按钮'},
{type:'warnBtn',content:'警告按钮'},
{type:'dangerBtn',content:'危险按钮'},
];
循环生成多个对象实例
for(var i=5;i>0;i--){
ButtonFactory(data[i].type,data[i].content);
}
html中css代码
#container{width:500px;margin:100px auto;}
button{display: inline-block;padding: 6px 12px;margin-bottom:;font-size: 14px;font-weight:;line-height: 1.42857143;
text-align: center;white-space: nowrap;vertical-align: middle;-ms-touch-action: manipulation;touch-action: manipulation;
cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;
background-image: none;border: 1px solid transparent;border-radius: 4px;margin-right:5px;}
html代码
<div id="container"></div>
浏览器显示截图
javascript设计模式-工厂方法模式的更多相关文章
- 4. 星际争霸之php设计模式--工厂方法模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- C++设计模式——工厂方法模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...
- [设计模式] javascript 之 工厂方法模式
1. 简单工厂模式 说明:就是创建一个工厂类,里面实现了所对同一个接口的实现类的创建. 但是好像JavaScript 好像没有 接口 这号东西,所以我们去掉接口这个层; 当然,我们这里的 实现类 下的 ...
- JAVA设计模式--工厂方法模式
工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...
- 深入浅出设计模式——工厂方法模式(Factory Method)
介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...
- 设计模式--工厂方法模式(Factory method pattern)及应用
面向对象的好处: 通过封装,继承,多态把程序的耦合度降低. 用设计模式可以使程序更加灵活,容易修改,且易于复用. 1. 工厂方法模式 Define an interface for creating ...
- 我的Java设计模式-工厂方法模式
女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...
- 设计模式 — 工厂方法模式(Factory Method)
在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...
- C#设计模式--工厂方法模式
0.C#设计模式-简单工厂模式 设计模式: 工厂方法模式(Factory Method Pattern) 介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用 ...
随机推荐
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- ABP源码分析二十二:Navigation
MenuDefinition:封装了导航栏上的主菜单的属性. MenuItemDefinition:封装了主菜单的子菜单的属性.子菜单可以引用其他子菜单构成一个菜单树 UserMenu/UserMen ...
- 基于HTTP的断点传输
最近项目需要做一个类似于迅雷的文件下载功能,这类需求可能比较常见,希望可以帮助到有需要的同学 要求: 1.支持断点传输 2. 多文件同时下载 3. 由于是客户内部试用,服务器只支持HTTP文件下载不支 ...
- 我们为什么使用Node
引言:Node 已经迅速成为一个可行并且真正高效的web 开发平台.在Node 诞生之前,在服务端运行JavasScript 是件不可思议的事情,并且对其他的脚本语言来说,要实现非阻塞I/O 通常需要 ...
- Vuex2.0+Vue2.0构建备忘录应用实践
一.介绍Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,适合于构建中大型单页应用. ...
- 判断CPU是大端还是小端模式
在小端模式中,低位字节放在低地址,高位字节放在高地址:在大端模式中,低位字节放在高地址,高位字节放在低地址.big-endian和little-endian,51单片机是典型的大端模式,Intel电脑 ...
- Android浮层点击穿透问题
最近做微信公众号开发的时候遇到一个问题,上线后发现此问题后检查代码没有发现问题,无奈只能回滚到上一个版本. 问题是这样的:页面一个选择的浮层,在浮层点击确定后,下面的页面会自动提交 在测试环境上无法重 ...
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
- 1000行代码实现MVVM (类似Angular1.x.x , Vue)
最近花了近半个多月的时间, 自己纯手工写了一个很小型的类angularjs/vue的mvvm 库. 目前已经用于公司一个项目. 项目托管在github https://github.com/leonw ...
- Oracle 中的操作符
1.union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: SELECT * FROM emp WHERE sal < UNION SELECT * FROM emp WH ...