状态模式之编码实现示例

源码:

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
看来我真的是老了,不适合做程序员了,嗨!
 

猜你喜欢

转载自greatjone.iteye.com/blog/1162610