今天扣丁学堂Java培训之详细介绍首代理模式,首先ProxyPattern(即:代理模式),23种常用的面向对象软件的设计模式之一。
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
(3).高扩展性
结构
一个是真正的你要访问的对象(目标类),另一个是代理对象,真正对象与代理对象实现同一个接口,先访问代理类再访问真正要访问的对象。
案例代码
举个例子,假如说你走在大街上捡到一张小卡片,上面有一个美女头像和一个电话号码,上面写着招聘保姆请拨打该电话,于是你拨打电话,电话那头不是美女小姐姐在接电话,而是一个老大妈在接电话,跟你商量招聘保姆的价格,那这个老大妈我们可以认为是美女小姐姐的代理对象,用手动代理的方式来模拟一下。一不小心开了个车,听不懂的就算啦。。。
目标类和代理类所实现的接口代码
packagecom.proxy;
publicinterfaceWorkInter{
voidworkInNight(doublemoney);
voidworkInDay(doublemoney);
}
目标类代码
packagecom.proxy;
publicclassXJJimplementsWorkInter{
@Override
publicvoidworkInNight(doublemoney){
System.out.println("滴滴滴~~~夜班干活啦");
}
@Override
publicvoidworkInDay(doublemoney){
//TODOAuto-generatedmethodstub
System.out.println("滴滴滴~~~干活啦");
}
}
代理类代码
packagecom.proxy;
publicclassXJJProxyimplementsWorkInter{
privateXJJxjj;
publicXJJProxy(){
xjj=newXJJ();
}
@Override
publicvoidworkInNight(doublemoney){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidworkInDay(doublemoney){
System.out.println("代理收取提成"+(money/2));
xjj.workInDay(money/2);//小姐姐在干活
System.out.println("完事送回家");
}
}
测试类代码
classQiangGeTest{
publicstaticvoidmain(String[]args){
WorkInterxjjProxy=newXJJProxy();//创建代理类对象
xjjProxy.workInDay(200);
}
}