我来自C ++,现在正在上Java类,更专门地研究设计模式。上一堂课,教授给了我们一个示例项目,以帮助我们开始使用Prototype模式,并且项目中有一个接口声明,我不太理解(也没有问教授:/)

package pattern.prototype.impl;

public interface IPrototype<T extends IPrototype> extends Cloneable {

    //clone: Permite realizar una clonacion superficial del prototipo.
    public T clone();

    //deepClone: Permite realizar una clonación profunda del prototipo.
    public T deepClone();
}


谁能给我有关在此上下文T中使用参数IPrototype<T extends IPrototype>的某种解释。它的目的是什么?是必要的还是仅仅是一种方法?

谢谢

最佳答案

这称为“好奇地重复发生的模板模式”。顾名思义,它是使用C ++编写的使用模板的代码的发现,但是,该模式也适用于Java中的泛型。

在这里,我可以实现以下接口:

public class ConcretePrototype implements IPrototype<ConcretePrototype > {
    @Override
    public ConcretePrototype clone() { ... }

    @Override
    public ConcretePrototype deepClone() { ... }
}


注意重写方法的方法签名。基本接口IPrototype不了解ConcretePrototype,但是,通过使用CRTP,我们可以强制ConcretePrototype返回其自身类型的值。

07-25 21:34