Java abstract class 包含一个映射变量,subclass 使用不同的实现来初始化映射

Java abstract class contains a map variable, subclass initialize the map using different implementation

我有一个包含映射变量的抽象 class,对于扩展抽象 class 的子class,我想使用不同的实现来初始化映射。

例如:

public abstract class Abs() {
    protected Map<Object, Object> map;
}

public class classA extends Abs {
    public classA() {
        map = new HashMap<>();
    }
}

public class classB extends Abs {
    public classB() {
        map = new ConcurrentHashMap<>();
    }
}

public class classC extends Abs {
    public classC() {
        map = new LinkedHashMap<>();
    }
}

我的问题是:是否有针对这种实现的当前设计模式?又因为在抽象class中,我们没有初始化map,有什么顾虑吗?

要强制每个子类提供一个地图实例,您可以简单地要求它们将其作为构造函数参数提供:

public abstract class Abs {

    private Map<Object, Object> map;

    protected Abs(Map<Object, Object> map) {
        this.map = map;

        //you can even validate:
        if(null == this.map) throw new IllegalArgumentException("...");
    }
}

public class classA extends Abs {
    public classA() {
        super(new HashMap<Object, Object>());
    }
}

//all other subclasses follow the same logic