liguofeng29’s blog

個人勉強用ブログだっす。

デザインパターン - Stats

【Statsパターンとは】

状態をクラスと表現する。

 

Statsパターンのクラス図】

 

Statsパターンのメリット】

オブジェクトが状態を持つごとで、オブジェクトの利用者は状態による違う振る舞いを気にする必要なくなる。

 

【サンプル】

GreetingStats.java
package stats;
 
public interface GreetingStats {
 
public void greet();
}
 
 
 
 

MorningGreetingStats.java
package stats;
 
// 朝の挨拶
public class MorningGreetingStats implements GreetingStats {
 
@Override
public void greet() {
System.out.println("Good morning.");
}
}
 
 

AfternoonGreetingStats.java
package stats;
 
// 昼の挨拶
public class AfternoonGreetingStats implements GreetingStats {
 
@Override
public void greet() {
System.out.println("Good afternoon.");
}
}
 
 
 
 

Sato.java
package observer;
 
// satoさん
public class Sato extends Student {
 
private int count = 0;
 
@Override
public void done() {
count++;
 
System.out.println("satoさんが学校" + count + "周走りました。");
 
// 観察者に通知する
super.notifyToObservers(count);
}
}
 
 
 

Person.java
package stats;
 
// 人クラス
public class Person {
 
private GreetingStats stats;
 
public Person(GreetingStats stats) {
this.stats = stats;
}
 
public void setStats(GreetingStats stats) {
this.stats = stats;
}
 
// 挨拶
public void greet() {
stats.greet();
}
}
 
 
 
 
 
 
StatsTest.java
package stats;
 
public class StatsTest {
 
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("朝ですよ。");
Person p = new Person(new MorningGreetingStats());
p.greet();
 
System.out.println("昼ですよ。");
p.setStats(new AfternoonGreetingStats());
p.greet();
}
}
 
 
 
 
実行結果
朝ですよ。
Good morning.
昼ですよ。
Good afternoon.