最近也在学设计模式,现在就讲讲代理模式。代理分为静态代理和动态代理。
首先是明确代理模式的各个角色。1、抽象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。即目标对象和代理对象要有相同的行为,当让目标对象也可以有自己的行为。
2、目标对象角色:定义了代理对象所代表的目标对象。简而言之就是代理对象所代理的具体对象。
3、代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端将具体的调用传递给目标对象之前或之后执行某个操作,而不是单纯地将调用传递给目标对象。
代码的实现。
首先定义抽象角色,他是代理对象和具体对象的共同接口。可以是接口,也可以是抽象类。
//抽象角色 定义的是一种类型 具有某种共同行为的类型
public interface ProxyInterface{
//定义行为,代理对象和具体对象的共同行为
public void run();
}
//定义具体对象 也要实现抽象角色
public class SpecificObj implements ProxyInterface{
public void run(){
//执行具体的方法
System.out.println("执行具体对象的方法");
}
}
//定义代理角色 继承抽象角色 重写抽象角色的行为
public class ProxyDemo implements ProxyInterface{
//在这里维护一个私有的具体对象
private ProxyInterface target;
//定义构造函数,参数是具体要代理的对象
public ProxyDemo (ProxyInterface target){
this.target=target;
}
//这里定义代理的行为,即重写了上面的run方法
public void run(){
//调用具体对象前的操作
this.target.run();//调用具体对象的行为
//调用具体对象后的操作
}
}
public class MainTest {
public static void main(Strings[] args){
ProxyInterface proxy = new ProxyDemo (new SpecificObj ());
proxy .run();
}
}
//上面是静态代理的实现方式