1

私のプログラムで、Robot他のクラスから継承するというクラスがあるとしましょう。

これまで、 orのRobotような内部にいくつかのメソッドがありました。現在、機能の新しいモジュール (その部分を使用するいくつかのメソッド) を追加するように求められていますが、現在のクラスにほとんどまたはまったく影響を与えずに、新しいモジュールを追加するように明示的に要求しています。addPartgetCost

私はこれを解決できると思っていましたVisitorが、問題はパターンを階層に適用しないということです。これは正しいことですか?(ご覧のとおり、私Robotのものはコンポジットの一部です)

ここに画像の説明を入力

4

1 に答える 1

1

基本的に、私はあなたのアプローチに同意します。Robot クラスを実際に変更しなくても、Robot (パーツ複合体) を拡張できるアプローチを特定できました。私が行う唯一の変更は次のとおりです。

Acceptメソッドを定義するIPartsCompositeのような名前の新しいインターフェイスを導入します。このインターフェイスは、 Partインスタンスで構成されているため、 Robotによって実装されます。

基本 Visitor は、基本ジェネリック クラスまたはインターフェイス、つまりVisitor<T>になります。このタイプは、単一のメソッドVisit(T)を定義します。次に、あなたの場合、Visitor<IPartsComposite>の3つの具体的な実装があります。

  • パーツビジターサービス
  • パーツ訪問者コスト
  • パーツビジタープロダクション

これらの具象クラスのそれぞれで、Visit(IPartsComposite)を実装します。

于 2013-05-22T18:53:01.893 に答える