您編寫了一個類,以便該類的實例保持狀態。你把這個狀態放在一個類中,因爲類中的所有狀態都是相關的。你有函數來管理這個狀態,這樣就無法設置狀態的無效排列(臭名昭着的正方形有成員寬度和高度,但是如果寬度不不等於它不是一個真正的方形。)
如果你沒有狀態,你不需要一個類,你可以只使用免費函數(或在Java中,靜態函數)。
所以,問題不是「我應該有一個功能嗎?」而是「我的班級封裝的是什麼有狀態的實體?「
也許你有一個函數,將所有國家 - 和你應該讓更精細,使得例如,而不必void Rectangle::setWidthAndHeight(int x, int y)
你應該有一個setWidth
和獨立setHeight
也許你有。一個構造函數,設置東西,和一個單一的功能doesIt
,不管「它」,然後你有函子,和一個doIt
可能是有意義的。例如,class Add implements Operation { Add(int howmuch); Operand doIt(Operand rhs);}
(但你可能會發現,你真的想要像訪問者模式 - 一個純粹的f如果你有純粹的價值對象,那麼unctor更有可能;如果它們被安排在一棵樹中,並且彼此相關,訪客就更有可能)。
即使有這麼多小對象,單功能是正確的粒度級別,你可能想要像Facade Pattern這樣的東西來構造出原始操作,經常使用的複雜操作。
沒有人回答。如果你真的有一堆仿函數,那很酷。如果你真的只是把每個免費的功能變成一個班級,那是愚蠢的。
真正的答案在於回答這個問題:「我管理的是什麼狀態,以及我的班級如何模擬我的問題域?」