JAVA设计模式:代理模式
最近公司从新开发一个项目,为此对老的代码进行评估分析发现有些地方是可以采用代理模式来进行的,为此对代理模式进行了一次理解:
代理模式:即为指定的目标对象提供一个代理商,由代理商来完成对目标对象的操作。
代理类图:

抽象对象角色或者接口角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方就都可以使用代理对象。
目标对象角色:定义了所需要代理对象的真实对象。
代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象通常在客户端调用目标对象之前或之后,执行某个操作,而不是单纯直接调用真实对象。
接口:
public interface Subject
{
void doSomething();
}
目标对象角色:
package com.njupt.study.designmodle.proxy;
public class RealSubject implements Subject {
@Override
public void doSomething()
{
System.out.println("做些什么呢?");
}
}
代理对象角色:
package com.njupt.study.designmodle.proxy;
public class ProxySubject implements Subject {
private RealSubject realSubject;
public ProxySubject()
{
if(realSubject == null)
{
realSubject = new RealSubject();
}
}
@Override
public void doSomething()
{
System.out.println("befor do something");
realSubject.doSomething();
System.out.println("after do something");
}
}
客户端访问:
package com.njupt.study.designmodle.proxy;
public class Client {
/**
* @param args
*/
public static void main(String[] args)
{
Subject subject = new ProxySubject();
subject.doSomething();
}
}
输出:

总结:
代理模式的功能 : 通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端使用这个代理对象来操作真实的对象(当客户端操作这个代理对象的时候,实际上功能最终还是会由真实的对象来完成,只不过是通过代理操作的,也就是客户端操作代理,代理操作真正的对象)

下面以人去买车来作为实例讲解如下:
抽象的接口:
package com.njupt.study.designmodle.proxy; /**
* 新建一个买车的接口
* @author Pony
*
*/
public interface Buy_Car
{
public void buy_mycar();
}
真实对象:
package com.njupt.study.designmodle.proxy; public class People implements Buy_Car
{ private int cash;
private String vip;
private String username; @Override
public void buy_mycar() {
System.out.print(username+"是vip 客户,可以直接购买新车!");
} public int getCash() {
return cash;
} public void setCash(int cash) {
this.cash = cash;
} public String getVip() {
return vip;
} public void setVip(String vip) {
this.vip = vip;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} }
代理对象;
package com.njupt.study.designmodle.proxy; /**
* people类不能拥有车,必须经过proxy代理类的认证,符合条件之后才可以拥有车辆,新建一个代理,这个代理类来考察当前的people是否有资格进行买车:
* @author Pony
*
*/
public class ProxyClass implements Buy_Car
{
private People people; public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
} @Override
public void buy_mycar()
{
if (people.getVip() == "vip")
{
people.buy_mycar();
return;
}
if (people.getCash() >= 50000)
{
System.out.println(people.getUsername() + "买了新车,交易结束!");
} else {
System.out.println(people.getUsername() + "钱不够,不能买车,继续比赛!");
} } }
客户端:
package com.njupt.study.designmodle.proxy;
public class RunClient {
/**
* @param args
*/
public static void main(String[] args) {
People people_1 =new People();
people_1.setCash(60000);
people_1.setUsername("jeck");
People people_2 =new People();
people_2.setCash(40000);
people_2.setUsername("rose");
People people_3 =new People();
people_3.setCash(0);
people_3.setUsername("tom");
people_3.setVip("vip");
ProxyClass proxy_buy = new ProxyClass();
proxy_buy.setPeople(people_1);
proxy_buy.buy_mycar();
proxy_buy.setPeople(people_2);
proxy_buy.buy_mycar();
proxy_buy.setPeople(people_3);
proxy_buy.buy_mycar();
}
}
运行结果如下:

