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 Model元数据(二)
ASP.NET MVC Model元数据(二) 前言 在上篇中,给大家留个对Model元数据的印象,并没有对Model元数据有过多的讲解,而在本篇中也不会对Model元数据的本身来解释,而是针对于它的 ...
- ABP源码分析六:依赖注入的实现
ABP的依赖注入的实现有一个本质两个途径:1.本质上是依赖于Castle这个老牌依赖注入的框架.2.一种实现途径是通过实现IConventionalDependencyRegistrar的实例定义注入 ...
- Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 用”模型定义”函数过滤实体集
11-2. 用”模型定义”函数过滤实体集 问题 想要创建一个”模型定义”函数来过滤一个实体集 解决方案 假设我们已有一个客户(Customer)和票据Invoice)模型,如Figure 11-2所示 ...
- HTML (超文本标记语言)
<html> --开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> <body> ...
- myeclipse学习总结二(myeclipse安装svn插件)
1.在myeclipse中要安装svn插件,首先是下载svn插件. 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?fold ...
- Centos6.5中安装和配置vsftp详细总结
一.vsftp安装篇 #查看是否安装:rpm -qa|grep vsftpd#卸载vsftpdrpm -e vsftpd-2.2.2-11.el6_3.1x86_64 --nodeps# 安装vsft ...
- Docker学习总结
本文作为总结性文章,不会详细讲解Docker.但会把已学习的.了解的内容按照由易到难的顺序串起来,更多的是帮助Docker新手快速的了解Docker,知道目前处在哪个阶段,接下来该学些什么,避免碰太多 ...
- C# 深拷贝的具体代码的封装与调用
先封装下实现方法: public class DeepClone { public static object CopyObject(Object obj) { if (obj == null) { ...
- SQL 邮件配置篇
在我们运维工作中,经常要对备份,ETL等作业进行监控,这时我们需要用到SQL SERVER自带的邮件服务器,其原理,我在这么里不多说,直接来实战,下面是我对服务器配置源码,分享给大家,希望对大家有帮助 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(4)-创建项目解决方案
系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 设计中术语,概念这种东西过于模糊,我们必须学习累积才能认识这些概念模型. 我无法用文章来下详细解析此系统的深层概念,需要大 ...