【編程練習】面向對象編程之行為型設計模式
大觀園的工錢
作者:羅勝金【版權所有,轉載請注明原作者】
大觀園內,鳳姐身體有恙,連日不見得好,只得把管家重任托付于探春。轉眼就是月末,探春姑娘打開賬本,準備給賈府上下的丫鬟、奴仆們算工錢,當她看到賬本上旁注的工錢計算規則,不禁蹙眉。
你道為何?原來,大觀園內,下人的工錢計算相當繁瑣,大致有如下三個規則:
其一,下人計算工錢時,分別有一個例錢因子,一個打賞因子,每位下人各各不同。
例如:
晴雯的例錢因子,是逢1、3、5...單月為900錢,逢2、4、6...雙月為800錢;打賞因子固定為500錢。
麝月的例錢因子,是固定為600錢;打賞因子,則是上半年為400錢,下半年為700錢。
襲人的例錢因子,則是1、3季度為一吊錢(1000錢),2、4季度為一吊錢加500錢(1500錢);打賞因子,固定是兩吊錢(2000錢)。
...
其二,同一個下人,在伺候不同的主子時,所得工錢不同,每個主子分別有自己的工錢算法。
例如:
寶玉出手闊綽,每月支出工錢時,是把下人的例錢因子加上打賞因子,再乘以8倍。
老太太(賈母)也算大方,每月支出工錢時,是在下人的例錢因子和打賞因子中,取大的那個數,再乘以10倍。
王夫人比較小氣,每月支出工錢時,是在下人的例錢因子和打賞因子中,取小的那個數,再乘以5倍。
賈政老爺,每月是把下人的例錢因子乘以4倍,打賞因子乘以2倍,二者相加作為工錢。
...
其三,自從賈政發現怡紅院中,寶玉整天和晴雯等丫頭廝混在一起、不學無術,大為光火,于是在大觀園內施行新規,丫鬟、奴仆們伺候哪個主子,不再固定,而是每月隨機確定。
舉例說明:假如10月份,晴雯姑娘被隨機抽中去伺候賈政賈老爺,那么晴雯的當月工錢是這么計算的:
例錢因子,10月份是雙月,因此是800錢;打賞因子是500錢。因此結合賈老爺的算法,晴雯工錢總數是800*4+500*2=4200錢。
...
探春沉思半晌,想到每個月都要這般細算一番,好生頭痛,因此決定雇你寫一個軟件,幫她計算每月丫鬟、奴仆們的工錢。要求如下:
1、只需給出配對的下人和主子,便可自動統計出這個下人的當月工錢。
2、新增主子或新增下人時,不可改動原有算法,也不可改動原有數據結構。
3、方式一:使用面向對象方式實現。
4、方式二(可選):使用函數組合方式實現,并比較與面向對象方式的差異、優劣。
5、使用TDD方式開發,要求有足夠的自動化測試用例。
參考類圖: