定义:
代理模式(Proxy Pattern)是对某个对象提供一种名为代理的方式以控制其他对象对这个对象的访问的设计方法。
主要作用:
为其他对象提供一种代理以控制对这个对象的访问。特别地,一个对象不想或者不能直接引用另一个对象,比如一个对象处于客户端,而另一个对象处于服务器,两者进行少量的调用时还好,若两者间调用过多或复杂时,代理模式就可以减少资源浪费,提高效率,作用重大。代理对象在这两个对象间就是中介的作用。
所谓“代理模式”就是在双方间增加一个代理对象,以更好地解决需要不同方法或修改方法的需求,是符合OOP的基本设计原则的常用模式。
例如:假设有一组对象都实现同一个接口,实现同样的方法,但随着需求的变化,这组对象中有一部分对象需要增加一些特有的方法或功能,有两种方法:
1、每一个需要特殊方法的地方都加上这个方法,但是显然这样不科学,很浪费,代码的重用性低,耦合性高。
2、利用代理方式,在代理对象中创建该方法,就可以漂亮地解决了。
生活中的例子:
比如那些明星,明星要和很多人接触,有导演、主持人、厂商、其他明星、唱片公司、形象设计师……这些人都要和明星见面,但见面后说的事不同,方式也有可能不同,但他们都要做同一件时就说约见面的时间和地点。明星自己显然是忙不过吧,而且明星身处位置也有可能和要见面的人相距很远。ok,代理模式帮你解决,于是就有了经纪人。明星就是一个对象,那些有需要和她见面的人就是其他的对象,而经纪人就是代理对象,代理对象代替明星和其他对象交流沟通,安排细节事情,这样明星就可以一心一意地做事。
我的例子如下:
以上面的生活中的例子来讲:
/*假设有一个Star接口,有空的方法maketime()(邀约),
所有的people对象都实现(implements)这个接口,实现maketime()
方法,将people实例化成为一个个人,执行maketime方法,而这些人与明
星还要约见面地点,那么我们既不能在Star接口里增加makeplace()方法,
而每个people中增加makeplace方法又不科学,我们只有增加一个代理类makeProxy,这个代理类里实现maketime和makeplace方法,然后在需
要makeplace方法的地方调用makeProxy即可。*/
public class Test {
/**代理模式
*/
public static void main(String[] args) {
People people1=new People("张艺谋");
people1.maketime("Star");
System.out.println("-----------------------------");
makeProxy maketimer=new makeProxy (people1);
maketimer.maketime("Star","街角咖啡屋");
}
}
public interface Star{
public void maketime(String msg);
}
public class People implements Star{
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name= name;
}
public People(String name1) {
this.name= name1;
}
public void maketime(String msg) {
System.out.println(msg+"!你好,我是"+name+",我想约在:9点");
}
}
public class makeProxy implements Star{
People maketimer;
public makeProxy(Star maketimer) {
this.maketimer=maketimer;
}
public void maketime(String msg) {
maketimer.maketime(msg);
}
public void maketime(String msg,String placename) {
maketimer.maketime(msg);
makeplace(placename);
}
private void makeplace(String placename){
System.out.println("地点是:"+placename);
}
}
}
分享到:
相关推荐
设计模式专题之(六)代理模式---设计模式代理模式示例代码(python--c++)
设计模式 代理模式 设计思想 演过过程 重构过程
设计模式代理模式PPT学习教案.pptx
设计模式--代理模式设计模式--代理模式设计模式--代理模式设计模式--代理模式设计模式--代理模式
ios平台下的代理模式设计实现,最简单的实现,重写了方法签名,信息派发,blog:http://blog.sina.com.cn/s/blog_161d504630102wwvp.html
Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)
设计模式之代理模式 学习
C++实现代理模式,隐藏了真实的对象并且可以扩展其他的非核心功能,还实现了强制代理
设计模式 代理模式 c#
C#设计模式中的代理模式应用实例。
//代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...
Java 设计模式 代理模式介绍,含源码
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
NULL 博文链接:https://lhp--2006.iteye.com/blog/1125302
JAVA设计模式之代理模式实例
.net实现设计模式之代理模式
动态代理设计模式 日志和源码 动态代理设计模式 日志和源码
8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework...
详细而又简单的讲述了java动态代理设计模式