1. 程式人生 > >23種設計模式之代理模式

23種設計模式之代理模式

一、代理模式及其作用(靜態代理)

  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);
}
}

總結:代理類和被代理類實現相同的介面