代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端对象和目标对象之间起中介的作用。

代理模式涉及到的角色:

  1. 抽象角色:声明真实对象和代理对象的共同接口。

  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)的更多相关文章

  1. 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

    原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...

  2. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...

  3. 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释

    代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...

  4. 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  5. 13.代理模式(Proxy Pattern)

    using System; namespace Test { //抽象角色:声明真实对象和代理对象的共同接口. //代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象, //同时代理 ...

  6. 设计模式——代理模式(Proxy Pattern)

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...

  7. 七个结构模式之代理模式(Proxy Pattern)

    定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...

  8. C#设计模式——代理模式(Proxy Pattern)

    一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...

  9. c#设计模式之代理模式(Proxy Pattern)

    引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...

随机推荐

  1. 如何在IDEA 中使用Git

    1,下载最新的 git 包 地址: https://git-scm.com/download/win 下载便携版 64,32 根据个人爱好   2,解压后随便放个位置即可,例如图: (不太建议使用它自 ...

  2. kafka单节点测试

    ======================命令====================== 启动zookeeper server bin/zookeeper-server-start.sh conf ...

  3. Java在Web项目中读取properties文件

    import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import ...

  4. 【python】调用机器喇叭发出蜂鸣声(Beep)

    ##coding:utf-8 import winsound winsound.Beep(600,6000) #其中600表示声音大小,1000表示发生时长,1000为1秒

  5. Rails :.nil? , .empty?, .blank? .present? 的区别

    .nil? , .empty?, .blank? .present? 的区别 首先这三个都是判空的. 而 .nil? 和 .empty? 是ruby的方法. .blank? 是rails的方法 .ni ...

  6. OA项目笔记-从建立接口 dao impl action jsp等框架实现crud

    1,设计 BaseDao 与 BaseDaoImpl 1,设计接口 BaseDao 1,每个实体都应有一个对应的Dao接口,封装了对这个实体的数据库操作.例 实体 Dao接口 实现类 ======== ...

  7. ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

    mysql安全机制的问题 解决: mysql -P 3306 -h host -u account --secure_auth=off -pmysql -P 端口号 -h 主机地址 -u 账号 --s ...

  8. 【学】React的学习之旅2 - React Component的生命周期

    分成三个状态: Mounted Update Unmounted Mounted:当我们看到组件在浏览器中从无到有的效果的时候,mounted已经结束了,这个组件已经被mounted了 有这个阶段有2 ...

  9. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  10. viewPager--viewpager时,发生内存溢出OOM问题

    两个问题:1.如果图片达到500kb每张,你这个划屏会有顿卡:2.快速滑动有出现0.几秒的白屏.图片越大,顿卡越明显. 回复parcool:500kb的背景算大的了,如果是想做图片墙,viewpage ...