[Golang]Compositeパターンを学ぼう!~Version 2~

こんにちは。KOUKIです。

以前、Compositeパターンについて記事を書きましたが、別パターンでも実装したので紹介します。

golang

Compositeパターン

Compositeパターンは再起的な構造の取り扱いを容易にするデザインパターンです。

サンプルを確認しながら理解を深めていきましょう。

まずは基本から

Compositeパターンを実装する時、「まとめたいもの」を想像することが大切です。Compositeは「複合物」を意味するからです。

上記のコードでは、Athlete(アスリート)構造体とSwim関数を実装し、CompositeSwimmer構造体でひとまとめにしました。

テストコードを実装します。

TestAthlete_Train関数では、Athleteをインスタンス化し、Trainメソッドを呼び出しています。

一方、TestSwimmer_Swim関数では、CompositeSwimmmrAをインスタンス化し、そのプロパティであるMyAhleteからTrainメソッドを呼び出しています。

このように、再起的な処理を可能にしてくれます

テストコードを実行しましょう。

Swimmerの別パターン

先ほど実装したSwimmerの別パターンです。今度はインターフェースを使います。

テストコードを実装します。

CompositeSwimmerB構造体にAthlete及びSwimmerImplementor構造体をそれぞれ渡しています。インターフェースを実装できているのでパラメーターとして受け取ることができます(AthleteはTrainを実装、SwimmerImplementorはSwimを実装)。

インターフェースを構造体のパラメータとして渡すことで、「柔軟性のある(疎結合)」プログラミングを実装することができるわけです。

このテクニックは私も苦手なので、マスターしたい^^;

テストを実行します。

Animalも!

Athleteだけではなく、AnimalもSwimできます!

さぁ、テストコードを実装しましょう!

AthleteとAnimalは全然違う生き物なのに、Swim関数を使い回せています。柔軟性があるプログラムですね^^

テストコードを実行しましょう。

Treeも!

Tree構造体もCompositeパターンと相性が良いです。

テストコードを実装/実行しましょう。

OKですね。

おわりに

golangのInterfaceはかなり使えます。特にプログラムを疎結合にしたい場合には有効です。

Interfaceのおすすめの使い方を以下の記事で紹介しているので、よかったら遊びに来てください!

それでは、また!

Go記事まとめ

デザインパターンまとめ

Go記事をまとめます。

ソースコード

composite.go

composite_test.go

コメントを残す