|
Rarestyleへようこそ
|
|
|
|
|
|
デザインパターンでキャリアアップ
|
Mediatorパターン (デザインパターン)
Mediatorパターン 導入
Mediatorパターンは複数の関連し合うオブジェクト群に「仲介役」をおいて協調させるパターンです。
関連し合う複数のオブジェクトをメンバとします。メンバは仲介者役のオブジェクトを置いて協調動作を任せます。 メンバーについてはColleage(同僚)という枠で抽象化します。また抽象化したメンバーについて仲介者を保持できる
こと、具象メンバーに対して仲介者が操作できるように共通のインターフェースも定義して、具象仲介者では再定義します。
Mediatorパターン ポイント
メンバー同士が、仲介者に状況を伝えることで、メンバ同士のやり取りをなくすことで処理系統の単純化、再利用の しやすさが生じます。
UML Mediatorパターン
C#ソースコード Mediatorパターン
|
Sample.cs
|
|
using System;
using System.Collections;
namespace Mediator
{
public abstract
class Mediator
{
public
abstract void SendMessage(Colleague
colle);
}
public class
ConcreteMediator :Mediator
{
private ArrayList
aryColleague=new ArrayList();
public
void AddConcreteColleague(Colleague colle)
{
aryColleague.Add(colle);
}
public
override void SendMessage(Colleague
colle)
{
string
strLike= colle.LikeType;
switch
(strLike)
{
case
"sexy":
((Colleague)colle).Notify("クラブ、ディスコ");
break;
case
"fat":
((Colleague)colle).Notify("ファーストフード屋さん");
break;
case
"funny" :
((Colleague)colle).Notify("なんばの引っ掛け橋");
break;
default
:
((Colleague)colle).Notify("OMMG");
break;
}
string
strWithFriends =WithFriends(colle);
if(strWithFriends!="")
{
Console.WriteLine("{0}さんも一緒に",strWithFriends);
}
}
private
string WithFriends(Colleague MySelfcolle)
{
string
strWithFriends="";
foreach(Colleague colle in aryColleague)
{
if
(!MySelfcolle.Equals(colle))
{
if(MySelfcolle.LikeType==colle.LikeType)
{
strWithFriends +=colle.ColleagueName
+ ",";
}
}
}
return
strWithFriends;
}
}
public abstract
class Colleague
{
protected Mediator
Med;
public Colleague(Mediator
Med)
{
this.Med=Med;
}
public
abstract string ColleagueName
{
get;
set;
}
public
abstract string LikeType
{
set;
get;
}
public
abstract void Notify(string strReturnMessage);
}
public class
ConcreteColleague : Colleague
{
private
string strLikeType;
private
string strColleagueName;
public ConcreteColleague(Mediator med,string strColleagueName):base(med)
{
this.strColleagueName=strColleagueName;
}
public
override string ColleagueName
{
set{this.strColleagueName=value;}
get{return this.strColleagueName;}
}
public
override string LikeType
{
set{this.strLikeType=value;}
get{return this.strLikeType;}
}
public
void SendMessage()
{
this.Med.SendMessage(this);
}
public
override void Notify(string strReturnMessage)
{
Console.WriteLine("Meditorに相談した結果、私は{0}でみつけます。",strReturnMessage);
}
}
class Class1
{
[STAThread]
static
void Main(string[] args)
{
ConcreteMediator namihei
=new ConcreteMediator();
ConcreteColleague tom =new ConcreteColleague(namihei,"トム");
tom.LikeType="sexy";
ConcreteColleague mike
=new ConcreteColleague(namihei,"マイク");
mike.LikeType="fat";
ConcreteColleague ken
=new ConcreteColleague(namihei,"ケン");
ken.LikeType="funny";
ConcreteColleague beg =new ConcreteColleague(namihei,"ベグ");
beg.LikeType="cool";
ConcreteColleague joge
=new ConcreteColleague(namihei,"ジョジ");
joge.LikeType="sexy";
namihei.AddConcreteColleague(tom);
namihei.AddConcreteColleague(mike);
namihei.AddConcreteColleague(ken);
namihei.AddConcreteColleague(beg);
namihei.AddConcreteColleague(joge);
tom.SendMessage();
mike.SendMessage();
}
}
}
|
Mediator 実行結果
UMLプラグインによる描画 Mediatorパターン
Javaソースコード Mediatorパターン
| Mediator.java |
1: package mediator;
2:
3: public abstract class Mediator {
4:
5: public abstract void sendMessage(Colleague colleague, String strMessage);
6:
7: }
|
| ConcreteMediator.java |
1: package mediator;
2:
3: public class ConcreteMediator extends Mediator {
4:
5: private ConcreteColleague_Younger concreteColleague_Younger;
6:
7: private ConcreteColleague_Gentle concreteColleague_Gentle;
8:
9: private Concrete_Older concrete_Older;
10:
11: public ConcreteColleague_Younger getConcreteColleague_Younger() {
12: return concreteColleague_Younger;
13: }
14:
15: public void setConcreteColleague_Younger(ConcreteColleague_Younger concreteColleague_Younger) {
16: this.concreteColleague_Younger = concreteColleague_Younger;
17: }
18:
19: public ConcreteColleague_Gentle getConcreteColleague_Gentle() {
20: return concreteColleague_Gentle;
21: }
22:
23: public void setConcreteColleague_Gentle(ConcreteColleague_Gentle concreteColleague_Gentle) {
24: this.concreteColleague_Gentle = concreteColleague_Gentle;
25: }
26:
27: public Concrete_Older getConcrete_Older() {
28: return concrete_Older;
29: }
30:
31: public void setConcrete_Older(Concrete_Older concrete_Older) {
32: this.concrete_Older = concrete_Older;
33: }
34:
35: //調停者はColleage別に指示を出します。
36: public void sendMessage(Colleague colleague, String strMessage) {
37:
38: //調停者の指示を記述
39: System.out.println(strMessage+"と呼びかけられたら、調停者はこのように返答させます。");
40:
41: if(colleague ==this.concreteColleague_Younger)
42: {
43: this.concreteColleague_Younger.notify("おっはー!");
44:
45: }else if(colleague==this.concreteColleague_Gentle){
46:
47: this.concreteColleague_Gentle.notify("おはようございます。");
48:
49: }else if(colleague==this.concrete_Older){
50:
51: this.concrete_Older.notify("おまえさんの朝は、今ごろかい?");
52: }
53: }
54:
55: }
|
| Colleague.java |
1: package mediator;
2:
3: public abstract class Colleague {
4:
5: private Mediator mediator;
6:
7: public Mediator getMediator() {
8: return mediator;
9: }
10:
11: public void setMediator(Mediator mediator) {
12: this.mediator = mediator;
13: }
14:
15: public abstract void notify(String strMessage);
16: }
|
| ConcreteColleague_Younger.java |
1: package mediator;
2:
3: public class ConcreteColleague_Younger extends Colleague {
4:
5: //調停者からの指示を実行します。
6: public void notify(String strMessage) {
7: System.out.println(strMessage);
8: }
9:
10: public void send(String strSendMessage) {
11: this.getMediator().sendMessage(this,strSendMessage);
12: }
13:
14: }
|
| ConcreteColleague_Gentle.java |
1: package mediator;
2:
3: public class ConcreteColleague_Gentle extends Colleague {
4: //調停者からの指示を実行します。
5: public void notify(String strMessage) {
6: System.out.println(strMessage);
7: }
8: public void send(String strSendMessage) {
9: this.getMediator().sendMessage(this,strSendMessage);
10: }
11: }
|
| Concrete_Older.java |
1: package mediator;
2:
3: public class Concrete_Older extends Colleague {
4:
5: //調停者からの指示を実行します。
6: public void notify(String strMessage) {
7: System.out.println(strMessage);
8: }
9:
10: public void send(String strSendMessage) {
11: this.getMediator().sendMessage(this,strSendMessage);
12: }
13:
14: }
|
| StartClass.java |
1: package mediator;
2:
3: public class StartClass {
4:
5: public static void main(String[] args) {
6: //調停者のインスタンス
7: ConcreteMediator mediator =new ConcreteMediator();
8: //同僚クラス
9: ConcreteColleague_Younger younger =new ConcreteColleague_Younger();
10: ConcreteColleague_Gentle gentle =new ConcreteColleague_Gentle();
11: Concrete_Older older =new Concrete_Older();
12:
13: //同僚の調停者をセットします。
14: younger.setMediator(mediator);
15: gentle.setMediator(mediator);
16: older.setMediator(mediator);
17:
18: //調停者に同僚を加えます。
19: mediator.setConcreteColleague_Younger(younger);
20: mediator.setConcreteColleague_Gentle(gentle);
21: mediator.setConcrete_Older(older);
22:
23: //調停者からの指示を実行させます。
24: mediator.sendMessage(younger,"おはよう!");
25: mediator.sendMessage(gentle,"おはよう!");
26: mediator.sendMessage(older,"おはよう!");
27: }
28: }
|
デザインパターン「ひとくちメモ」へ
Homeへもどる
|
|
| お天気情報 |
|
東京都 東京 - 今日の天気
|
晴時々曇
-
|
|
|
最高
|
最低
|
| 気温
|
36 |
28 |
| 湿度
|
96.8 |
82.4 |
|
|
|
|
取得日:2010/09/03 17:00:00
ST:
True |
|
|
東京都 東京 - 明日の天気
|
晴時々曇
-
|
|
|
|
|
取得日:2010/09/03 17:00:00
ST:
True |
|
|
東京都 東京 - あさっての天気
|
曇時々晴
-
|
|
|
最高
|
最低
|
| 気温
|
34 |
27 |
| 湿度
|
93.2 |
80.6 |
|
|
|
|
取得日:2010/09/03 17:00:00
ST:
True |
|
|
大阪府 大阪 - 今日の天気
|
晴時々曇
-
|
|
|
最高
|
最低
|
| 気温
|
36 |
28 |
| 湿度
|
96.8 |
82.4 |
|
|
|
|
取得日:2010/09/03 17:00:00
ST:
True |
|
|
大阪府 大阪 - 明日の天気
|
晴時々曇
-
|
|
|
最高
|
最低
|
| 気温
|
36 |
28 |
| 湿度
|
96.8 |
82.4 |
|
|
|
|
取得日:2010/09/03 17:00:00
ST:
True |
|
|
大阪府 大阪 - あさっての天気
|
晴時々曇
-
|
|
|
最高
|
最低
|
| 気温
|
36 |
28 |
| 湿度
|
96.8 |
82.4 |
|
|
|
|
取得日:2010/09/03 17:00:00
ST:
True |
|
| livedoorのWebサービスより提供 |
|
【工事中】お天気配信 ユーザー登録 |
|
|
|
|
|
Internet Explorer5.0以上のご利用を推奨いたします。
|
 |
Copyright 2006 Rarestyle
このページへのリンクは確認不要です。
Programming by Xenon Project Team
postmaster@rarestyle.net
免責事項について
|