javascript中常见的三种开发模式
一、单例模式:
所谓单例模式,即保证一个类只有一个实例,并提供一个访问它的全局访问点。
<script type="text/javascript">
//一个类有某个实例,就用这个实例,没有的话,就新生成一个实例 var singleTon = (function(){
var _instance = null; function Foo(){
this.a = "**";
this.b = "**";
}
Foo.prototype.fn = function(){ } return {
getInstance:function(){
if(!_instance){
_instance = new Foo();
}
return _instance;
}
}
})();
console.log(singleTon.getInstance()==singleTon.getInstance()); </script>
单例模式实现弹出层:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
div{
height: 100px;
width: 100px;
background: red;
}
</style>
</head>
<body>
<input type="button" id="btn" value="弹出层" /> <script type="text/javascript">
(function(){
var oBtn = document.getElementById("btn");
var _instance = null;
//创建弹窗类
function PopBox(){
this.node = document.createElement("div");
document.body.appendChild(this.node);
}
oBtn.onclick = function(){
if(!_instance){
_instance = new PopBox;
}
} })();
</script>
</body>
</html>
二、观察者模式:
所谓观察者模式,即(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
<script type="text/javascript">
var observer = {
regist:function(eventName,callback){
if(!this.obj){
this.obj = {};
}
if(!this.obj[eventName]){
this.obj[eventName] = [callback];
}else{
this.obj[eventName].push(callback);
} },
emit:function(eventName){
if(this.obj[eventName]){
for(var i = 0; i < this.obj[eventName].length; i++){
this.obj[eventName][i]();
}
}
},
remove:function(eventName,callback){
if(this.obj[eventName]){
for(var i = 0; i < this.obj[eventName].length;i++){
if(this.obj[eventName][i]==callback){
this.obj[eventName].splice(i,1);
}
}
}
}
}; //购物车模块注册的事件
observer.regist("loginSucess",function(){
console.log("购物车模块发生改变");
});
//个人信息模块注册的事件
observer.regist("loginSucess",function(){
console.log("个人信息模块发生改变");
}); observer.emit("loginSucess");//
</script>
观察者模式常见面试题:
<script type="text/javascript">
var Event = {
// 通过on接口监听事件eventName
// 如果事件eventName被触发,则执行callback回调函数
on: function(eventName, callback) {
//你的代码 注册事件
if(!this.obj){
Object.defineProperty(this,"obj",{
value:{},
enumerabel:false
})
}
if(!this.obj[eventName]){
this.obj[eventName] = [callback];
}else{
this.obj[eventName].push(callback);
}
},
// 触发事件 eventName
emit: function(eventName) {
//你的代码 发布事件
if(this.obj[eventName]){
for(var i = 0; i < this.obj[eventName].length; i++){
this.obj[eventName][i](arguments[1]);
}
}
}
}; // 测试1
Event.on('test', function(result) {
console.log(result);
});
Event.on('test', function() {
console.log('test');
});
Event.emit('test', 'hello world'); // 输出 'hello world' 和 'test' // 测试2
var person1 = {};
var person2 = {}; Object.assign(person1, Event);
Object.assign(person2, Event); person1.on('call1', function() {
console.log('person1');
}); person2.on('call2', function() {
console.log('person2');
}); person1.emit('call1'); // 输出 'person1'
person1.emit('call2'); // 没有输出
person2.emit('call1'); // 没有输出
person2.emit('call2'); // 输出 'person2' </script>
三、组合模式:
组合模式又称部分-整体模式,将对象组合成树形结构以表示“部分整体”的层次结构。
<script type="text/javascript">
//订单系统 票务系统 酒店系统 function Ticket(){ }
Ticket.prototype.create = function(){
console.log("创建了机票订单");
} function Hotel(){ }
Hotel.prototype.create = function(){
console.log("创建了酒店订单");
} function Order(){
this.orders = [];
}
Order.prototype.addOrder = function(order){
this.orders.push(order);
return this;
}
Order.prototype.create = function(){
for(var i = 0; i < this.orders.length; i++){
this.orders[i].create();
}
} var order = new Order();
order.addOrder(new Ticket()).addOrder(new Ticket())
.addOrder(new Hotel()); order.create();
</script>
javascript中常见的三种开发模式的更多相关文章
- APP的三种开发模式
转载于http://pleasureswx123.github.io/2014/09/15/APP%E7%9A%84%E4%B8%89%E7%A7%8D%E5%BC%80%E5%8F%91%E6%A8 ...
- ASP.NET的三种开发模式
前言 ASP.NET 是一个免费的Web开发框架,是由微软在.NET Framework框架中所提供的,或者说ASP.NET是开发Web应用程序的类库,封装在System.Web.dll 文件中.AS ...
- 《ASP.NET MVC4 WEB编程》学习笔记------Entity Framework的Database First、Model First和Code Only三种开发模式
作者:张博出处:http://yilin.cnblogs.com Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发 ...
- EF3:Entity Framework三种开发模式实现数据访问
前言 Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发流程大相径庭,开发体验完全不一样.三种开发模式各有优缺点,对 ...
- Entity Framework:三种开发模式实现数据访问
原文地址 http://blog.csdn.net/syaguang2006/article/details/19606715 前言 Entity Framework支持Database First. ...
- 请写出JavaScript中常用的三种事件。
请写出JavaScript中常用的三种事件. 解答: onclick,onblur,onChange
- JavaScript中创建对象的三种方式!
JavaScript中创建对象的三种方式! 第一种 利用对象字面量! // 创建对象的三种方式! // 1 对象字面量. var obj = { // 对象的属性和方法! name: 'lvhang' ...
- 实现JavaScript中继承的三种方式
在JavaScript中,继承可以通过三种手法实现原型链继承 使用apply.call方法 对象实例间的继承. 一.原型链继承 在原型链继承方面,JavaScript与java.c#等语言类似 ...
- .NET EF框架的安装、及三种开发模式
一.EF框架的安装: 要在VS(如Visual Studio 2012)中使用EF框架,就需要先进行安装. 我们需要给这个应用安装EntityFramework包,引入EF框架相关的内容,我们需要引入 ...
随机推荐
- 安卓app开发-03-项目的基本开发步骤
android项目的基本开发步骤 这里分享一下开发 安卓 app 的流程,当然有些感觉不必要,其实不然,前期工作也是极为重要的额,就像开发的时候如果目标不对的话,到后期后很迷的,所以一定要提前做好规划 ...
- JDK自带工具native2ascii
背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...
- PMP项目管理
http://blog.sina.com.cn/s/blog_a3922d430102wv38.html https://www.zhihu.com/question/19882243 最近学习pmp ...
- c# 控制台定时程序
using System; using System.Timers; namespace DaoChuCore2 { class Program { static void Main(string[] ...
- eclipse直接使用tomcat安装程序的webapp目录调试
感谢此文:http://blog.csdn.net/soszou/article/details/23673133 本文很多技术及操作来源于此文 需求:因为微信方面的开发调试.为了测试方便,直接构建了 ...
- 高级mask应用
高级mask应用 用mask做遮罩可以实现复杂的效果: 用来形成遮罩的图片: 原始图片: 如果你熟悉Photoshop,那这种效果绝对是你的菜,看代码你会秒懂...... // // RootView ...
- HBase编程 API入门系列之create(管理端而言)(8)
大家,若是看过我前期的这篇博客的话,则 HBase编程 API入门系列之put(客户端而言)(1) 就知道,在这篇博文里,我是在HBase Shell里创建HBase表的. 这里,我带领大家,学习更高 ...
- 在Eclipse中通过build.xml导入工程
http://www.zihou.me/html/2012/10/18/7868.html
- JavaScript的事件的处理函数(鼠标,键盘,HTML)
事件处理函数概述 JavaScript 可以处理的事件类型为:鼠标事件.键盘事件.HTML 事件 所有的事件处理函数都会都有两个部分组成,on + 事件名称,例如 click 事件的事件处理函数就是: ...
- Linux磁盘管理.md
df df 即“可用磁盘”disk free,用于显示文件系统的磁盘使用情况.默认情况下 df 命令将以每块 1K 的单位进行显示所有当前已挂载的文件系统,如果你想以人类易读的格式显示 df 命令的输 ...