一、代理模式及其作用(靜態代理)
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);
}
}
總結:代理類和被代理類實現相同的接口