何の競合デザインパターンにコンクリートに相応用すものでした。

StackOverflow https://stackoverflow.com/questions/1061231

  •  21-08-2019
  •  | 
  •  

質問

時にはそのうち全にご相続中"のスタイル"を事業用建築うなリンクの条文の記述競争理論。また、は違実施された場合、アプリケーションが埋め込まれているのに対してバンスインターナショナルスタッ?思いますがい多くのインタフェースの代わりに、でも本当のところはわからないけど。

役に立ちましたか?

解決

私は、あなたがデザインの原則に言及していると思います

"継承上の組成物を支持している。"

他のヒント

非常に人気の代替を継承しては、サブクラスはオブジェクトの組成および代表部

その代わりに

 public class B extends A implements I {
    // now I have all the methods from A
 }

public class B implements I {
     private I a;

     // delegate all methods
     public void methodOne(){
          a.methodOne();
     }
}

組成物はより柔軟、サブクラス:

  • できる複数の委譲ではなくて、唯一のスーパークラスは、Java)
  • できれいに分離からインタフェースの実装は、スーパークラスなのに、その方法とその実装もされていないメソッドのインターフェース)
  • できるスワップ取出しの代表者による設定の実行時には、スーパークラスのインスタンスが作成されます。依存性注射を構築します。

継承スタイルではありません。

これはツールです。

そう組成物である

私はこのようないくつかのブランケット書状を読みたび

私は自分自身に考えてます:

プラスネジはFlatheadsよりも優れています。

あなたはネイルや溶接が必要なときにどちらも1は、任意の優れている、とあなたは何をやっている知っているときのいずれかまたは両方が細かいです。

「で、」対「-Aを持っている」 - -

2つの違いは、荒涼とシンプルであり、組成物は、(の多くは、の余分な作業をして)継承をシミュレートするために使用することができながら、逆は一般的に真実ではありません。これは、継承に対するのないの引数で、またそれは、組成物のための引数です。

モデルのセマンティクスは、はるかに重要、それを表現するために使用されるメカニズムよりも。そうではありません、「爬虫類は動物の一種である」ではなく、「爬虫類動物を有し、そのメソッドやプロパティを公開するために委任を使用しています」と言って愚かな考えでしょうか?なぜの不必要のと同じように愚かではない?

オブジェクトに同じことをやっています

継承は非常に有用であり、基本的なオブジェクト指向プログラミングです。よりよい何かがやって来るまでは離れて行くされていない、と私はまだことを公表していない; - )

[炎始めましょう!]

これは核心ザラザラクラスの設計上の問題としてそんなにアーキテクチャの問題ではありません。 壊れやすい基本クラスの問題と継承関係の静的な性質:実装の継承は、難易度の二つの領域を持っていますます。

この場合の古典的な代替物は、組成物とのインタフェースの実装のデコレータパターンです。新しいオブジェクトは、それがラップ下位レベルのオブジェクトへの参照が含まれており、おそらくいくつかの呼び出しをラップしたりあからさまに交換して転送し、それを呼び出します。それが保護されたメンバーにアクセスできないので、単一のラッパークラスは、そのインスタンスが異なる基本サービスの実装をラップすることができ、そしてラッパーはそれほど壊れやすい基本クラスの問題によって破壊される可能性が高いです。

トレイト&スモールトーク&Perlでの役割もあります。彼らはあなたが機能を再利用してみましょう。この記事をチェックしてください。

アレン・ホラブ説明は、

あなたがC ++を使用している場合、あなたが真剣にミックスインを使用することを検討すべきである(注:いくつかの他の言語は、ミックスインのいくつかのフォームをサポートするために主張する):

Wikipedia: http://en.wikipedia.org/wiki/Mixin
Dr. Dobbs: http://www.ddj.com/cpp/184404445.

さらに興味深いのは、 "不思議の定期的なテンプレートパターン" である(CRTP):

Wikipedia: http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern.

私は非常に便利であるミックスインのアプリケーションとしてCRTPを参照してください。

あなたは(これはしばらくかかります)「それを得る」したら、

、あなたはミックスインは非常にpwerfulしていることを実現します。彼らはあなたの継承によって再利用の問題を被らないコードの再利用の方法を与えるが、構図や委任を使用するよりも、より柔軟かつ効率的である。

興味深いことに、CRTPあなたは、この言語機能は、特に必要とされていない本当の仮想関数呼び出しのオーバーヘッド(時間と空間内)を除去、仮想関数呼び出しをシミュレートすることができます。仮想関数の呼び出しを削除すると、より高いパフォーマンスにつながる、コンパイラがより良い最適化を提供することができます。

利点のリストがちょうど延々と続く...下側に、それはC ++で構文的に醜いですが、あなたはそれと一緒に暮らすことを学びます。ミックスインチェーンを形成するために、マクロを使用すると、コードがはるかに読みやすくすることができます。

私の見解では、私はクラスを構築するために使用することができ、コードの再利用可能なスニペットとしてミックスインを参照してください。通常、彼らはあなたがメソッドの一般的な実装を提供し、インタフェースの実装を支援します。あなたは、あなたは自分のクラスを構成し、部品が一緒に仕事を得るために行うことは非常に小さな「配管」を持つビットのための「買い物に行く」ことができますように感じてしまう。

scroll top