打个比喻,我要做某个事情,比如明年我要举行婚礼,这个事情如果交给我自己或是自己的家人来做的话可以想象会有多么的麻烦。
OOAD-设计模式-静态代理模式
原创
©著作权归作者所有:来自51CTO博客作者wulianghuan的原创作品,请联系作者获取转载授权,否则将追究法律责任
我没有必要自己去操办自己的婚礼,现在不是有很多的婚庆公司吗,只要你说一句话别人会将所有的事情给你办好,你只须做的是做为一个新郎
去参加婚礼就可以了,完了以后把别人的帐给结了。看似很多是复杂的婚礼完了之后,回过来看一下我自己又做了什么呢。我们可以将这一个过程
看做是婚庆公司是我的代理人,代我去做我交代给他的事情。
在程序当中,这样的方法同样是可用的,某个模块要做些什么事情,它可以全全交给它的代理模块去完成,而它只是须要去参与就可以了。、
我们把这一个过程叫做代理:代理又分为 动态代理和静态代理。
下面就简单的谈一下静态代理:
有三个角色分别是 代理类对象 客户类对象 客户类接口(规范客户类对象的行为)
原理是在代理类实现客户类的接口,这样代理类就有了跟客户类相同的行为。代理类中通过注入的客户类的对象调用客户对象的行为,
在它的行为前后加上要为其代理的行为 。代理可以实现多层代理,它的做法很多像是装饰模式一样。这样就可达到静态的代理。
当然除了实现接口的方式可以实现代理以外,还可以使用继承的方式来实现代理,但是使用实现接口的方式要灵活的多。
下面是一个例子:
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();
}
}
上一篇:OOAD-设计模式-装饰模式
下一篇:OOAD-设计模式-观察者模式
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
设计模式之代理模式(静态代理)
代理模式 Object obj = new ProxyObject(); obj.action(
设计模式 代理 代理类 System 代理模式 -
设计模式- 代理模式 (静态代理 和 动态代理)
1.代理 (1)意图: &nbs
设计模式 代理 proxy spring bean -
设计模式之代理模式 静态代理和动态代理
welcome to my blog代理模式的定义《大话设计模式》中对于代理模式的描述: 代理
设计模式 java 反射 jdk cglib