混型可理解为混合多个类的能力,已产生一个可以表示混型中所有类型的类。
package test;
import java.util.Date;
interface TimeStamped {
long getStamp();
}
class Time implements TimeStamped {
private final long timeStamp;
public Time() {
timeStamp = new Date().getTime();
}
public long getStamp() {
return timeStamp;
}
}
interface SerialNumbered {
long getSerialNumber();
}
class SerialNumberedImp implements SerialNumbered {
private static long counter = 1;
private final long serialNumber = counter++;
public long getSerialNumber() {
return serialNumber;
}
}
interface Basic {
public void set(String val);
public String get();
}
class BasicImp implements Basic {
private String value;
public void set(String val) {
value = val;
}
public String get() {
return value;
}
}
/**
* @author chenw
*用接口实现混型,基本上是在使用代理,因此每个混入类型都要求有一个相应的域,然后再Mixin中编写所有必须的方法,将方法调用转达给恰当的对象、
*/
class Mixin extends BasicImp implements TimeStamped, SerialNumbered {
private TimeStamped timeStamp = new Time();
private SerialNumbered serialNumber = new SerialNumberedImp();
@Override
public long getSerialNumber() {
// TODO Auto-generated method stub
return serialNumber.getSerialNumber();
}
@Override
public long getStamp() {
// TODO Auto-generated method stub
return timeStamp.getStamp();
}
}
public class Main {
public static void main(String[] args) {
Mixin mixin1 = new Mixin();
Mixin mixin2 = new Mixin();
mixin1.set("test string 1 ");
mixin2.set("test string 2 ");
System.out.println(mixin1.get() + " " + mixin1.getStamp() + " "
+ mixin1.getSerialNumber());
System.out.println(mixin2.get() + " " + mixin2.getStamp() + " "
+ mixin2.getSerialNumber());
}
}