15.15 混型

        术语混型似乎随着时间的推移拥有了无数的含义,但是其最基本的感念是混合了多个类的能力,以产生一个可以表示混型中所有类型的类。这往往是你最后的手段,它使组装多个类变得简单易行。

        混型的价值之一是它们可以将特性和行为一致的应用于多个类之上。如果想在混型中修改某些东西,作为一种意外的好处,这些修改将会应用于混型所应用的所有类型智商。正是由于此,混型有一点面向切面编程的味道(AOP),而切面经常被建议用来解决混型问题。

使用接口来产生混型效果:

/**
 * 获取时间接口
 */
interface TimeStamped{
    long getStamp();
}

/**
 * 获取时间实现类
 */
class TimeStampedImpl implements TimeStamped {
    private final long timeStamp;

    public TimeStampedImpl(){
        timeStamp = System.currentTimeMillis();
    }

    @Override
    public long getStamp() {
        return timeStamp;
    }
}

/**
 * 序列化接口
 */
interface SerialNumbered {
    long getSerialNumber();
}

/**
 * 序列化实现类
 */
class SerialNumberedImpl implements SerialNumbered{
    //静态初始化赋值为1
    private static long counter = 1;
    //每生成一个类,就先获取静态域中的counter,得到之后先赋值给序列值,然后把counter + 1 赋值给counter,用这个简单的方法来实现序列化
    private final long serialNumber = counter++;

    @Override
    public long getSerialNumber() {
        return serialNumber;
    }
}

/**
 * 基本类接口,提供写入和获取的方法
 */
interface Basic{
    public void set(String val);
    public String get();
}

/**
 * 基本类的实现
 */
class BasicImp implements Basic {
    private String value;
    @Override
    public void set(String val) {
        value = val;
    }
    @Override
    public String get() {
        return value;
    }
}

/**
 * 混型类,拥有基本类,序列化接口,和获取时间的接口功能,但是接口没有具体实现
 */
class Mixin extends BasicImp implements SerialNumbered,TimeStamped{

    //使用代理模式来实现接口的功能
    private TimeStamped t = new TimeStampedImpl();

    private SerialNumbered s = new SerialNumberedImpl();

    @Override
    public long getStamp() {
        return t.getStamp();
    }

    @Override
    public long getSerialNumber() {
        return s.getSerialNumber();
    }
}

public class Mixins {
    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());
    }
}
test string 1 1531060180687 1
test string 2 1531060180688 2


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值