javascript设计模式-代理模式(11)

代理(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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值