JAVA设计模式:代理模式的更多相关文章
- Java设计模式-代理模式之动态代理(附源代码分析)
Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...
- JAVA 设计模式 代理模式
用途 代理模式 (Proxy) 为其他对象提供一种代理以控制对这个对象的访问. 代理模式是一种结构型模式. 结构
- Java设计模式の代理模式
目录 代理模式 1.1.静态代理 1.2.动态代理 1.3.Cglib代理 代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是 ...
- Java设计模式 - 代理模式
1.什么是代理模式: 为另一个对象提供一个替身或占位符以访问这个对象. 2.代理模式有什么好处: (1)延迟加载 当你需要从网络上面查看一张很大的图片时,你可以使用代理模式先查看它的缩略图看是否是自己 ...
- Java设计模式—代理模式
代理模式(Proxy Pattern)也叫做委托模式,是一个使用率非常高的模式. 定义如下: 为其他对象提供一种代理以控制对这个对象的访问. 个人理解: 代理模式将原类进行封装, ...
- Java设计模式——代理模式实现及原理
简介 Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术.生活中的方方面面都可以虚拟到代码中.代理模式所讲的就是现实生活中的这么一个概念:中介. 代理模式的定义:给某一个对象提 ...
- Java设计模式-代理模式(Proxy)
其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你 ...
- Java设计模式--代理模式+动态代理+CGLib代理
静态代理 抽象主题角色:声明真实主题和代理主题的共同接口. 代理主题角色:代理主题内部含有对真实主题的引用,从而在任何时候操作真实主题对象:代理主题提供一个与真实主题相同的接口,以便在任何时候都可以代 ...
- Java设计模式——代理模式
public interface People { public void work(); } public class RealPeople implements People { public v ...
- Java 之 设计模式——代理模式
设计模式——代理模式 一.概述 1.代理模式 (1)真实对象:被代理的对象 (2)代理对象:代理真实对象的 (3)代理模式:代理对象代理真实对象,达到增强真实对象功能的目的 二.实现方式 1.静态代理 ...
随机推荐
- 7 -- Spring的基本用法 -- 12...
7.12 Spring 3.0 提供的表达式语言(SpEL) Spring表达式语言(简称SpEL)是一种与JSP 2 的EL功能类似的表达式语言,它可以在运行时查询和操作对象图.支持方法调用和基本字 ...
- ARM交叉编译工具链分类说明
转载整理自:http://www.veryarm.com/cross-tools 从授权上,ARM交叉编译工具链分为免费授权版和付费授权版. 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自 ...
- IOS软件国际化(本地化Localizable)
IOS软件国际化(本地化Localizable) iPhone是支持语言最多的手机,它支持各国语言及中国少数名族如蒙古等语言,这也是好多少数名族都用苹果的原因.在这一点上我们自主品牌还是要多学习学习. ...
- C语言-表达式
表达式是使用运算符连接起来的式子,C语言中的表达式有以下几种: 1.算数运算符 + - * / % 2.赋值运算符 += -= *= /= %= 3.自增.自减 ++ -- a++为先 ...
- oracle关键字(保留字)
其实这个东西可以在oracle 上输入一个sql语句就可以得到: select * from v$reserved_words order by keyword asc; //order 后边不是 ...
- swift button一些简单设置
1,按钮的创建(1)按钮有下面四种类型: UIButtonType.ContactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 UIButtonType.DetailDiscl ...
- Bootstrap兼容IE8
使用BootStrap3.x写的公司一个响应式项目在IE下面错误百出,经过一番折腾.全部解决了IE8下的兼容问题. 这里汇总一下,希望对大家有所帮助. 1. Bootstrap UI整体在IE8下变窄 ...
- Java数据库连接--JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- SVN官方版本下载地址
TortoiseSVN 客户端 & Language packs 语言包 : https://tortoisesvn.net/downloads.html VisualSVN 插件官方地址: ...
- Linux安装配置VPN服务器
一.实验简介 VPN ,中文翻译为虚拟专有网络,英文全称是 Virtual Private Network .现在 VPN 被普遍定义为通过 一个公用互联网络建立一个临时的.安全的连接,是一条穿过混乱 ...