java - 进行不同父字段初始化的最佳方法是什么?
问题描述
我有一门课如下
public abstract class MyObjectManager {
private final Map<MyKey, MyObject> objects;
private final MySystem system;
MyObjectManager(MySystem inputSystem) {
system = inputSystem;
// also initialize the "objects" field.
}
public void write(MyKey myKey, MyObject myObject) {...}
public MyObject read(MyKey myKey) {...}
public abstract MyObject getNewestObject();
}
我需要两种类型的 ConcreteManagers,它们将具有不同的地图实现,例如,
一用new LinkedHashMap(CAPACITY_1, LOAD_FACTOR_1, true){ // override the removeEldestEntry(){// logic 1}}
。
其他用途new LinkedHashMap(CAPACITY_2, LOAD_FACTOR_2, false){ // override the removeEldestEntry(){// logic 2}}
。
我不想将地图作为@param 传递,因为地图实现对于每个 ConcreteManager 都是固定的。
我应该使用策略模式还是工厂模式来进行不同的地图初始化?
或者我应该将该objects
字段移动到每个实现类?但是他们对read and write
方法的实现有很多重复。
解决方案
如果我理解您的问题,在我看来,您可以将地图作为参数添加到抽象类,然后在子构造函数中传递具体的地图实例。例如:
public abstract class MyObjectManager {
private final Map<MyKey, MyObject> objects;
private final MySystem system;
MyObjectManager(final Map<MyKey, MyObject> objects, MySystem inputSystem) {
this.objects = objects;
this.system = inputSystem;
}
}
public class ConcreteManager extends MyObjectManager {
public ConcreteManager(MySystem inputSystem) {
super(new LinkedHashMap(CAPACITY_1, LOAD_FACTOR_1, true), inputSystem);
}
}
这种方式满足您的约束:
- Map 类固定为具体的管理器实现
- objects 属性保留在父类中
推荐阅读
- python - 有没有办法使用 Python 或 Linux 从 .txt 文件中创建文件夹目录和 word 文档?
- hardhat - 成本估算工具
- c - 在 Code::Blocks 中使用 gcc 的预处理器指令(宏)中的问题
- node.js - 是否可以使用应用的 svg 过滤器下载视频?反应js
- javascript - 加载html页面时如何触发浏览器插件
- video-streaming - Shaka Player 不适应比特率
- r - 如何在不丢失日期信息的情况下将 xts 转换为 ts?
- javascript - 避免每次用户编辑 Googlesheet 时都有重复的电子邮件(Google 脚本)
- firebase-realtime-database - 如何使用对话流从 Firebase 读取数据?2021
- javascript - 如何根据javascript中的第一个元素对多个嵌套数组的第二个元素进行分组?