# 課題置き場(デザインパターン) ## 9-1 Stateパターン ### (1)状態遷移図  ### (2)コード TheDogTest1.java(Clientクラス) ``` public class TheDogTest1 { public static void main(String[] args) { Dog pochi = new Dog(); pochi.print(); pochi.kenka(); pochi.print(); pochi.taberu(); pochi.print(); pochi.kenka(); pochi.print(); pochi.asobu(); pochi.print(); pochi.asobu(); pochi.print(); } } ``` Dog.java(Contextクラス) ``` public class Dog { private DogState myState; public Dog() { myState = TanoshiiState.getInstance(); } public void kenka() { myState.iraira(this); } public void asobu() { myState.tanoshii(this); } public void taberu() { myState.tabeta(this); } public void changeState(DogState d) { myState = d; } public void print() { System.out.print("現在、わたし(犬)は「"); System.out.print(myState.toString()); System.out.println("」です。"); } } ``` DogState.java(Stateクラス) ``` abstract class DogState { public abstract void iraira(Dog yobidashimoto); public abstract void tanoshii(Dog yobidashimoto); public abstract void tabeta(Dog yobidashimoto); } ``` TanoshiiState.java(ConcreteStateクラス) ``` class TanoshiiState extends DogState { private static TanoshiiState s = new TanoshiiState(); private TanoshiiState() { }; public static DogState getInstance() { return s; } public void iraira(Dog moto) { moto.changeState(FutsuuState.getInstance()); } public void tabeta(Dog moto) { // なにもしない } public void tanoshii(Dog moto) { // なにもしない } public String toString() { return "楽しい状態"; } } ``` FutsuuState.java(ConcreteStateクラス) ``` class FutsuuState extends DogState { private static FutsuuState s = new FutsuuState(); private FutsuuState() { }; public static DogState getInstance() { return s; } public void iraira(Dog moto) { moto.changeState(IrairaState.getInstance()); } public void tabeta(Dog moto) { moto.changeState(NemuiState.getInstance()); } public void tanoshii(Dog moto) { moto.changeState(TanoshiiState.getInstance()); } public String toString() { return "普通状態"; } } ``` IrairaState.java(ConcreteStateクラス) ``` class IrairaState extends DogState { private static IrairaState s = new IrairaState(); private IrairaState() { }; public static DogState getInstance() { return s; } public void iraira(Dog moto) { // なにもしない } public void tabeta(Dog moto) { moto.changeState(NemuiState.getInstance()); } public void tanoshii(Dog moto) { moto.changeState(FutsuuState.getInstance()); } public String toString() { return "いらいら状態"; } } ``` NemuiState.java(ConcreteStateクラス) ``` class NemuiState extends DogState { private static NemuiState s = new NemuiState(); private NemuiState() { }; public static DogState getInstance() { return s; } public void iraira(Dog moto) { moto.changeState(IrairaState.getInstance()); } public void tabeta(Dog moto) { // なにもしない } public void tanoshii(Dog moto) { moto.changeState(FutsuuState.getInstance()); } public String toString() { return "眠い状態"; } } ``` ### 実行結果 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up