第10回Strategy

NO IMAGE

こんにちは。ぼんじりです。

 

雨ですね。もうすぐ梅雨なんですかね。

嫌ですね。もともと雨は嫌いではないんですが、傘がめんどくさいですよね。

 

今回は、デザインパターンのまとめをやります。

でも、内容が薄くなりそうです。手抜きじゃないです。

 

今回はStragyパターンです。

Stragyとは戦略という意味で、プログラミングではアルゴリズムと考えて良いです。

プログラム中枢となる、アルゴリズムを切り替えができるように実装した方が良いですよ、ってお話です。

 

実装方法は色々あると思いますが、参考書の実装方法を例にサッカーのシュミレーションプログラムを

考えてみました。

 

まず、「戦術」インターフェイスを作ります。

抽象メソッドとして、「攻撃」メソッドと「守備」メソッドを作ります。

 

次に、「戦術」インターフェイスの具象メソッドを実装するクラスである

アルゴリズムクラスを二つ用意します。

ここでは、名前の区別だけつけ「戦術A」と「戦術B」とします。

 

「戦術A」の「攻撃」メソッドはドリブル中心で攻める、「守備」メソッドにはゾーンディフェンスで守ると規定します。

「戦術A」の「攻撃」メソッドはパスをつないで攻める、「守備」メソッドにはゲーゲンプレスで守ると規定します。

 

今度は、「戦術」を扱う「チーム」クラスを作成します。

「チーム」クラスはインスタンスを作成するときに「戦術」インターフェイスを必要とします。

 

「チーム」クラスのメソッドとして「攻撃時の作戦」と「守備時の作戦」を作成します。

「攻撃時の作戦」メソッドでは、インスタンス作成時に得た「戦略」の「攻撃」メソッドを呼び出します。

「攻撃時の作戦」メソッドでは、インスタンス作成時に得た「戦略」の「守備」メソッドを呼び出します。

 

これで準備は完了。

メインメソッドで、チーム1は戦略Aを引数にインスタンスを作成、チーム2は戦略Bを引数にインスタンスを作成。

すると、チーム1は「攻撃時の作戦」はドリブル中心で攻め、チーム2は「守備時の作戦」はゾーンディフェンスで守ります。

すると、チーム2は「攻撃時の作戦」はパスをつないで攻め、チーム2は「守備時の作戦」はゲーゲンプレスで守ります。

後は、戦略ごとの相性や、得点率、防御率のアルゴリズムさえあれば簡単なサッカーシュミレーションゲームが作れそうですね。

今の例では、戦略が2つしかありませんでしたが、戦略がもっと増えるとStragyデザインのありがたみがわかるように思います。

「戦略」インターフェイスを実装するクラスを作りさえすれば、「チーム」を作成するときに簡単に戦略が切り替えることができます。

 

最近デザインパターンのまとめが言葉遊びになってきてるような気がします。

実際の開発で活かせるようにしないと意味ないですよね。理解は深まるとは思うのですがどう進めていけばいいのでしょうか。

 

では。