1,什么是代理模式?
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
2,代理有什么好处?
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
3,代理模式一般涉及到的角色有:
抽象角色:声明真实对象和代理对象的共同接口;
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
引用设计模式之禅里面的例子:
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。 比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的: 先定义一种类型的女人: package com.cbf4life.proxy;
/** * @author cbf4Life cbf4life@126.com * I'm glad to share my knowledge with you all. * 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人 */ public interface KindWomen {
//这种类型的女人能做什么事情呢? public void makeEyesWithMan(); //抛媚眼
public void happyWithMan(); //happy what? You know that!
} |
一种类型嘛,那肯定是接口,然后定义潘金莲: package com.cbf4life.proxy;
/** * @author cbf4Life cbf4life@126.com * I'm glad to share my knowledge with you all. * 定一个潘金莲是什么样的人 */ public class PanJinLian implements KindWomen {
public void happyWithMan() {
System.out.println( "潘金莲在和男人做那个....." );
} public void makeEyesWithMan() {
System.out.println( "潘金莲抛媚眼" );
} } |
再定一个丑陋的王婆: package com.cbf4life.proxy;
/** * @author cbf4Life cbf4life@126.com * I'm glad to share my knowledge with you all. * 王婆这个人老聪明了,她太老了,是个男人都看不上, * 但是她有智慧有经验呀,她作为一类女人的代理! */ public class WangPo implements KindWomen {
private KindWomen kindWomen;
public WangPo(){ //默认的话,是潘金莲的代理
this .kindWomen = new PanJinLian();
} //她可以是KindWomen的任何一个女人的代理,只要你是这一类型 public WangPo(KindWomen kindWomen){
this .kindWomen = kindWomen;
} public void happyWithMan() {
this .kindWomen.happyWithMan(); //自己老了,干不了,可以让年轻的代替
} public void makeEyesWithMan() {
this .kindWomen.makeEyesWithMan(); //王婆这么大年龄了,谁看她抛媚眼?!
} } |
两个女主角都上场了,男主角也该出现了: package com.cbf4life.proxy;
/** * @author cbf4Life cbf4life@126.com * I'm glad to share my knowledge with you all. * 定义一个西门庆,这人色中饿鬼 */ public class XiMenQing {
/* * 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了, * 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人 * 收了不少好处费,那我们假设一下: * 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很! */ public static void main(String[] args) {
//把王婆叫出来 WangPo wangPo = new WangPo();
//然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏: wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲
wangPo.happyWithMan(); } } |
本文转自:http://www.cnblogs.com/wangchy0927/archive/2012/08/02/2619964.html
相关推荐
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
//代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
Java设计模式之代理模式 1.代理模式 1.1 静态代理 1.2 动态代理 1.3.代理模式使用原因和应用方面
NULL 博文链接:https://871656094.iteye.com/blog/2355335
java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * ...
设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用
设计模式之代理模式Java实现和类设计图,包括静态代理和动态代理
java设计模式【之】JDK动态代理【源码】【场景:帮爸爸买菜】.rar /** * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法...
代理模式(Proxy Pattern)是 23 种设计模式的一种,属于结构型模式。他指的是一个对象本身不做实际的操作,而是通过其他对象来得到自己想要的结果。这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,...
Java中的代理是一种常见的设计模式,它可以帮助我们在不改变原有代码逻辑的情况下,对现有对象进行增强或扩展。在代理模式中,主要有两种类型:静态代理和动态代理。 1.静态代理: 静态代理是指在编译期间就已经确定...
静态代理、装饰者、动态代理1. 静态代理设计模式1.1 ...代理模式是Java常见的设计模式之一。 代理模式是指不直接调用实际对象,而是通过调用代理,来间接的调用实际的对象。 为什么要采用这种间接的形式来调用对象呢?
本人的笔记,关于java基础中设计模式的内容 包括 1.作业回顾 2.内部类 2.1局部内部类 2.2静态内部类 2.3匿名内部类 3.设计模式 3.1单例模式 3.2代理模式 3.3观察者模式 3.4模板模式 4.练习
1.工厂模式 a.简单工厂(静态工厂):一个工厂类根据传入的参数来决定创建哪一类产品的实例,它的核心是工厂类,由于 工厂类中的创建方法是静态的(static)所以简单工厂...3.代理模式:包装对象,以控制对此对象的访问
代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个...
单例设计模式案例演示 单例模式,是一种常用的软件设计模式。通过单例模式可以保证系统中,**应用该模式的这个类只有一个实例**。即一个类只有一个对象实例。 #### 单例设计模式实现步骤 1. 将构造方法私有化,使其...
java静态代理设计模式,学习记录,简单自定义注解编写
代理模式:是一种设计模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象。如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目标对象功能...
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理...
资源列举了设计模式中的静态代理和动态代理的简单java实现,jdk1.8版本经过测试验证,对于想学习设计模式的童靴应该有所帮助