package thinking.inner;
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) {
basic.set(val);
}
public String get() {
return basic.get();
}
}
class TimeStamped extends Decorator{
private final long timeStamp;
public TimeStamped(Basic basic) {
super(basic);
timeStamp = new Date().getTime();
}
public long getTimeStamp(){
return timeStamp;
}
}
class SerialNumbered extends Decorator{
private static long count = 1;
private final long serialNumbere;
public SerialNumbered(Basic basic) {
super(basic);
serialNumbere =count++;
}
public long getSerialNumber(){
return serialNumbere;
}
}
public class Decoration{
public static void main(String[] args){
TimeStamped timeStamped1 = new TimeStamped(new Basic());
TimeStamped timeStamped2 = new TimeStamped(new SerialNumbered(new Basic()));
System.out.println(timeStamped1.getTimeStamp());
System.out.println(timeStamped2.getTimeStamp());
//System.out.println(timeStamped2.getSerialNumber());
SerialNumbered serialNumbered1 = new SerialNumbered(new Basic());
SerialNumbered serialNumbered2 = new SerialNumbered(new TimeStamped(new Basic()));
System.out.println(serialNumbered1.getSerialNumber());
System.out.println(serialNumbered2.getSerialNumber());
//System.out.println(serialNumbered2.getTimeStamp());
}
}