【设计模式】第15章·代理模式
【设计模式】第15章·代理模式
一、代理模式概述
由于某些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。
定义如下:
代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。
二、代理模式结构和实
【设计模式】第15章·代理模式
一、代理模式概述
由于某些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。
定义如下:
代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。
二、代理模式结构和实现
2.1 代理模式结构
代理模式包含个角:
- Subject(抽象主题角):声明了真实主题和代理主题的共同接口。
- Proxy(代理主题角):包含了对真实主题的引用。
- RealSubject(真实主题角):实现了真实的业务操作。
2.2 代理模式实现
代理模式有很多种实现,根据目的和实现方式不同可以分为很多种。
本文demo案例介绍下静态代理和JDK动态代理这两种。
静态代理
//抽象主题对象
public interface Subject {void request();}
//具体的真实主题对象
public class RealSubject implements Subject{@Overridepublic void request() {println(真实主题的业务方法);}
}
//代理对象
public class ProxySubject implements Subject{private Subject subject = new RealSubject();@Overridepublic void request() {println(前置方法代码);subject.request();println(后置方法代码);}
}
动态代理
//抽象主题对象
public interface IUserDao {void save();}
//具体的真实主题对象
public class UserDao implements IUserDao{@Overridepublic void save() {println(保存了数据);}
}
//代理对象
public class IUserDaoFactory {//代理的目标对象private Object target;public IUserDaoFactory(Object target) { = target;}//对目标对象进行动态代理public Object getProxyInstance() {return (target.getClass().getClassLoader(),target.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {println(做一些操作A);Object resultValue = method.invoke(target, args);println(做一些操作B);return resultValue;}});}
}
//客户端
public class Client {public static void main(String[] args) {//静态代理Subject subject = new ProxySubject();subject.request();//JDK动态代理demoIUserDao userDao = new UserDao();IUserDaoFactory factory = new IUserDaoFactory(userDao);IUserDao proxyUserDao = (IUserDao) factory.getProxyInstance();proxyUserDao.save();}
}
三、代理模式优缺点和适用环境
.1 代理模式的优点
- 协调调用者和被调用者,在一定程度上降低了系统的耦合度;
- 系统具有较好的灵活性和可扩展性,客户端可以针对抽象主题角进行编程,增加和更换代理类无需修改源码,符合开闭原则。
.2 代理模式的缺点
- 有些类型的代理模式可能会造成请求的处理速度变慢;
- 实现代理模式需要一些额外的工作,而且有些代理模式的实现过程较为复杂。
. 代理模式的适用环境
代理模式的类型较多,不同类型的代理模式有不同的优缺点,应用于不同的场合。
- 客户端对象需要访问远程主机中的对象时,使用远程代理。
- 使用较少资源对象代表较大资源对象时,使用虚拟代理。
- 控制对象为不同用户提供不同的权限时,使用保护代理。
- 为一个对象提供额外的操作,使用智能引用代理。
- 为被频繁访问的操作结果提供缓存,加速响应,使用缓存代理。
【参考文献】:
本文是根据刘伟的《Java设计模式》一书的学习笔记,仅供学习用途,勿做其他用途,请尊重知识产权。
【本文代码仓库】:.git
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2024-01-10 12:28:29
推荐阅读
留言与评论(共有 17 条评论) |
本站网友 中国黄金交易网 | 30分钟前 发表 |
代理模式结构和实现 2.1 代理模式结构 代理模式包含个角: Subject(抽象主题角):声明了真实主题和代理主题的共同接口 | |
本站网友 新视听 | 30分钟前 发表 |
二 | |
本站网友 一鸣 | 29分钟前 发表 |
客户端对象需要访问远程主机中的对象时,使用远程代理 | |
本站网友 中旅国际 | 29分钟前 发表 |
【本文代码仓库】:.git | |
本站网友 武宁县政府网 | 27分钟前 发表 |
Proxy(代理主题角):包含了对真实主题的引用 | |
本站网友 怀孕初期症状 | 8分钟前 发表 |
Object[] args) throws Throwable {println(做一些操作A);Object resultValue = method.invoke(target | |
本站网友 万科西街庭院 | 23分钟前 发表 |
为被频繁访问的操作结果提供缓存,加速响应,使用缓存代理 | |
本站网友 土鳖虫 | 3分钟前 发表 |
使用较少资源对象代表较大资源对象时,使用虚拟代理 | |
本站网友 免费网页在线代理 | 30分钟前 发表 |
Proxy(代理主题角):包含了对真实主题的引用 | |
本站网友 西安婚宴 | 27分钟前 发表 |
【参考文献】: 本文是根据刘伟的《Java设计模式》一书的学习笔记,仅供学习用途,勿做其他用途,请尊重知识产权 | |
本站网友 受精过程 | 5分钟前 发表 |
定义如下: 代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问 | |
本站网友 养胃食品 | 30分钟前 发表 |
Method method | |
本站网友 定慧寺二手房 | 1分钟前 发表 |
代理模式概述 由于某些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式 | |
本站网友 养颜茶有哪些 | 23分钟前 发表 |
控制对象为不同用户提供不同的权限时,使用保护代理 | |
本站网友 巴掌印 | 14分钟前 发表 |
2.2 代理模式实现 代理模式有很多种实现,根据目的和实现方式不同可以分为很多种 | |
本站网友 tri | 14分钟前 发表 |
二 |