ステータスモードの符号化実装例
3062 ワード
ソース:
実行結果:
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
, , !