【ThinkingInJava】42、装饰器设计模式

/**
* 书本:《Thinking In Java》
* 功能:装饰器设计模式
* 		装饰器模式使用分层对象来动态透明的向单个对象添加责任。装饰器指定包装在最初的对象周围的所有对象都具有相同的基本接口
* 		某些事物是可装饰的,可以通过将其他类包装在这个可装饰对象的四周,来将功能分层。
* 		装饰器是通过使用组合和形式化结构(可装饰物/装饰器层次结构)来实现的,而混型是基于继承的
* 文件:Decoration.java
* 时间:2015年4月21日10:18:43
* 作者:cutter_point
*/
package Lesson15_generices.decorator;

import java.util.Date;

class Basic
{
	private String value;
	public void set(String val) { value = val; }
	public String get() { return value; }
}

class Decorator extends Basic	//这个里面有类的组合,同时还继承了这个类
{
	protected Basic basic;
	public Decorator(Basic basic) { this.basic = basic; }
	public void set(String val) { this.basic.set(val); }	//传的参数是Basic,但是里面用的value还是从Basic继承来的
	public String get() { return this.basic.get(); }
}

class TimeStamped extends Decorator
{
	private final long timeStamp;

	public TimeStamped(Basic basic)
	{
		super(basic);
		timeStamp = new Date().getTime();
		
	}
	public long getStamp() { return timeStamp; }
}

class SerialNumbered extends Decorator
{
	private static long counter = 1;
	private final long serialNumber = counter++;	//每当创建一个对象的时候,就对其进行一次计数
	public SerialNumbered(Basic basic) { super(basic); }
	public long getSerialNumber() { return serialNumber; }
}

public class Decoration
{

	public static void main(String[] args)
	{
		TimeStamped t = new TimeStamped(new Basic());
		TimeStamped t2 = new TimeStamped(new SerialNumbered(new Basic()));
//		t2.getSerialNumber();		//是错的,无法调用这个函数,就算后面创建的是SerialNumbered这个参数
		System.out.println(t.getStamp()+"  "+t2.getStamp());
		SerialNumbered s = new SerialNumbered(new Basic());
		SerialNumbered s2 = new SerialNumbered(new TimeStamped(new Basic()));
		System.out.println(s.getSerialNumber()+"  "+s2.getSerialNumber());
//		s2.getStamp();		//无法调用
	}

}


输出:

1431994101438  1431994101438
2  3






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值