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();
   }
}
其中引用的类型是接口


这提供了明确的责任划分。这使得单元测试更容易,文档更容易,如果权限检查可能不同,但响应发送者是可重用的,则更灵活。

这听起来像模板模式: