静态代理模式
1、代理模式简介?
组成: 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
2、代理模式的优点?
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
(3).高扩展性
3.uml图
代码:
package com.bjsxt.pattern;
/**
* 代理模式
* 抽象对象,能完成客户需求的接口
* 以租房作为例子
* 第一步、发布租房信息
* 第二步、和客户商谈
* 第三步、交押金和房租
* 第四步、提供房钥匙
* 第五步、客户退房时,退还押金
*
* */
public interface AbstractObj {
//发布信息
public void publishInfo();
//预定
public void negotiate();
//交押金和房租
public void payMoney();
//提供房子钥匙
public void provideKey();
//退还押金
public void returnDeposit();
}
package com.bjsxt.pattern;
public class RealObj implements AbstractObj{
public void publishInfo() {
System.out.println("发布房子信息");
}
public void negotiate() {
System.out.println("用户看到房子信息,和用户商谈!");
}
public void payMoney() {
System.out.println("商谈成功,用户交定金和房租");
}
public void provideKey() {
System.out.println("糖厂社区房东,把钥匙交给客户,让客户入住!");
}
public void returnDeposit() {
System.out.println("用户退房时,退还押金!");
}
}
package com.bjsxt.pattern;
/**
* 代理对象
* 代理一个真实的对象
* */
public class ProxyObj implements AbstractObj{
private RealObj realObj;
//构造一个真实对象
public ProxyObj(RealObj realObj) {
super();
this.realObj = realObj;
}
public void publishInfo() {
System.out.println("发布房子信息");
}
public void negotiate() {
System.out.println("用户看到房子信息,和用户商谈!");
}
public void payMoney() {
System.out.println("商谈成功,用户交定金和房租");
}
//向真实对象发出请求,调用真实对象的业务方法
public void provideKey() {
realObj.provideKey();
}
public void returnDeposit() {
System.out.println("用户退房时,退还押金!");
}
}
public class Client {
public static void main(String[] args) {
//构造一个房东,提供房子
RealObj realObj = new RealObj();
//创建一个代理对象,去代理租房
AbstractObj proxy = new ProxyObj(realObj);
//发布房源
proxy.publishInfo();
//和客户谈判
proxy.negotiate();
//交定金和押金
proxy.payMoney();
//提供钥匙,入住
proxy.provideKey();
//退尾款
proxy.returnDeposit();
}
}
打印结果:
发布房子信息
用户看到房子信息,和用户商谈!
商谈成功,用户交定金和房租
糖厂社区房东,把钥匙交给客户,让客户入住!
用户退房时,退还押金!