比如设计一个文件系统,linux 上把文件和文件夹都看成文件,那就有一个抽象的文件
abstract class AbstractFile {
protected String name;
AbstractFile(String name) {
this.name = name;
}
}
文件夹里面有一个 HashMap,这里因为可能包含文件或者文件夹,所以使用了抽象类
class Directory extends AbstractFile {
Map<String, AbstractFile> children;
public Directory(String name) {
super(name);
this.children = new HashMap<>();
}
}
文件里有 content
class File extends AbstractFile {
String content;
public File(String name) {
super(name);
this.content = "";
}
}
那比如 ls 操作,因为对于文件和文件夹有不同的处理方式,判断是文件夹后还需要向下转型
for (int i = 1; i < path.length; i++) {
child = curFolder.children.get(path[i]);
if (child instanceof Directory) {
curFolder = (Directory) child;
}
}
感觉使用 instanceof 和向下转型不是特别好,但是面对 OOD 总是抑制不住地想多弄几个继承...
如果不用继承,只有一个 File 类,里面加一个 isFile 变量,判断的部分还是会存在,会是一个更好的方案吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.