設計模式漫談之狀態模式

Wang_Charle發表於2018-08-05

最近感悟挺多,看了很多原始碼,發現很多東西自己都不懂,程式設計師這條路真是慢慢其修遠兮啊,我愛寫一些感悟。在公司上班最重要的就是工作態度,(就是職業道德,工匠精神),工作習慣(有一套自己的工作方式方法),工作經驗(程式設計師絕對是長時間熬出來的),程式設計思想(把自己當成計算機才能理解計算機),業務邏輯(人的思維)。

兩個物件空間能訪問,必須能找到要訪問物件的引用。

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

 

總結,狀態模式就是某個物件的空間生命週期繼續使用。所有型別從個數上分,單個,多個,真正研究就是某個物件在記憶體中的生命週期。即物件從生到死,及互動物件的空間世界觀。

這篇部落格寫的不好,因為有些東西真是隻可意會說出來真的不太容易,不早了,晚安!

相關文章