|
Rarestyleへようこそ
|
|
|
|
|
|
デザインパターンでキャリアアップ
|
Stateパターン (デザインパターン)
Stateパターン 導入
Stateパターンは、状態オブジェクトを利用することで、オブジェクトの状態をによる振る舞いの変化を実現するパターンです。
状態変化に対して何か処理を実行させる時、状態を調べてif文やswitch文などで分岐させて、 それぞれの処理を走らせますか?オブジェクト指向のプログラミングでは、場合分けをするばあい
、なるべくポリモーフィズムをつかって実現するようにします。
Stateパターン ポイント
Context(状況)に状態オブジェクトを保持できるようにします。状態による個々の振る舞いは、 派生クラスで実現します。
UML Stateパターン
C#ソースコード Stateパターン
|
Sample.cs
|
|
using System;
namespace State
{
public abstract
class State
{
public
abstract void Handle();
}
public class
ConcreteState_Rich : State
{
public
override void Handle()
{
Console.WriteLine("焼肉食べにいきましょう!!");
}
}
public class
ConcreteState_Poor :State
{
public
override void Handle()
{
Console.WriteLine("おごってください。しくしく");
}
}
public class
Context
{
private State ObjState;
public State SetState
{
set{this.ObjState=value;}
get{return this.ObjState;}
}
public
void Request()
{
this.SetState.Handle();
}
}
class Class1
{
[STAThread]
static
void Main(string[] args)
{
Context Ctx =new Context();
ConcreteState_Rich Rich
=new ConcreteState_Rich();
ConcreteState_Poor Poor
=new ConcreteState_Poor();
Ctx.SetState
= Rich;
Ctx.Request();
Ctx.SetState
= Poor;
Ctx.Request();
}
}
}
|
State 実行結果
UMLプラグインによる描画 Stateパターン
Javaソースコード Stateパターン
| State.java |
1: package state;
2:
3: public abstract class State {
4:
5: public abstract void Handle();
6:
7: }
|
| Context.java |
1: package state;
2:
3: public class Context {
4:
5: private State state;
6:
7: public State getState() {
8: return state;
9: }
10:
11: public void setState(State state) {
12: this.state = state;
13: }
14:
15: public void request() {
16: this.getState().Handle();
17: }
18:
19: }
|
| ConcreteState_Rich.java |
1: package state;
2:
3: public class ConcreteState_Rich extends State {
4:
5: public void Handle() {
6: System.out.println("焼肉食べに行きましょう");
7: }
8: }
|
| ConcreteState_Poor.java |
1: package state;
2:
3: public class ConcreteState_Poor extends State {
4:
5: public void Handle() {
6: System.out.println("おごってください!しくしく");
7:
8: }
9:
10: }
|
| StartClass.java |
1: package state;
2:
3: public class StartClass {
4:
5: public static void main(String[] args) {
6:
7: //Contextインスタンス生成
8: Context context =new Context();
9:
10: //状態オブジェクト生成
11: ConcreteState_Poor poor =new ConcreteState_Poor();
12: ConcreteState_Rich rich =new ConcreteState_Rich();
13:
14: //状態をセット
15: context.setState(poor);
16: //要求を送る
17: context.request();
18:
19: //状態をセット
20: context.setState(rich);
21: //要求を送る
22: context.request();
23:
24: }
25: }
|
デザインパターン「ひとくちメモ」へ
Homeへもどる
|
|
| お天気情報 |
|
東京都 東京 - 今日の天気
|
曇り
-
|
|
|
|
|
取得日:2012/02/05 17:00:00
ST:
True |
|
|
東京都 東京 - 明日の天気
|
晴のち雨
-
|
|
|
最高
|
最低
|
| 気温
|
9 |
3 |
| 湿度
|
48.2 |
37.4 |
|
|
|
|
取得日:2012/02/05 17:00:00
ST:
True |
|
|
東京都 東京 - あさっての天気
|
晴時々曇
-
|
|
|
最高
|
最低
|
| 気温
|
11 |
4 |
| 湿度
|
51.8 |
39.2 |
|
|
|
|
取得日:2012/02/05 17:00:00
ST:
True |
|
|
大阪府 大阪 - 今日の天気
|
晴のち曇
-
|
|
|
|
|
取得日:2012/02/05 17:00:00
ST:
True |
|
|
大阪府 大阪 - 明日の天気
|
雨
-
|
|
|
|
|
取得日:2012/02/05 17:00:00
ST:
True |
|
|
大阪府 大阪 - あさっての天気
|
曇時々晴
-
|
|
|
最高
|
最低
|
| 気温
|
7 |
3 |
| 湿度
|
44.6 |
37.4 |
|
|
|
|
取得日:2012/02/05 17:00:00
ST:
True |
|
| livedoorのWebサービスより提供 |
|
【工事中】お天気配信 ユーザー登録 |
|
|
|
|
|
Internet Explorer5.0以上のご利用を推奨いたします。
|
 |
Copyright 2006 Rarestyle
このページへのリンクは確認不要です。
Programming by Xenon Project Team
postmaster@rarestyle.net
免責事項について
|