面向对象其实就是希望做到代码的责任分解
方法过长是坏味道
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列当中,可以把复杂的判断逻辑简单化
工作状态
// 抽象状态
public abstract class State {
public abstract void WriteProgram(Work w);
}
//上午工作状态
public class ForenoonState : State {
public override void WriteProgram(Work w) {
if(w.Hour < 12) {
Console.WriteLine("当前时间:{0} 上午工作,精神百倍",w.Hour);
}else {
w.SetState(new NoonState());
w.WriteProgram();
}
}
}
//中午状态 与上午状态代码类似,同样是超过某个时间点进行状态的变化
// 工作
public class Work {
private State current;
public Work() {
current = new ForenoonState();
}
private double hour;
public double Hour {
//get..
//set..
}
private bool finish = false;
public bool TaskFinished {
//get..
//set..
}
public void SetState(State s) {
current = s;
}
public void WriteProgram() {
current.WriteProgram(this);
}
}
恶心的加班,确实让人讨厌。