(function(){
//门面
function addEvebtFacade(el,type,fn){
if(window.addEventListener){
//使用与火狐浏览器
alert(1);
el.addEventListener(type,fn,false);
}else if(window.attachEvent){
//适用于IE的
alert(2);
el.attachEvent("on"+type,fn);
}else{
alert(3);
el["on"+type] = fn;
}
}
document.write("<a id='but1' href='#'>click</a>");
var el = document.getElementById("but1");
addEvebtFacade(el,"click",function(){
alert("ok")
})
})()
/**
* 用2个DAO来体现门面模式
*/
(function(){
//人员类
var PersonDao = new Interface("PersonDao",["getInfo","learn",
"marry"]);
var Person = function(){
this.name = "YUNFENGCHENG";
this.address = "BEIJING";
this.getInfo = function(){
return "名字: "+this.name +" 地址: "+this.address;
}
this.learn = function(){
document.write("学习");
}
this.marry = function(){};
//验证实现的接口
Interface.ensureImplements(this,PersonDao);
}
//DOG DAO
var DogDao = new Interface("DogDao",["call","run","getInfo"]);
var Dog = function(){
this.name = "DAHUANG";
this.getInfo = function(){
return "狗狗的名字: "+this.name;
}
this.run = function(){};
this.call = function(){};
Interface.ensureImplements(this,DogDao);
}
//需求是现在需要给养的够办了相应宠物领养证件 需要人和狗狗的信息可以
//1.不用门面
//客户端程序
function action(person,dog){
//当做养狗证的号码
var r = "GG"+new Date().getDate()+Math.floor(Math.random()*11);
var str = "办证成功 :编号 "+r
+"<br>主人信息: "+person.getInfo()
+"<br>狗狗的信息: "+dog.getInfo();
document.write(str);
}
action(new Person(),new Dog());
document.write("<br>..........................");
//使用门面模式
//负载的事交给门面来做
function facade(person,dog){
//当做养狗证的号码
var r = "GG"+new Date().getDate()+Math.floor(Math.random()*11);
this.str = "办证成功 :编号 "+r
+"<br>主人信息: "+person.getInfo()
+"<br>狗狗的信息: "+dog.getInfo();
}
facade.prototype.action = function(){
return this.str;
}
//客户端程序
function action2(person,dog){
document.write(new facade(person,dog).action());
}
action2(new Person(),new Dog())
//用了门面模式客户端代码就变的如此的简单了
})()

js38---门面模式的更多相关文章

  1. javaEE设计模式——门面模式

    1.本节内容 门面模式的意图介绍 门面模式带来的好处 门面模式的应用场景 实现模式的3中方式:POJO.无状态与有状态回话Bean门面 有状态与无状态回话Bean门面的重要差别 关于门面模式使用的警告 ...

  2. 门面模式的典型应用 Socket 和 Http(post,get)、TCP/IP 协议的关系总结

    门面模式的一个典型应用:Socket 套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息: 连接使用的 ...

  3. FacadePattern(门面模式)

    /** * 外观模式(门面模式) * @author TMAC-J * 外观模式是通过访问一个前台来实现对子系统的访问,其和代理模式的区别是 * 代理模式是通过代理一个类的形式,也就是说一对一的关系 ...

  4. Tomcat源代码-门面模式(Facade)

    从Tomcat源码提炼出设计模式-门面设计模式: 概念 外部访问内部,耦合度增加,不利于扩展.而门面模式在内部基础上进行再度封装,只提供外部想要的方法.这时访问方式由“外部---内部”变为了“外部-- ...

  5. 说说设计模式~门面模式(Facade)

    返回目录 门面模式(Facade)属于结构型模式的一种,它符合面向对象的封装原则,但又不符合开闭原则,呵呵,今天我们主要说它的优点,不谈缺点. 定义 门面模式,是指提供一个统一的接口去访问多个子系统的 ...

  6. JAVA设计模式之门面模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口 ...

  7. 大熊君说说JS与设计模式之(门面模式Facade)迪米特法则的救赎篇------(监狱的故事)

    一,总体概要 1,笔者浅谈 说起“门面”这个设计模式其实不论新老程序猿都是在无意中就已经运用到此模式了,就像我们美丽的JS程序员一样不经意就使用了闭包处理问题, function Employee(n ...

  8. 【读书笔记】读《JavaScript设计模式》之门面模式

    一.前言 门面模式,也称Facade(外观)模式.核心的两点作用—— 1> 简化类的接口(让接口变得更加容易理解.容易应用.更加符合对应业务),来掩盖一个非常不同或者复杂的实现 2> 消除 ...

  9. Java 门面模式 浅析

    Java中的门面模式,一般来说他的用途是隐藏一些不希望用户看到的东西,比如方法,变量,并且这些变量是不能够设置成私有的,因为在系统内部有些地方需要调用.在Tomcat的HttpServletReque ...

  10. IOS设计模式之二(门面模式,装饰器模式)

    本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...

随机推荐

  1. IPMI远程管理一点记录

    http://www.07net01.com/storage_networking/IPMIyuanchengguanliyidianjilu_53093_1357975254.html

  2. WebKit载入流程 - 概述

    之前写了几篇载入流程的说明,是从下向上看,有点仅仅见树木不见森林的感觉.经过近期一段时间的学习,有了能加以概括抽象的方法. WebKit载入流程和页面组成是直接相关的,页面就是WebKit要载入的对象 ...

  3. UVA 11991 Easy Problem from Rujia Liu?【STL】

    题目链接: option=com_onlinejudge&Itemid=8&page=show_problem&problem=3142">https://uv ...

  4. 网易2016研发project师笔试题

    网易2016研发project师笔试题 2015/12/9 11:25(网上收集整理的,參考答案在后面,若有错误请大神指出) 1. 运行指令find / -name "test.c" ...

  5. 从 dig(nslookup) bind —— windows 下的域名解析服务器信息的查看

    dig(domain information groper,之所以选择这三个词,在于这三个词的首字母构成的词 dig 也有探索挖掘的含义)本身是 Linux 下的查询 DNS 信息的工具,功能类似 n ...

  6. snowflake算法

    snowflake算法思考 缘起 为什么会突然谈到分布式唯一id呢?原因是最近在准备使用RocketMQ,看看官网介绍: 一句话,消息可能会重复,所以消费端需要做幂等.为什么消息会重复后续Rocket ...

  7. docker 笔记1

    如果想要删除所有container的话再加一个指令: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: docker rm $(doc ...

  8. 关于Javascript的forEach 和 map

    本篇博客转载自 https://blog.fundebug.com/2018/02/05/map_vs_foreach/ 如果你已经有使用JavaScript的经验,你可能已经知道这两个看似相同的方法 ...

  9. android学习笔记五。2、其他组件

    一.ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的 1.使用: 在应用中使用C ...

  10. BFS(广度优先搜索)

    Catch That Cow Farmer John has been informed of the location of a fugitive cow and wants to catch he ...