需求:現(xiàn)在需要做一個(gè)簡單計(jì)算器,有加法辅辩,減法。
類圖如下:
接口或者父類:Arthmeric(算法)
實(shí)現(xiàn)類或子類:AddAri(加法運(yùn)算)凡泣、SubtractionAri(減法運(yùn)算)
工廠類:產(chǎn)生AddAri實(shí)例和SubtractionAri實(shí)例
測試類:TestDemo調(diào)用工廠類獲取AddAri和SubtractionAri實(shí)例進(jìn)行運(yùn)算
新需求:增加兩個(gè)算法乘法和除法
類圖如下:
現(xiàn)在增加了MultiplicationAri(乘法運(yùn)算)箫措、DivisionAri(除法運(yùn)算運(yùn)算)桦山,符合新需求尘分。
缺點(diǎn):在增加新算法的同時(shí)需要修改工廠類排拷,耦合度太高膘婶;如果不想修改工廠類缺前,保持原有的AddAri和SubtractionAri兩個(gè)類,則需要在接口新增方法悬襟,同時(shí)需要在兩個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)新方法衅码,同樣耦合度太高。
解決方案:分離變化部分(加法脊岳、減法逝段、乘法垛玻、除法),封裝接口奶躯,基于接口編程各種功能帚桩。
策略模式類圖:
現(xiàn)在無論增加多少個(gè)算法,平方根嘹黔、平均數(shù)账嚎、最大值、最小值儡蔓,都不需要改變contextArithmetic,只需要在算法族增加新的算法郭蕉,實(shí)現(xiàn)算法與contextArithmetic的解耦,其實(shí)這就是策略模式浙值。
策略模式定義:它定義了算法家族(加法恳不、減法、乘法等)开呐,分別封裝起來烟勋,讓他們之間課可以互換,此模式讓算法的變化筐付,不會(huì)影響使用算法的客戶(contextArithmetic)卵惦。
代碼如下:
算術(shù)接口類:
加法:
減法:
算術(shù)上下文:
測試類: