ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

デザインパターンコミュの実際に使ったデザインパターン教えてください。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
実際に使ったデザインパターン教えてください。

まずいいだしっぺから。
UML図はWordで描いてます。

「ブラウザを開かずに図書館のインターネット予約サービスを利用できる」ソフトで使ったパターン。
複数の図書館に対応できるように、Accountと"HttpWebRequestを生成する"クラスを抽象クラスにしています。

C#です。
extends,implementが":"になっているところと、インターフェイスにpublicメソッドしか定義できない点が違います。
またC#のメソッドはディフォルトでfinalになっています。
継承したいときは、abstract(抽象仮想関数), virtual(仮想関数)キーワードをつける必要があります。

■抽象クラス

// インターネット予約のアカウント
public abstract class Account
{
protected abstract AbstractHttpWebRequestFactory CreateHttpWebRequestFactory();
↑FactoryMethodパターン

↓FactoryMethodパターンのコード
AbstractHttpWebRequestFactory _httpWebRequestFactory;

public Account()
{
_httpWebRequestFactory = CreateHttpWebRequestFactory();
}

// 図書の予約
public void Reserve(Book book)
{
_httpWebRequestFactory.CreateReserveBookRequest(book);
...
}
↑TemplateMethodパターン

// 予約図書のキャンセル
public void CancelReservation(Book book)
{
_httpWebRequestFactory.CreateCancelReservationRequest(book);
...
}
}
↑TemplateMethodパターン

↓AbstractFactoryパターン
// 予約、予約取消のためのHTTPリクエストを生成するFactory
public abstract class AbstractHttpWebRequestFactory
{
public abstract HttpWebRequest CreateReserveBookRequest(Book book);
public abstract HttpWebRequest CreateCancelReservationRequest(Book book);
}

■具象実装

// 某図書館のインターネット予約アカウント
// 具象実装に図書の予約、予約図書のキャンセル関連のメソッドはひとつもありません。
// ただ、適切なAbstractHttpWebRequestFactoryを生成するだけです。
public class ConcreteAccount : Account
{
// 適切なAbstractHttpWebRequestFactoryを生成する。
protected override AbstractHttpWebRequestFactory CreateHttpWebRequestFactory()
{
return new ConcreteHttpWebRequestFactory(this)
}
}

// 某図書館用のHTTPリクエストを生成するFactory
public class ConcreteHttpWebRequestFactory : AbstractHttpWebRequestFactory
{
public abstract HttpWebRequest CreateReserveBookRequest(Book book)
{
return new HttpWebRequest("http://xxxxxx/reserve-cgi?type=0&id=xxxx&pass=xxxx");
}
public abstract HttpWebRequest CreateCancelReservationRequest(Book book)
{
return new HttpWebRequest("http://xxxxxx/reserve-cgi?type=1&id=xxxx&pass=xxxx");
}
}

コメント(8)

町田間違えたさん、はじめまして。
こちらこそよろしくお願いします。

Strategyパターン便利ですよね。個人的にFactory Methodパターンと並んで最も重要なパターンだと思っています。

町田さんのUML図にXmlSaverを加えてみました。(Jude Communityとても使いやすいです。いいUMLソフトを探していたので助かりました。ありがとうございます。)これならPlainTextSaver(←これは使えなさそうですが)とかも追加できそうですね。

FactoryパターンはSimple Factory→Factory Method→Abstract Factoryの順に学習すると理解しやすいかもしれません。がんばってくださいね。
明けましておめでとうございます。
面白そうなゲームですね。あとで時間をかけてゆっくり見てみます。
う・・・、ちゃんと見てみたらゲームじゃない・・・
サイコロシミュレータのような感じですね。

Dice抽象クラス、いい感じですね。ダイスをいろいろ変えて楽しめそう。DiceViewableインターフェイスにDiceの操作に必要なメソッドが集約されていて使いやすそうです。良ければソースコードも見せてもらっていいですか?

.Net風にアレンジしたサンプルを作ってみました。
Base64イメージです。
http://mixi.jp/view_diary.pl?id=309325297&owner_id=3386110

デコーダーはこちらがおすすめです。
http://www.vector.co.jp/soft/win95/util/se335304.html


以下は粗探しみたいでお気を悪くされたらすいません。
DiceControllerの_maxCountフィールドはいらなくないですか?
_firstSpeedを_changeSpeedで減算していって0になったら終了すれば、_maxCountフィールドは必要ないように思いました。

スペルミスを見つけました。
requestRecieve→requestReceive
DiceViewble→DiceViewable

英語表現がわからないときは英辞郎が便利です。
diceで検索すると、dice関連のイディオムがたくさん出てきて参考になります。http://www.alc.co.jp/index.html

roll a dice サイを振る
spots on a dice サイコロの目
追記
サンプルのDiceGameGui/bin/ReleaseおよびDiceGameCui/bin/Releaseに実行可能ファイルを含めておきました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

デザインパターン 更新情報

デザインパターンのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング