私たちはGOFデザインパターンを研究しており、委任の最初の2つの段落ではブロックされています。表示された段落に記述されているコードがどのようなものかはわかりません。 GOF委任コードの例を書くことができますか?
答えて
私は理解し、これが困難に主なものは、この一節ですね:
しかし、継承して、継承された操作は常に
this
メンバーC++での変数とself
内を介して受信オブジェクトを参照することができますスモールトーク。委任で同じ効果を達成するために、受信者は委任された操作が受信者を参照するように自身を委任者に渡します。
Quoting Wikipedia(強調鉱山):委任で
は、オブジェクトが第二オブジェクト(代理人)に委任することにより、要求を処理します。デリゲートはヘルパーオブジェクトで、ですが、元のコンテキストはです。言語レベルでの委任のサポートでは、委任内の
self
がデリゲート(受信オブジェクト)ではなく元の(送信)オブジェクトを参照することによって暗黙的に行われます。それは実際にself
またはthis
またはcurrent
またはcaller
だかどうか
は言語固有のものです。これは、委任をサポートする言語では、次のことがうまくいくことを意味します
Window
int width: 640
int height: 480
Rectangle rectangle: new Rectangle()
int Area(): rectangle.Area()
Rectangle
int Area(): self.width * self.height
Window window: new Window()
print window.Area()
デリゲートは、Windowインスタンスのコンテキスト内でエリアを実行しているため、コードが長方形であるが、これは、640×480の結果を印刷します。つまり、ウィンドウの幅と高さをself
まで使用します。この自動コンテキストの受け渡しをサポートしていない言語で
、あなたの代わりにデリゲートに発信者を渡す必要があります:
Window
int width: 640
int height: 480
Rectangle rectangle: new Rectangle()
int Area(): rectangle.Area(this)
Rectangle
int Area(context): context.width * context.height
Window window: new Window()
print window.Area()
我々は(this
経由)デリゲートにウィンドウのインスタンスを渡しているArea()
を呼び出すとき。そして、デリゲートはwidthとheightのメンバーにアクセスして、明示的に渡された引数を使って計算を行います。
上記の疑似言語は、型や可視性などについては想定していません。このようなWindowsインスタンスを渡してメンバーにアクセスすることができます。使用言語によっては、走行距離が異なる場合があります。
したがって、委任は実際にバインディングコンテキストに関するものであり、単なるメソッド呼び出しの転送ではありません。コンテキストで評価送信オブジェクトは、単に受信側オブジェクトに対応するメンバを使用しています「委任」は、多くの場合、転送の明確な概念を参照するために緩く使用されていることを
注、:Wikipediaのページを一人の最後の時間を引用元のオブジェクトではなく受信するオブジェクトの名前です。
パターンに関しては、クラス図はそれを非常によく示しています。ウィンドウと矩形の2つのクラスです。
実際の本をまだ手に入れていないのであれば、おそらくこの図を説明する前の章のいずれかを読む価値があります。あるいは、私は間違っていて、それはその本にはありませんが、その後、これらのダイアグラムが何であるか、あるいはそれらをどのように扱うかを説明する追加のOOAD/OOPブックを手に入れます。
もしこれが今のところばかげているような場合:GoFもこれが価値あるものだと私は思っていますが、これは「継承を超えた集約」を意味するもので、それ自体が共鳴する価値があります。もしあなたのすべてが "私たち"がまだいないなら、それはどうですか?異なる書式のコード/コンセプトを取り上げ、具体的な例を挙げて説明します。
にも参照してください:
- 1. bulletproof Backbone js managerを書くには? (またはこの例では委任されたイベントを修正する)
- 2. ビューコントローラの委任と解任
- 3. のLogonUserと委任
- 4. jspファイルにjavascriptコードを書くことができます
- 5. 委任とデータソースiOS
- 6. Java Mockitoと委任
- 7. 継承と委任
- 8. factory_girlの委任属性を上書きする方法は?
- 9. C++での委任
- 10. が委任属性
- 11. .dir-locals.elに任意のelispコードを置くことはできますか?
- 12. 委任
- 13. Javaで、Kotlin委任クラスを拡張できますか?
- 14. なぜこの委任をしないのですか?コンソールアプリで
- 15. サブドメインの委任
- 16. Strutsとの委任パターン
- 17. スパーク1.5.0と委任トークンはケルベロスまたはウェブ認証でのみ発行することができます
- 18. どのようにスコープに委任できますか?
- 19. jQueryの委任 - セレクターが
- 20. kotlinでインターフェイスを委任できるのはなぜですか?
- 21. このRubyコードをより簡潔に書くことはできますか?
- 22. イベント委任モデルの下のコードでエラーが発生しています
- 23. サービスクラス委任
- 24. NSViewController委任
- 25. Googleサービスアカウント委任
- 26. 委任 - C#
- 27. ラムダ委任
- 28. 委任サブドメインは
- 29. FIRMessaging委任エラー
- 30. 委任モード:PARENT_FIRST
私の答えはalredyあなたの質問に答えていない場合は、あなたたちは問題を抱えている場所を説明できるならば、それは私たちのために役立つだろう同意する。あなたの実装はどうなると思いますか、あなたの友人は何を考えていますか? – Gordon
これはパターンに関するもので、コードを記述していません。さまざまな方法や言語で実装できる戦略について説明します。コードについて質問するのではなく、実装に関する具体的な質問がある方が良いでしょう。 – Doleron