打个比喻,我要做某个事情,比如明年我要举行婚礼,这个事情如果交给我自己或是自己的家人来做的话可以想象会有多么的麻烦。
我没有必要自己去操办自己的婚礼,现在不是有很多的婚庆公司吗,只要你说一句话别人会将所有的事情给你办好,你只须做的是做为一个新郎
去参加婚礼就可以了,完了以后把别人的帐给结了。看似很多是复杂的婚礼完了之后,回过来看一下我自己又做了什么呢。我们可以将这一个过程
看做是婚庆公司是我的代理人,代我去做我交代给他的事情。
在程序当中,这样的方法同样是可用的,某个模块要做些什么事情,它可以全全交给它的代理模块去完成,而它只是须要去参与就可以了。、
我们把这一个过程叫做代理:代理又分为 动态代理和静态代理。
下面就简单的谈一下静态代理:
有三个角色分别是 代理类对象 客户类对象 客户类接口(规范客户类对象的行为)
原理是在代理类实现客户类的接口,这样代理类就有了跟客户类相同的行为。代理类中通过注入的客户类的对象调用客户对象的行为,
在它的行为前后加上要为其代理的行为 。代理可以实现多层代理,它的做法很多像是装饰模式一样。这样就可达到静态的代理。
当然除了实现接口的方式可以实现代理以外,还可以使用继承的方式来实现代理,但是使用实现接口的方式要灵活的多。
下面是一个例子:
package com.lovo.subject;
public interface InterfaceSubject {
public void doSomeThing();
}
package com.lovo.subject;
public class ObjSubject implements InterfaceSubject{
@Override
public void doSomeThing() {
// TODO Auto-generated method stub
System.out.println("举办婚礼");
}
}
package com.lovo.agency;
import com.lovo.subject.InterfaceSubject;
public class ObjAgency implements InterfaceSubject{
private InterfaceSubject is ;
public ObjAgency( InterfaceSubject is ){
this.is = is ;
}
@Override
public void doSomeThing() {
// TODO Auto-generated method stub
System.out.println("前期资金的筹备");
System.out.println("新郎新娘准备礼服");
System.out.println("租了一辆 奔驰的婚车");
System.out.println("准备酒席宴请客人");
is.doSomeThing();
System.out.println("送走亲朋好友");
System.out.println("婚礼结束");
}
}
package com.lovo.main;
import com.lovo.agency.ObjAgency;
import com.lovo.subject.ObjSubject;
public class TestMian {
public static void main(String[] args) {
ObjAgency oa = new ObjAgency(new ObjSubject());
oa.doSomeThing();
}
}