1

ウィキペディアのブリッジ エントリを見ると、 UML ダイアグラム実装者をプライベート変数として示しているという点で矛盾がありますが、付随する Java コード例ではそれが非プライベートであり、洗練された抽象化では次のコードのようにそれが使用されています。断片:

 // low-level i.e. Implementation specific
   public void draw() {
        drawingAPI.drawCircle(x, y, radius);
   }

これdrawingAPI実装者であり、洗練された抽象化からアクセスされます。

また、同じウィキペディアのエントリで、LePUS3ダイアグラムは、洗練された抽象化が抽象化からの操作のみを呼び出す必要があり、実装者からのメソッドを呼び出さないことを意味します。

実装者がプライベート である次のスタックオーバーフローの回答も参照してください: https://stackoverflow.com/a/319792/480894

では、実装者はプライベートであり、洗練された抽象化は抽象化からメソッドを呼び出すだけでよいのでしょうか?

4

1 に答える 1

1

図と Java コード例の間の矛盾については正しいです。それにもかかわらず、あなたの質問に答えるために、図はパターンを実装するため の純粋な方法(推奨)を示しています。

例に見られるようにパターンを引き続き実装しても、パターンの有用性が失われることはありません。カプセル化も継承も壊しません。

プライベート メンバーを使用し、ベース( Abstraction )のみを介して呼び出しを転送する利点の 1 つは、基本クラスで追加の動作を強制できることです。たとえば、呼び出しをログに記録したり、必要な操作を実行したりできます。これにより、サブクラスでの重複が減少します。

于 2013-07-16T23:05:27.877 に答える