代码结构:
定义以及特征说明:
代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
代理模式的主要优点有:保护、扩展、解耦
代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
代理对象可以扩展目标对象的功能;
代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;
其主要缺点是:降速、增加复杂
在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
增加了系统的复杂度;
抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
代码:
package com.xingsfdz.proxy;
/**
*
* @类名称 SellHouse.java
* @类描述 <pre>卖房接口</pre>
* @作者
* @创建时间 2019年5月6日 下午10:40:31
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019年5月6日
* ----------------------------------------------
* </pre>
*/
public interface SellHouse {
void sell();//提供一个卖的方法
}
package com.xingsfdz.proxy;
/**
*
* @类名称 Owner.java
* @类描述 <pre>业主,真正卖房子的人</pre>
* @作者
* @创建时间 2019年5月6日 下午10:42:55
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019年5月6日
* ----------------------------------------------
* </pre>
*/
public class Owner implements SellHouse{
@Override
public void sell() {
System.out.println("业主卖房...");
}
}
package com.xingsfdz.proxy;
/**
*
* @类名称 Agent.java
* @类描述 <pre>代理商-代理卖房子的人</pre>
* @作者
* @创建时间 2019年5月6日 下午10:44:32
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019年5月6日
* ----------------------------------------------
* </pre>
*/
public class Agent implements SellHouse {
//需要代理的对象 房子所有者
Owner ow = new Owner();
@Override
public void sell() {
beforeSell();//对代理对象的前置操作,相当于aop编程了
ow.sell();//真实主题的执行,真正的卖房人
afterSell();//对代理对象的后置操作,相当于aop编程了
}
public void beforeSell() {
System.out.println("买之前的操作,与业主沟通拿到房子钥匙...");
}
public void afterSell() {
System.out.println("买之后的操作,与买房人沟通,买房给给钱,给其钥匙...");
}
}
package com.xingsfdz.proxy;
/**
*
* @类名称 Test.java
* @类描述 <pre>测试</pre>
* @作者
* @创建时间 2019年5月6日 下午10:54:36
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019年5月6日
* ----------------------------------------------
* </pre>
*/
public class Test {
public static void main(String [] args) {
Agent ag = new Agent();
ag.sell();
}
}
执行结果:
买之前的操作,与业主沟通拿到房子钥匙...
卖房...
买之后的操作,与买房人沟通,买房给给钱,给其钥匙...