博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript设计模式-代理模式(11)
阅读量:4290 次
发布时间:2019-05-27

本文共 2045 字,大约阅读时间需要 6 分钟。

代理(proxy)是一个对象,它可以用来控制对一个对象的访问。它与另外那个对象实现了同样的接口,并且会把任何方法调用传递到那个对象。代理模式最基本的形式是对访问进行控制,代理对象所做的不外乎节制对本地的访问,它不会添加方法或修改方法,也不会简化接口。它实行的接口与本体完全相同,所有对它进行的方法调用都会被传递给本地

//代理模式(proxy):代理也是对象,他的目的就是为了节制(控制)对本体对象的访问var LibraryInterface = new BH.Interface('LibraryInterface', ['addbook', 'findbook', 'checkoutbook', 'returnbook']);var Book = function(id, title, author) {
this.id = id; this.title = title; this.author = author;};//图书馆(本体对象 , 实例化图书馆需要消耗很多的资源)var Library = function(books) {
this.books = books;};Library.prototype = { constructor: Library, addbook: function(book) {
this.books[book.id] = book; }, findbook: function(id) {
if (this.books[id]) { return this.books[id]; } return null; }, checkoutbook: function(id) {
//电脑登记..交押金 return this.findbook(id); }, returnbook: function(book) {
//电脑登记(...已还) //计算费用(计算余额) this.books[book.id] = book; }};//图书馆的代理对象var LibraryProxy = function(books) {
alert('产生代理对象,但是并没有产生真正的本体对象!'); this.books = books; this.library = null; //定义一个空对象};LibraryProxy.prototype = { constructor: LibraryProxy, initializeLibrary: function() {
if (this.library == null) { alert('真正的本体对象!'); this.library = new Library(this.books); } }, addbook: function(book) {
this.initializeLibrary(); //实际上具体做事情的还是本体对象自己本身 this.library.addbook(book); }, findbook: function(id) {
this.initializeLibrary(); return this.library.findbook(id); }, checkoutbook: function(id) {
this.initializeLibrary(); return this.findbook(id); }, returnbook: function(book) {
this.initializeLibrary(); this.library.returnbook(book); }};//实例化的是代理对象:推迟本体对象实例化的时间,什么时候具体去做事情了,再去实例化它// hibernate: get(全查询出来) load(返回代理对象)var proxy = new LibraryProxy({ "01": new Book('01', 'java', 'z3'), "02": new Book('02', 'js', 'z4')});alert(proxy.findbook('01').title);

转载地址:http://sergi.baihongyu.com/

你可能感兴趣的文章
多线程编程
查看>>
Linux网络编程:原始套接字的魔力【上】
查看>>
进程间通信---共享内存
查看>>
进程间通信--信号(进程间通信唯一的异步方式)
查看>>
linux 标准IO缓冲机制探究
查看>>
【转】linux网络编程——套接字(socket)入门
查看>>
【原创】samba移植到android流程
查看>>
【原创】boa服务移植到安卓手机
查看>>
msgrcv error : Identifier removed(ERMID)错误解决;
查看>>
Linux进程间通信——消息队列:
查看>>
linux内核——进程管理
查看>>
(原创)socket学习实验(一)——利用C 语言socket抓取一个网页内容
查看>>
Linux 同步方法剖析--内核原子,自旋锁和互斥锁
查看>>
adb shell中设置android系统内部环境变量!
查看>>
Android ADB中使用find命令
查看>>
(原创)android6.0系统Healthd深入分析
查看>>
(原创)android6.0系统 Doze模式(DeviceIdle)实现与控制逻辑
查看>>
(原创)Android6.0亮屏流程之Keyguard Window绘制
查看>>
(原创)Android6.0亮屏流程分析
查看>>
Intent启动另一个APP里的fragment
查看>>