パターンアダプタが役立つ場合があります。
想像してみてください。SomeClassをTargetInterfaceとして使用する必要があります
public abstract class SomeClass {
       // some code here
     public abstract void someMethod();
}
public interface TargetInterface {
     public void someMethodBlaBla();
}
そして、それらはメソッドの異なるシグネチャを持っています-someMethod()とsomeMethodBlaBla()。
したがって、このようなアダプタクラスを作成する可能性があります。
public class Adapter implements TargetInterface {
   private SomeClass adaptee;
   public Adapter( SomeClass adaptee ) {
       this.adaptee = adaptee;
   }
   public void someMethodBlaBla() {
       this.adaptee.someMethod();
   }
   //delegate all calls to adaptee
}
そして、コードのどこかで、現在のコードに干渉することなく、アダプターと抽象クラスのインスタンスの両方を使用できます。
SomeClass abstractClassInstance = ... //get instance of your abstract class
TargetInterface targetInterfaceInstance = new Adapter( abstractClassInstance );