3

すべてのドメイン クラス (POJO) が抽象クラスを継承し、次に抽象クラスがインターフェイスを実装するリファレンス アーキテクチャを見つけました。例えば:

public interface User {  
    public abstract operation1();  
    public abstract operation2();  
    ...  
}  

public abstract class AbstractUser implements User {  
    String name;  
    // only attributes
    ...
}  

public abstract class XyzUser extends AbstractUser {
    ...
}  

このデザインが何かのパターンかどうか知っていますか?アーキテクチャがそのように設計された理由を説明できますか (インターフェイス --> 抽象クラス --> 具象クラス)。

4

6 に答える 6

3

まず、インターフェース、抽象クラス、具象クラスの必要性を理解してください。

ここで例を見てみましょう:

  public interface Vehicle{
     public void startEngine();
     public void run();
  }


 public abstract class Bus implements Vehicle{
      public void startEngine(){
        System.out.println("Engine Starting of bus");
      }
 }

 public abstract class Plane implements Vehicle{
      public void startEngine(){
        System.out.println("Engine Starting of plane");
      }
 }

 public class VolvoBus extends Bus{

      public void run(){
        System.out.println("Running at 100kmp/h");
      }



 }


 public class NonACBus extends Bus{

      public void run(){
        System.out.println("Running at 50kmp/h");
      }
  }


public class Test{

 public static void main(String[] args){
        VolvoBus volvoBus=new VolvoBus();
        NonACBus nonAcbus=new NonACBus();
        volvoBus.startEngine();
        volvoBus.run();
        nonAcBus.startEngine();
        nonAcBus.run();
      }
  }

上記の例では、AC バスであれボルボであれ、バスに共通のコードがあるため、Bus クラスで記述されていますが、run() はすべてに共通ではないため、Bus クラスで実装する代わりに、抽象として保持されるため、その子クラスが保持されます。そこの要件に基づいてそのベースを実装します。

私のコードはあなたをよりよく説明します:)ありがとう

于 2013-11-05T13:13:11.613 に答える
1

ここで、インターフェイスUserはタイプを定義します。

public interface User{  
public abstract operation1();  
public abstract operation2();  
...  
}

したがって、このインターフェースの実装は、 type として認識されますUser

Abstractインターフェイスはメソッド実装を持つことが許可されていないため、クラスを使用してこのインターフェイスの実装者に実装支援を提供できるようになりました。インターフェイスに対応するスケルトン実装クラスを提供できUserます。これには、そのメソッドのいくつかのデフォルト実装があります。AbstractUserのスケルトン実装はUser次のとおりです。

public abstract class AbstractUser extends IUser  
{ 
public abstract operation1();  
public operation2(){
...
}  
}

の助けを借りて具体的なUser実装を書くことができるようになりましたAbstractUser:

public class UserImpl extends AbstractUser implements User {
...
}

Java Collections Framework には、コレクション インターフェイスの実装に必要な労力を最小限に抑えるために、主要なコレクション インターフェイスに沿った多数のスケルトン実装があります: AbstractSetAbstractListなど。

于 2013-11-05T13:30:10.713 に答える
0

抽象クラスは一般化されたクラスです。たとえば、抽象メソッドとプロパティがここで言及されているため、動物は一般化されています。多くの動物が共通の行動と特性を持っています。

具体的なクラスは、動物のクラス(一般化されたクラス)から継承され、より犬専用に特化された犬に特化したクラスです。ここで、いくつかのプロパティとメソッドを追加し、その動作をオーバーライドすることもできます (一般化されたクラスから)

インターフェースはタスクベースのクラスであり、抽象クラスまたは具体的なクラスで実装できる抽象メソッドのみを持ち、特定の動作に対応します。

サンプルコードはこちら...

    abstract class Animal {
      private String leg;

      abstract void run();
    }

    class Dog extends Animal implements Ibehaviors {

      @Override
      void run() { 
       System.out.println("dog run"); 
      }

      @Override
      void eat() { 
       System.out.println("dog eat"); 
      }

    }


    interface Ibehaviors { 
      void eat(); 
    }
于 2013-11-15T21:14:37.833 に答える
0

この種のアーキテクチャの実装がありました。たとえば、ここにコードのスニペットがあります

public class Category extends CategoryBase implements ICategory

もう一つは

public class Functional extends CategoryBase implements ICategory

ここで興味深いのはCategoryBase、共通のプロパティと機能を保持し、継承でそれらを再利用する抽象クラスです。

于 2013-11-05T13:17:55.893 に答える
0

これはデコレーターのデザインパターンかもしれません。Uには、インターフェース、つまりインターフェースを実装する抽象クラスがあります。抽象クラスを拡張する具象クラス (デコレータ)。インターフェイス(装飾するオブジェクト)のみを実装する別の具象クラス。私はわかりません。コード全体を見ないと何とも言えません。それでも、このリンクを見てください。それはあなたを助けるかもしれません。

http://javapapers.com/design-patterns/decorator-pattern/

于 2013-11-05T13:15:23.377 に答える