Design patterns 是否建议从该抽象类中的方法调用抽象方法
我一直在想这个问题很久了 我必须执行这个过程-Design patterns 是否建议从该抽象类中的方法调用抽象方法,design-patterns,abstract-class,object-oriented-analysis,Design Patterns,Abstract Class,Object Oriented Analysis,我一直在想这个问题很久了 我必须执行这个过程- process(){ bool allow=checkForPermission(); if(allow) { processRequest(); } sendResponse(); } 现在我用三种抽象方法创建了一个抽象类X: abstract class X { public abstract sendResponse(); public abstract checkPermission();
process(){
bool allow=checkForPermission();
if(allow) {
processRequest();
}
sendResponse();
}
现在我用三种抽象方法创建了一个抽象类X:
abstract class X {
public abstract sendResponse();
public abstract checkPermission();
public abstract sendResponse();
public abstract example(); // some example which is called from sendResponse() from where it is implemented.
public void process() {
bool allow=checkForPermission();
if(allow) {
processRequest();
}
sendResponse();
}
}
A类扩展X;这就是我不确定的地方。当A实现所有抽象方法,并且在sendResponse方法中调用IfError函数时,这是一个好的设计吗
我的朋友建议:它类似于编译器首先调用X.process,然后调用一个实现的方法,然后再调用一个to X,其中sendResponse将调用example方法,我的朋友说这不是一个好的设计:
X obj = new A();
obj.process();
这是一个好的设计吗?这基本上是好的,除了以下几点: 如果抽象方法只应该从流程方法内部调用,而不是从任何其他外部类独立调用,那么它们应该受到保护,而不是公开的。 如果子类不应该更改流程的实现,因为每个流程都必须遵循此模板,那么流程方法应该是最终的 如果示例方法不应该从外部类调用,而只是作为子类中sendResponse实现的一部分,那么它没有理由存在于基类中。sendResponse已经是抽象的,因此子类可以按照它想要的方式自由地实现它。因此,强迫它同时实现一个没有在任何地方使用的示例方法是没有用的。
这是一种可接受的模式,尽管有时它表明您将实现与接口混合在一起 最好有两个或更多的类/接口和一个驱动程序类:
class DriverX {
RequestProcessor requestProcessor;
ResponseSender responseSender;
PermissionChecker permissionChecker;
public void process() {
if (permissionChecker.checkPermission()) {
requestProcessor.processRequest();
}
responseSender.sendResponse();
}
}
其中引用的类型是接口
这提供了明确的责任划分。这使得单元测试更容易,文档更容易,如果权限检查可能不同,但响应发送者是可重用的,则更灵活。这听起来像模板模式: