结构型模式之代理模式
继续我们的分享,今天是代理模式,就如我们理解的一样,代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来简介访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要事项相同的接口。
根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理,远程代理,虚拟代理,缓冲代理等,他们应用于不同的场合,满足用户的不同需求。
我们经常去访问一些国外的网站,但是由于国家网络的限制,我们常常会需要通过一些代理服务器去访问我们想要访问的网站,这就是代理模式的应用。
在日常生活中代购就是一种常见的代理模式,我们想要购买一些国外的产品会有一些困难,但是通过代购,找人帮忙卖商品就是所谓的代理模式的应用。
定义:
给一个对象提供一个代理或占位符,并有代理对象来控制对原对象的访问。
在软软件开发中,也有一种设计模式可以提供与代购网站类似的功能,由于某些原因客户端不想或不能直接访问一个对象,此时可以通过一个称之为“代理”的第三者来实现间接访问。
结构:
三个角色:
Subject(抽象主题角色)声明了真是主题和代理主题的共同接口,方便了在任何地方都可以使用代理主题。
Proxy(代理角色):包含了真是的主题引用,可以在任何时候操作真实的主题代理角色中提供了一个与真实主题相同的接口,以便在任何时候都可以代替真是主题。
RealSubject(真实角色):定义了代理角色所代表的真实对象,实现了业务操作。
模式的实现:例如我们常做的软件设计
如此感觉代理模式和我们的三层结构看起来是一样的,对应我们的UI,BLL,DAL层
代理模式分类:
(1)远程代理(Remote Proxy):为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又称为大使(Ambassador)。
(2)虚拟代理(Virtual Proxy):如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。
(3)保护代理(Protect Proxy):控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。
(4)缓冲代理(Cache Proxy):为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
(5)智能引用代理(Smart Reference Proxy):当一个对象被引用时,提供一些额外的操作,例如将对象被调用的次数记录下来等。