ステータスモードの符号化実装例


ソース:
 
public class StatePattern {
	interface Position{		
		public String getNextPostion(Programer p);
		public String getLastPostion(Programer p);
	}

	class Manager implements Position{
		public String getNextPostion(Programer p) {
			p.position = new General();
			return "    ";
		}

		public String getLastPostion(Programer p) {		
			p.position = new GroupLeader();
			return "    ";
		}
	}

	class Coder implements Position{
		public String getNextPostion(Programer p) {
			p.position = new GroupLeader();
			return "    ";
		}

		public String getLastPostion(Programer p) {	
			p.position = new Coder();
			return "Coder";
		}
	}

	class GroupLeader implements Position{
		public String getNextPostion(Programer p) {
			p.position = new Manager();
			return "    ";
		}

		public String getLastPostion(Programer p) {	
			p.position = new Coder();
			return "Coder";
		}
	}

	class General implements Position{
		public String getNextPostion(Programer p) {				
			return "CTO";
		}

		public String getLastPostion(Programer p) {	
			p.position = new Manager();
			return "    ";
		}
	}

	class Programer{
		private Position position;
		
		public Programer(){
			System.out.println("      ,     Coder.");
			position = new Coder();
		}
		
		public void raised(){			
			System.out.println("    ,      :"+position.getNextPostion(this));
		}
		public void fall(){			
			System.out.println("   ,    ,      :"+position.getLastPostion(this));
		}
		
		public void workHard(){
			System.out.println("    .....");
		}
		
		public void worklazy(){
			System.out.println("     ,     .....");
		}
		
		public void goalway(){
			System.out.println("        ,        , !");
		}
	}
	
	public static void main(String[] args) {		
		StatePattern sp = new StatePattern();
		Programer p =sp.new Programer();		
		p.workHard();		
		p.raised();
		p.workHard();		
		p.raised();
		p.workHard();		
		p.raised();
		p.worklazy();
		p.fall();
		p.worklazy();
		p.fall();
		p.worklazy();
		p.fall();
		
		
		p.goalway();
	}

}


実行結果:
 
      ,     Coder.
    .....
    ,      :    
    .....
    ,      :    
    .....
    ,      :    
     ,     .....
   ,    ,      :    
     ,     .....
   ,    ,      :    
     ,     .....
   ,    ,      :Coder
        ,        , !