欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式漫谈之状态模式

程序员文章站 2022-03-13 14:34:11
最近感悟挺多,看了很多源码,发现很多东西自己都不懂,程序员这条路真是慢慢其修远兮啊,我爱写一些感悟。在公司上班最重要的就是工作态度,(就是职业道德,工匠精神),工作习惯(有一套自己的工作方式方法),工作经验(程序员绝对是长时间熬出来的),编程思想(把自己当成计算机才能理解计算机),业务逻辑(人的思维 ......

最近感悟挺多,看了很多源码,发现很多东西自己都不懂,程序员这条路真是慢慢其修远兮啊,我爱写一些感悟。在公司上班最重要的就是工作态度,(就是职业道德,工匠精神),工作习惯(有一套自己的工作方式方法),工作经验(程序员绝对是长时间熬出来的),编程思想(把自己当成计算机才能理解计算机),业务逻辑(人的思维)。

两个对象空间能访问,必须能找到要访问对象的引用。

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();

 

总结,状态模式就是某个对象的空间生命周期继续使用。所有类型从个数上分,单个,多个,真正研究就是某个对象在内存中的生命周期。即对象从生到死,及交互对象的空间世界观。

这篇博客写的不好,因为有些东西真是只可意会说出来真的不太容易,不早了,晚安!