1.顶级接口类--定义共性规则
package com.git.base.designpatterns.proxy;
/**
*
* <p>Title: ReadBook.java</p>
* <p>Description:代理设计模式之 代理抽象类 </p>
* <p>Copyright: Copyright (c) 2016</p>
* <p>Company: Sage</p>
* @author 五虎将
* @date 2016年5月3日下午10:49:06
* @version 1.0
*/
public interface ReadBook {
public void read();
}
2.核心类--定义核心的功能代码
package com.git.base.designpatterns.proxy;
public class ReadBookInstance implements ReadBook{
@Override
public void read() {
System.out.println("读书ing");
}
}
3.代理类 ---实现核心代码外的额外操作
package com.git.base.designpatterns.proxy;
/**
*
* <p>Title: ProxyReadBook.java</p>
* <p>Description:读书的代理类 用于完成读书的主方法外的额外方法</p>
* <p>Copyright: Copyright (c) 2016</p>
* <p>Company: Sage</p>
* @author 五虎将
* @date 2016年5月3日下午10:46:05
* @version 1.0
*/
public class ProxyReadBook implements ReadBook{
private ReadBookInstance read;
/**
* 重点在这里--这里在引申一下就是一个典型的AOP了
* <p>Title: read</p>
* <p>Description: </p>
* @see com.git.base.designpatterns.proxy.ReadBook#read()
*/
@Override
public void read() {
System.out.println("获取到书籍 准备进行读取!");
read.read();//读书主方法
System.out.println("读书结束 书籍归位处理!");
}
public ReadBookInstance getRead() {
return read;
}
public void setRead(ReadBookInstance read) {
this.read = read;
}
}
4.代理模式测试类
package com.git.base.designpatterns.proxy;
public class ProxyTest {
public static void main(String[] args) {
ReadBookInstance read = new ReadBookInstance();
ProxyReadBook proxy = new ProxyReadBook();
proxy.setRead(read);
proxy.read();
}
}