设计模式四 proxy代理模式

代理模式就是多一个代理类出来,替原对象进行一些操作。

代理模式中主要用到类的聚合。为何不适用继承的方式实现,因为在代理模块模式中继承的太不灵活。所以,代理模式主要采用类的聚合,而不是类的继承。

举个栗子:

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();
		
	}
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值