一、代理模式及其作用(静态代理)
Proxy Pattern(即:代理模式),23种常用的面向对象软件的设计模式之一
代理模式的定义:
为其他对象(被代理对象)提供一种代理(代理对象)以控制对这个对象(被代理对象)的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点:
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
(3).高扩展性
结构
一个是真正的你要访问的对象(目标类),另一个是代理对象,真正对象与代理对象实现同一个接口,
先访问代理类再访问真正要访问的对象。
代理模式简单案例
- 婚介
- 房屋中介
- 经纪人
- 黄牛
代码:
ZuFangZi.java
public interface ZuFangZi {
public void lookHouse();
public void getMoney(double money);
}
FangDong.java
package com.tf.staticproxy;
public class FangDong implements ZuFangZi {
@Override
public void lookHouse() {
System.out.println("看房东的房子");
}
@Override
public void getMoney(double money) {
System.out.println("房东收到的房租:"+money);
}
}
Zhongjie.java
package com.tf.staticproxy;
public class Zhongjie implements ZuFangZi {
//传入被代理对象
private FangDong fangDong;
public Zhongjie(FangDong fangDong) {
super();
this.fangDong = fangDong;
}
@Override
public void lookHouse() {
System.out.println("中介准备带客户看房");
fangDong.lookHouse();
System.out.println("中介带客户看房完毕");
}
@Override
public void getMoney(double money) {
double zhongjieMoney=3000;
System.out.println("中介收取中介费"+zhongjieMoney);
fangDong.getMoney(money-zhongjieMoney);
}
}
People.java
package com.tf.staticproxy;
public class People {
public static void main(String[] args) {
FangDong fangdong = new FangDong();
Zhongjie zhongjie = new Zhongjie(fangdong);
zhongjie.lookHouse();
zhongjie.getMoney(10000);
}
}
总结:代理类和被代理类实现相同的接口