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