2017-05-27 13 views
0

抽象メソッドが実装されているデザインを達成する最良の方法は何ですか。ただし、依然としてサブクラスから実装する必要があります。私はそれを説明しますので、これは現時点では非常に錆びに聞こえる:抽象メソッドに部分実装を追加する

abstract class Foo { 
    abstract void update(); 
} 

abstract class Bar { 
    void update() { 
     //Do something 
     update_(); 
     //Do something else 
    } 

    abstract void update_(); 
} 

だから、基本的に、私は方法が伝播することを停止することなく、抽象メソッドにいくつかの実装を追加します。メソッドの名前を変更するだけで、不潔なコードが作成されると思います。

この問題を解決する最善の方法は何ですか?メソッドの名前を変更するだけですか?それとも、このパターンは一番よく避けられますか?

+0

Fooの多くのサブクラスはBarのサブクラスではありませんが、Barのサブクラスも多く存在します。私がBarのサブクラスで完全に実装した場合、冗長なコードがたくさん作成されます。私はこれを解決する解決策があるかどうか尋ねています。 –

+0

これは基本的にテンプレートメソッドパターンですが、これは問題ありません。 update_メソッドには、メソッドが何をすべきかを指定し、標準の命名規則に準拠した名前があります。サブクラスがupdate()メソッドをオーバーライドできないように(または偶然に)オーバーライドできないようにするには、それがfinalである必要があります。 –

+0

あなたはそれ以外の方法でそれを行うことができますか? 'useUpdate()'が 'abstract update()'を起動させますか? – c0der

答えて

0

あなたがしようとしていると思うのは、Strategy patternを作成することです。単純に1つの抽象クラスを作成し、すでに実装されていないメソッド(抽象化しようとするもの)を使用する1つのメインメソッドを実装するだけです。

関連する問題