代理模式就是多一个代理类出来,替原对象进行一些操作。
代理模式中主要用到类的聚合。为何不适用继承的方式实现,因为在代理模块模式中继承的太不灵活。所以,代理模式主要采用类的聚合,而不是类的继承。
举个栗子:
1、先定义一个接口:
package proxy.str;
public interface Task {
public void handle();
}
2、定义三个实现接口类,如下:
2.1 地址类
package proxy.str;
public class AddressTask implements Task{
private Task task;
public AddressTask(Task task){
this.task = task;
}
@Override
public void handle() {
if(this.task!=null){
this.task.handle();
}
System.out.println("深圳物质置地大厦");
}
}
2.2 日志类
package proxy.str;
public class LogTask implements Task{
private Task task;
public LogTask(Task task) {
this.task = task;
}
@Override
public void handle() {
if(this.task!=null){
this.task.handle();
}
System.out.println(this.getClass().getName());
}
}
2.3 时间
package proxy.str;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;
public class TimeTask implements Task{
private Task task;
public TimeTask(Task task) {
super();
this.task = task;
}
@Override
public void handle() {
if(this.task!=null){
this.task.handle();
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateTime = dateFormat.format(new Date());
System.out.println(dateTime);
Long start = System.currentTimeMillis();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Long end = System.currentTimeMillis();
System.out.println( "time:"+(end-start));
}
}
3、测试: 代理主要体现在测试中,这里可以随便代理。
package proxy.str;
public class testMain {
public static void main(String args[]){
AddressTask at = new AddressTask(null);
TimeTask tt = new TimeTask(at);
LogTask lt = new LogTask(tt);
lt.handle();
}
}