本文共 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/