设计模式之禅笔记-代理模式

来源:互联网 发布:网站源码查询 编辑:程序博客网 时间:2024/06/05 02:31
代理模式
代理模式(Proxy Pattern)是一个使用率非常高的模式。
定义:Provide a surrogate or placeholder for another object to control access it.
为其他对象提供一种代理以控制对这个对象的访问。


代理模式也叫委托模式,它是一项基本设计技巧。许多其他的模式,如状态模式、策略模式、访问者
模式本质上是在更特殊的场合采用了委托模式。

在日常中,代理模式可以提供非常好的访问控制。

类图中的三个角色的定义:
Subject抽象主体角色;
抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。
RealSubject具体主题角色;
也叫做被委托角色、被代理角色、是业务逻辑的执行者。
Proxy代理主题角色
也叫做委托类、代理类。

抽象主题类
public interface Subject{
//定义一个方法
public void request();
}
真实主题类
public class RealSubject implements Subject{
//实现方法
public void request(){
//业务逻辑处理
}
}
RealSubject是一个正常的业务实现类,代理模式的核心就是代理类上。
代理类
public class Proxy implements Subject{
//要代理哪个实现类
private Subject subject = null;
//默认被代理者
public Proxy(){
this.subject = new Proxy();
}
//通过构造函数传递代理者
public void request(){
this.before();
this.subject.request();
this.afer();
}
//预处理
private void before(){
//do something
}
//善后处理
private void after(){
//do something
}
}

代理模式的优点:
职责清晰;
高扩展性;
智能化;

代理模式的扩展:
1、普通代理
普通代理模式的约束问题,尽量通过团队内的编程规范类约束,因为每一个主题类是可被重用的和
可维护的,使用技术约束的方式对系统维护是一种非常不利的因素。
2、强制代理
在new一个真实主题类的时候,返回了一个代理对象。
3、代理是有个性的
代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截
和过滤。
4、虚拟代理
虚拟代理(Virual Proxy)
判断方法中主题对象被创建,就是虚拟代理。
5、动态代理
相对来说:自己写代理类的方式就是静态代理。
面向横切面编程,就是AOP(Aspect Oriented Programming),其核心就是采用了动态代理机制。

动态代理类
public class GamePlayIH implements InvocationHandler{
//被代理者
Class cls = null;
//被代理的实例
Object obj = null;
//我要代理谁
public GamePlayIH(Object _obj){
this.obj = _obj;
}
//调用被代理的方法
public Object invoke(Object proxy, Method, Object[] args) throws Throwable{
Object result = method.invoke(this.obj, args);
return result;
}
}
原创粉丝点击