1 package com.shejimoshi.structural.Proxy; 2 3 4 /** 5 * 功能:為其他對象提供一種代理以控制這個對象的訪問 6 * 適用:1、遠程代理,為一個對象在不同的地址空間提供局部代表 7 * 2、虛代理,根據需要創建開銷很大的對象 8 * 3、保護代理
1 package com.shejimoshi.structural.Proxy; 2 3 4 /** 5 * 功能:為其他對象提供一種代理以控制這個對象的訪問 6 * 適用:1、遠程代理,為一個對象在不同的地址空間提供局部代表 7 * 2、虛代理,根據需要創建開銷很大的對象 8 * 3、保護代理,控制對原始對象的訪問 9 * 4、智能指引,取代了簡單的指針,它在訪問對象時執行了一些附加操作 10 * 時間:2016年2月29日上午10:13:55 11 * 作者:cutter_point 12 */ 13 public interface Person 14 { 15 public void surfTheInternet(); 16 }
1 package com.shejimoshi.structural.Proxy; 2 3 4 /** 5 * 功能:這個類代表自己 6 * 時間:2016年2月29日上午10:18:23 7 * 作者:cutter_point 8 */ 9 public class Myself implements Person 10 { 11 //自己交的話上網費 12 private int money; 13 private String name; 14 15 public Myself(String name, int mon) 16 { 17 this.money = mon; 18 this.name = name; 19 } 20 21 public Myself(Myself m) 22 { 23 this.money = m.money; 24 this.name = m.name; 25 } 26 27 @Override 28 public void surfTheInternet() 29 { 30 StringBuffer str = new StringBuffer(name); 31 str.append("交了").append(money).append("元在上網"); 32 System.out.println(str.toString()); 33 } 34 35 public int getMoney() 36 { 37 return money; 38 } 39 40 public void setMoney(int money) 41 { 42 this.money = money; 43 } 44 45 public String getName() 46 { 47 return name; 48 } 49 50 public void setName(String name) 51 { 52 this.name = name; 53 } 54 55 56 57 }
1 package com.shejimoshi.structural.Proxy; 2 3 4 /** 5 * 功能:別人帶我交上網費用 6 * 時間:2016年2月29日上午10:22:07 7 * 作者:cutter_point 8 */ 9 public class Other implements Person 10 { 11 private int promoney; //代理費 12 private String name; //代理人名 13 private Myself cutter_point; //上網人 14 15 public Other(String name, int mon, Myself cutter) 16 { 17 this.promoney = mon; 18 this.name = name; 19 //幫誰交多少錢 20 cutter_point = new Myself(cutter); 21 } 22 23 @Override 24 public void surfTheInternet() 25 { 26 StringBuffer str = new StringBuffer(name); 27 str.append("代替").append(cutter_point.getName()).append("交了").append(cutter_point.getMoney()).append("元網費"); 28 str.append("收取了").append(promoney).append("元代理費"); 29 System.out.println(str.toString()); 30 } 31 32 }
1 package com.shejimoshi.structural.Proxy; 2 3 4 /** 5 * 功能:測試代理功能 6 * 時間:2016年2月29日上午10:27:02 7 * 作者:cutter_point 8 */ 9 public class Test 10 { 11 public static void main(String[] args) 12 { 13 Other o = new Other("趙信", 2, new Myself("cutter_point", 20)); 14 o.surfTheInternet(); //這裡是趙信去交網費,但是high的是cutter_point,沒趙信什麼事 15 } 16 }
顯示結果:
趙信代替cutter_point交了20元網費收取了2元代理費