【设计模式】12、代理模式
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元代理费