【发布时间】:2014-11-25 08:53:05
【问题描述】:
我有一个商业案例,其中需要按顺序发生 3 件事:
- 下载()
- 进程()
- 上传()
现在,抽象类 FileTransfer 提供了 1.downloadFiles() 和 3.upload() 的实现,但不提供 2.process() -- 子类(如 MusicFileTransfer 或 VideoFileTransfer 或 PDFFileTransfer)将做不同的事情在2.process()阶段。
因此,将抽象类设为这样似乎很清楚:
public abstract class FileTransfer {
public void download() {
// implementation provided
}
public abstract void process(); // implementation not provided
public void upload() {
// implementation provided
}
}
但有一个问题——永远不会 永远有一段时间可以让 MusicFileTransfer 在下载之前调用 process()( ) 或任何其他命令。进程必须始终是 1.download(),2.process(),然后 3.upload()。
所以我想像这样:
public void doTransfer() {
// private methods since we want to enforce this order of execution
download(); // implem provided
process(); // abstract method
upload(); // implem provided
}
在 FileTransfer 中环绕这三个调用。 但为了让子类 MusicFileTransfer 覆盖 process() ...它必须是公共的或受保护的(不是私有的)。
我应该怎么做才能解决这个泡菜?有一个公共的 doTransfer() 和一个公共的 process() 并确保 process() 永远不会被调用?还是取消 doTransfer() 并希望顺序始终正确?
【问题讨论】:
标签: java oop design-patterns abstract-class