單一職責原因

2022-04-10 15:23:42 字數 999 閱讀 4503

單一職責原則,就乙個類而言,應該僅有乙個引起它變化的原因。

現在比如說要寫乙個俄羅斯方塊,怎麼能實現功能的**復用呢?

不管怎麼樣遊戲中的有些東西是始終沒有變化的,比如說下落、旋轉、碰撞判斷、移動、堆積這些遊戲的邏輯是沒有變化的。這些都是和遊戲有關的邏輯,和介面如何沒有什麼關係。

如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,設計會遭受到意向不到的破壞。

軟體設計真正要做的許多的內容就是發現職責,並把那些職責相互分離。

下面就寫乙個完整的俄羅斯方塊的遊戲:

第一步:遊戲邏輯分析

方塊的可移動區域,可以設計為乙個二維整型的陣列用來表示座標,比如說寬10高20,則:

int arraysquare = new

int[10][20];

整個方塊的移動其實就是陣列下標的變化,比如說原方塊在arraysquare[3][5]上,則下移時就變成arraysquare[3][6],如果下移的同時還按下了左鍵,就是arraysquare[2][6]。

每個陣列的值就是是否存在方塊的標誌,存在為1,不存在時預設為0。

所以碰撞檢測:

是否能左移就是判斷arraysquare[x][y]中的x-1是否小於0,否則就碰撞了。或者arraysquare[x-1][y]是否等於1,否則就說明左側有堆積的方塊。

所謂堆積,不過是判斷arraysquare[x][y+1]是否等於1的過程,如果是則將自己arraysquare[x][y]的值修改為1。

那麼消層,就是arraysquare[x][y]中迴圈由0到9,判斷arraysquare[x][y]是否都等於1,是則次行資料清零,並將其上方的陣列值遍歷下移一位。

所謂遊戲邏輯,不過是陣列的每一項值變化的問題,下落、旋轉、碰撞檢測、移動、堆積這些都是在做陣列具體項的值的變化。

而這部分遊戲的邏輯,**是可以復用的。

[未完,待續……]

單一職責原則

定義 不要存在多於乙個導致類變更的原因。通俗的說,即乙個類只負責一項職責。問題由來 類t負責兩個不同的職責 職責p1,職責p2。當由於職責p1需求發生改變而需要修改類t時,有可能會導致原本執行正常的職責p2功能發生故障。解決方案 遵循單一職責原則。分別建立兩個類t1 t2,使t1完成職責p1功能,t...

單一職責原則

單一職責原則 乙個類,只有乙個引起它變化的原因。應該只有乙個職責。每乙個職責都是變化的乙個軸線,如果乙個類有乙個以上的職責,這些職責就耦合在了一起。這會導致脆弱的設計。當乙個職責發生變化時,可能會影響其它的職責。另外,多個職責耦合在一起,會影響復用性。例如 要實現邏輯和介面的分離。對於user類,裡...

單一職責原則

問題由來 一心二用,效率降低 類t負責兩個不同的職責 職責p1,職責p2。當由於職責p1需求發生改變而需要修改類t時,有可能會導致原本執行正常的職責p2功能發生故障。解決方案 專注做某件事情 遵循單一職責原則。分別建立兩個類t1 t2,使t1完成職責p1功能,t2完成職責p2功能。這樣,當修改類t1...