设计模式漫谈之状态模式
最近感悟挺多,看了很多源码,发现很多东西自己都不懂,程序员这条路真是慢慢其修远兮啊,我爱写一些感悟。在公司上班最重要的就是工作态度,(就是职业道德,工匠精神),工作习惯(有一套自己的工作方式方法),工作经验(程序员绝对是长时间熬出来的),编程思想(把自己当成计算机才能理解计算机),业务逻辑(人的思维)。
两个对象空间能访问,必须能找到要访问对象的引用。
if else 条件是如果没合适的都判断,有就退出。
成员就近原则,对象中的方法可以访问对象的属性。
最近熬夜睡眠不好,这篇文章也写了好几天,最近公司不是太忙,我看了很多博客,感觉js语言,这种解释性语言也挺厉害的。我目前的规划是精通C#语言,JS语言,一种编译语言,一种解释语言,然后框架。当然C语言,汇编,这些也是我要了解的。
真要给自己一个目标,否则人生没有方向,生活没有动力。
单向通信是一个对象A能访问对象B,但是在B对象中不能访问A对象,双向通信就是互相都可以访问。
状态模式就是一直可以访问对象的状态。双向通信。直接上例子:
//抽象的约束是对象A(state),在方法中能访问B(work).(这种理解是不恰当的,应该这样理解:对象B可以访问对象A的所有成员。对象A可以访问对象B所在的方法)
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();
}
}
}
//work对象可以访问state对象
public class Work
{
private State current;
public Work()
{
current = new ForenoonState();
}
private double hour;
public double Hour
{
get { return hour; }
set { hour = value; }
}
private bool finish = false;
public bool TaskFinished
{
get { return finish; }
set { finish = value; }
}
public void SetState(State s)
{
current = s;
}
public void WriteProgram()
{
//把当前的work对象保存传递
current.WriteProgram(this);
}
}
//对象的整个空间生命周期是继续使用
Work emergencyProjects = new Work();
emergencyProjects.Hour = 9;
emergencyProjects.WriteProgram();
emergencyProjects.Hour = 10;
emergencyProjects.WriteProgram();
总结,状态模式就是某个对象的空间生命周期继续使用。所有类型从个数上分,单个,多个,真正研究就是某个对象在内存中的生命周期。即对象从生到死,及交互对象的空间世界观。
这篇博客写的不好,因为有些东西真是只可意会说出来真的不太容易,不早了,晚安!