日々精進

新しく学んだことを書き留めていきます

オブジェクト指向のこころ3

10月15日の続き。
・クラスの継承でなく、オブジェクトの集約を使って流動性を隠蔽する方法
1.流動的要素を探し、クラス内にカプセル化する
2.このクラスを他のクラスに保持させる


○Bridgeパターン
このパターンの目的は「実装と抽象を切り離すこと」
例:円・四角形など複数の形状(抽象)を点線・実線など複数の線(実装)で描画できるようにする場合
1.Shape抽象クラスとLineTypeインターフェースを作る
2.ShapeのサブクラスとしてCircle,Rectangleを作る
3.LineTypeのサブクラスとしてDotLine,SolidLineを作る
4.ShapeクラスにLineType型のmyLineTypeフィールドを持たせる
5.Circle,RectangleのコンストラクタでLineTypeを指定する値を受け取りmyLineTypeを初期化する


これらを使用するコードは↓のようになるはず。
CircleのコンストラクタはCircle(x,y,r,lineType)

Shape myShape = new Circle(2,2,2,DOT_LINE);
myShape.draw();



これによってクラス数の爆発を防ぐことが出来る。
例えば、継承によりすべての種類の図形と線の組み合わせ毎にクラスを作る場合、「図形の数×線の数」だけの数のクラスが必要になる。
Bridgeパターンを使えばこれを「図形の数+線の数」にできる。