(Translated by https://www.hiragana.jp/)
Bridge パターン - Wikipedia コンテンツにスキップ

Bridge パターン

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

Bridge パターン(ブリッジ・パターン)とは、GoF(Gang of Four; 4にんのギャングたち)によって定義ていぎされたデザインパターンの1つである。 「橋渡はしわたし」のクラスを用意よういすることによって、クラスを複数ふくすう方向ほうこう拡張かくちょうさせることを目的もくてきとする。

クラス

[編集へんしゅう]

Bridge パターンのクラス以下いかげる。

クラス Abstraction は Implementor 型の属性を持ち、操作 function() を実装する。抽象クラス Implementor は操作 implementation() を実装する。Abstraction#function() ではメンバの Implementor の implementation() が実行される。
クラス Abstraction は Implementor がた属性ぞくせいち、操作そうさ function() を実装じっそうする。抽象ちゅうしょうクラス Implementor は操作そうさ implementation() を実装じっそうする。Abstraction#function() ではメンバの Implementor の implementation() が実行じっこうされる。

利用りようれい

[編集へんしゅう]

Bridge パターンの適用てきようのぞましいクラス構造こうぞうは、たとえば以下いかのようなものである。

Dishware (食器)を継承したクラスに Plate (皿)と Bowl (ボウル)があり、さらにそれらの派生クラスとして WoodenPlate, GlassPlate, WoodenBowl, GlassBowl が存在する
Dishware (食器しょっき)を継承けいしょうしたクラスに Plate (さら)と Bowl (ボウル)があり、さらにそれらの派生はせいクラスとして WoodenPlate, GlassPlate, WoodenBowl, GlassBowl が存在そんざいする

このれいでは、まず Dishware(食器しょっき)クラスから Plate(さら)と Bowl(ボウル)クラスが派生はせいしている。 さらに、Plate からは WoodenPlate(木製もくせいさら)と GlassPlate(ガラスせいさら)が、 Bowl からは WoodenBowl(木製もくせいのボウル)と GlassBowl(ガラスせいのボウル)が派生はせいしている。

このクラス階層かいそうは、以下いかげる問題もんだいをはらんでいる。

  • クラスの追加ついか困難こんなんである。かりにプラスチックせい食器しょっきあらたにサポートしようとする場合ばあい、Plate クラスと Bowl クラスのそれぞれを継承けいしょうしなければならない。あるいは Dishware クラスのサブクラスとしてたとえば Cup クラスを追加ついかする場合ばあい、WoodenCup や GlassCup を同時どうじ作成さくせいしなければならない。
  • コードの複製ふくせい発生はっせいする。れいげた WoodenPlate と WoodenBowl, GlassPlate と GlassBowl はそれぞれおな材質ざいしつ食器しょっきであるため、内部ないぶてきたような性質せいしつっているかもしれない。しかしながら、継承けいしょう関係かんけい都合つごうじょうこれらのクラスはすべて個別こべつ定義ていぎしなければならず、結果けっかとしておなじようなコードを別途べっと記述きじゅつしなければならなくなる。

この問題もんだいこる理由りゆうは、クラス階層かいそうなか複数ふくすう継承けいしょう関係かんけい混在こんざいしていることである。 うえれいにおいて、Dishware と Plate および Bowl の関係かんけいは、食器しょっき種類しゅるいによる継承けいしょう関係かんけいとみなすことができ、 一方いっぽうで Plate と WoodenPlate および GlassPlate の関係かんけいは、食器しょっき材質ざいしつによる継承けいしょう関係かんけいとみなすことができる。 このように複数ふくすう継承けいしょう関係かんけい存在そんざいすることにより、ひとつの継承けいしょう関係かんけい継承けいしょう関係かんけい悪影響あくえいきょうおよぼすことになる。

このクラス構造こうぞうは、Bridge パターンを適用てきようすることによって以下いかのように改善かいぜんすることができる。

Dishware を継承したクラスに Plate と Bowl がある。Dishware は材質に関する情報を Material クラスに委譲する。Material の派生クラスに Wood と Glass がある。
Dishware を継承けいしょうしたクラスに Plate と Bowl がある。Dishware は材質ざいしつかんする情報じょうほうを Material クラスに委譲いじょうする。Material の派生はせいクラスに Wood と Glass がある。

このクラスでは Dishware から派生はせいする継承けいしょう関係かんけい食器しょっき種類しゅるいのみであり、材質ざいしつかんする情報じょうほうは Material(素材そざい)クラスに委譲いじょうしている。 この構造こうぞうにより、種類しゅるい材質ざいしつはそれぞれ独立どくりつして拡張かくちょうすることができ、クラスのかずらすことが出来できる。

関連かんれん項目こうもく

[編集へんしゅう]