Subject.java
1 package cn.itcast.proxy; 2 3 //定义一个抽象类,代理角色和真实角色都要实现这个共同的抽象类 4 public abstract class Subject { 5 //定义一个方法,这个方法就好比中介和房东都有向外租房子的方法 6 public abstract void request(); 7 }
RealSubject.java
1 package cn.itcast.proxy; 2 3 //这个类好比是真正的房东.实现向外租房子的方法 4 public class RealSubject extends Subject{ 5 public void request() { 6 System.out.println("真正的房东向外租房子"); 7 } 8 }
ProxySubject.java
1 package cn.itcast.proxy; 2 3 //这个类是好比是中介(代理房东向外租房子),和房东(RealSubject)共同实现了Subject抽象类(接口) 4 public class ProxySubject extends Subject { 5 //代理类(中介)要有一个真实类(RealSubject)的一个引用 6 private RealSubject realSubject; 7 8 public void request() { 9 this.preRequest();//this就是ProxySubject的一个对象 ProxySubject proxy = new ProxySubject. 10 if(null == realSubject){ 11 realSubject = new RealSubject(); 12 } 13 realSubject.request();//真实角色完成事情 14 this.bacRequest(); 15 } 16 //代理对象可以在真实角色完成的前后增加一些自己的方法. 17 //就好比中介先要领房客看房(preRequest()方法), 18 //然后和房东,房客一起完成租房(request()方法), 19 //最后收取房客钱(bacRequest()方法) 20 private void preRequest(){ 21 System.out.println("中介领房客看房子"); 22 } 23 private void bacRequest(){ 24 System.out.println("中介向房客收钱"); 25 } 26 }
Client.java
1 package cn.itcast.proxy; 2 //这个类就好比是房客要租房子 3 // 4 public class Client { 5 public static void main(String[] args) { 6 Subject porxySubject = new ProxySubject(); 7 porxySubject.request(); 8 } 9 } 10 /* 11 打印内容: 12 中介领房客看房子 13 真正的房东向外租房子 14 中介向房客收钱 15 */
原文:http://www.cnblogs.com/DreamDrive/p/4005069.html