23種設計模式之代理模式
阿新 • • 發佈:2018-12-11
一、代理模式及其作用(靜態代理)
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);
}
}
總結:代理類和被代理類實現相同的介面