代理模式(Proxy pattern)
代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端对象和目标对象之间起中介的作用。
代理模式涉及到的角色:
- 抽象角色:声明真实对象和代理对象的共同接口。
2.代理角色:代理角色内部含有对真实对象的引用,这样可以操控真实的对象。同时,代理对象提供与真实对象相同的接口,以便在任何时候都能代替真实的对象。另外,代理对 象在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
3.真实角色:它是代理对象所代表的真实角色,是我们最终要引用的对象。
有图会更形象些,看看代理模式的UML图:

接下来看看代码怎样实现的:
Subject接口实现:
public interface Subject {
public void request();
}
Proxy代理类实现:
/**
* 代理类
* @author dcj
*
*/
public class ProxySubject implements Subject{ private RealSubject realSubject; //含有对真实角色的引用 @Override
public void request() { beforeRequest(); if(realSubject == null){
realSubject = new RealSubject();
} realSubject.request(); //真实角色所完成的事情 afterRequest();
} //代理角色附加功能,该方法不一定有,看实际情况需要
private void beforeRequest(){
System.out.println("I'm proxy, I can do something before request");
} //代理角色附加功能,该方法不一定有,看实际情况需要
private void afterRequest(){
System.out.println("I'm proxy, I can do something after request");
} }
真实角色:
public class RealSubject implements Subject{
@Override
public void request() {
System.out.println("I'm realSubject, I perform something");
}
}
客户端类:
public class Client {
public static void main(String[] args) {
Subject subject = new ProxySubject();
subject.request();
}
}
运行结果:

恩,基本就是这样,虽然类的实现和结果都比较简单,但是我们应该更好的去理解这种设计思想。像struts2的拦截器,spring的Aop(aspect oriented programming),其实都运用了代理模式。将这种思想理解了,对框架的学习是很有帮助的。
参考资料:圣思园视频,Head Frist 设计模式
代理模式(Proxy pattern)的更多相关文章
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释
代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...
- 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 13.代理模式(Proxy Pattern)
using System; namespace Test { //抽象角色:声明真实对象和代理对象的共同接口. //代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象, //同时代理 ...
- 设计模式——代理模式(Proxy Pattern)
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...
- 七个结构模式之代理模式(Proxy Pattern)
定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...
- C#设计模式——代理模式(Proxy Pattern)
一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...
- c#设计模式之代理模式(Proxy Pattern)
引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...
随机推荐
- mybatis实战教程(mybatis in action)之二:以接口的方式编程
前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询.请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句:session.select ...
- day27_面向对象进阶
飒飒 : . . . . 六.描述符 1 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协 ...
- 建工发债sql
管理费用 为了得到科目名称,只好再从外面写一层 select a.*, (select b.subjname from bd_accsubj b where b.subjcode=a.scode an ...
- 设计模式-GoF
资源: 下载GOF的书籍: http://download.csdn.net/download/quanbove/6534569 这里总结了模式,但讲的并不准确: http://www.runoob. ...
- bug--service--Caused by java.lang.SecurityException: Unable to start service Intent { }:user 0 is restricted
http://bbs.coloros.com/thread-174655-1-1.html 急!!Service在OPPO系列手机下无法启动,寻求帮助 你好,我是网易邮件事业部1元夺宝开发工程师,最近 ...
- seo高级指令
1.双引号:完全匹配2.减号(-):代表搜索不包含减号后面的启事的页面3.星号(*):是常用的通配符,百度不支持4.inurl:指令用于搜索查询词出现在URL中的页面5.inanchor:指令返回的结 ...
- Codeforces 730I [费用流]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...
- Codeforces 732F [边双联通分量][tarjan]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一个无向图.现在要求给这个无向图的边加上方向. 定义f(x)为从x点出发能够到达的点的数目. 使得MIN(f(x))最大. 思路: 先tarja ...
- Javascript 实现HTML字符串的储存
在js中使用HTML字符串时,可以不用理会字符串的单引号和双引号的转义,因为使用的注释,注释当然什么都可以写. PS:这个有点类似于 php中的 <<<语法(heredoc和nowd ...
- Spark SQL Example
Spark SQL Example This example demonstrates how to use sqlContext.sql to create and load a table ...