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

總結:代理類和被代理類實現相同的接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章