工厂方法模式笔记
  通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例
  对于创建多类对象,简单工厂不太实用,这是简单工厂模式的应用局限,当然这正是工厂方法模式的价值之所在
  通过工厂方法模式可以轻松的创建多个类的实例对象,而且创建对象的方式避免了使用者与对象类之间的耦合,用户不必关心创建该对象的具体类,只需调用工厂方法即可。
  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设计模式-工厂方法模式的更多相关文章

  1. 4. 星际争霸之php设计模式--工厂方法模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. C++设计模式——工厂方法模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...

  3. [设计模式] javascript 之 工厂方法模式

    1. 简单工厂模式 说明:就是创建一个工厂类,里面实现了所对同一个接口的实现类的创建. 但是好像JavaScript 好像没有 接口 这号东西,所以我们去掉接口这个层; 当然,我们这里的 实现类 下的 ...

  4. JAVA设计模式--工厂方法模式

    工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...

  5. 深入浅出设计模式——工厂方法模式(Factory Method)

    介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...

  6. 设计模式--工厂方法模式(Factory method pattern)及应用

    面向对象的好处: 通过封装,继承,多态把程序的耦合度降低. 用设计模式可以使程序更加灵活,容易修改,且易于复用. 1. 工厂方法模式 Define an interface for creating ...

  7. 我的Java设计模式-工厂方法模式

    女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...

  8. 设计模式 — 工厂方法模式(Factory Method)

    在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...

  9. C#设计模式--工厂方法模式

    0.C#设计模式-简单工厂模式 设计模式: 工厂方法模式(Factory Method Pattern) 介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用 ...

随机推荐

  1. 死去活来,而不变质:Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射?

    写在前面 阅读目录: 设计误区 数据库已死 枚举映射 关联映射 后记 在上一篇<一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?>博文中, ...

  2. Entity Framework 6 Recipes 2nd Edition(13-8)译 -> 把昂贵的属性移到其它实体

    问题 你想把一个昂贵的属性移到另一个实体,这样你就可以延迟加载当前这个实体.对于一个加载昂贵的而且很少用到的属性尤其有用. 解决方案 模型和上一节(Recipes 13-7)的一致,如Figure13 ...

  3. C++ std::deque

    std::deque template < class T, class Alloc = allocator > class deque; Double ended queue deque ...

  4. SQL Server 复制系列(文章索引)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 复制逻辑结构图(Construction) 系列文章索引(Catalog) 总结&am ...

  5. 【Win 10 应用开发】透视效果

    所谓透视效果,就是在平面坐标空间上模拟出“好像”三维的效果.要是老周没有记错的话,以前在写WP8相关的内容时写过,UWP中的透视方法也保留了以前的Do法,其实这玩意儿是从 Silverlight 沿袭 ...

  6. 【原】Masonry+UIScrollView的使用注意事项

    [原]Masonry+UIScrollView的使用注意事项 本文转载请注明出处 —— polobymulberry-博客园 1.问题描述 我想实现的使用在一个UIScrollView依次添加三个UI ...

  7. react+redux教程(五)异步、单一state树结构、componentWillReceiveProps

    今天,我们要讲解的是异步.单一state树结构.componentWillReceiveProps这三个知识点. 例子 这个例子是官方的例子,主要是从Reddit中请求新闻列表来显示,可以切换reac ...

  8. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  9. 在ASP.NET Core Web API上使用Swagger提供API文档

    我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...

  10. 使用PowerShell 监控运行时间和连接情况

    概念 Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境.你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆. powershell需要.N ...