delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句
使用策略模式代替多個(gè)if條件語(yǔ)句
一、背景:
1.1、多個(gè)if else語(yǔ)句,并且每個(gè)條件都有復(fù)雜的邏輯,代碼變的異常臃腫。
1.2、維護(hù)成本很大,修改一個(gè)存在多年的類(lèi),要理清楚找到具體的if條件進(jìn)行修改,代碼行數(shù)很多時(shí),需要不斷的使用滾動(dòng)條跳轉(zhuǎn)到具體的行號(hào)。
1.3、如果客戶(hù)要求新增一個(gè)算法,還需要再寫(xiě)一個(gè)if else,違反了設(shè)計(jì)模式六大原則中的“開(kāi)閉原則”。
二、定義:
2.1、策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來(lái),使每個(gè)算法可以相互替代,使算法本身和使用算法的客戶(hù)端分割開(kāi)來(lái),相互獨(dú)立。
2.2、重點(diǎn)不是如何實(shí)現(xiàn)算法,而是如何組織和調(diào)用這些算法,從而讓我們的程序結(jié)構(gòu)更加的靈活、可擴(kuò)展。
三、使用場(chǎng)景:
3.1、策略模式一般使用在不同策略比較復(fù)雜或者要執(zhí)行不同操作等,每個(gè)if需要執(zhí)行大段代碼的情況。
四、優(yōu)點(diǎn):
4.1、把一個(gè)復(fù)雜的代碼塊,拆分成若干個(gè)邏輯清晰的小代碼塊。
4.2、策略模式通過(guò)抽象、封裝來(lái)定義一系列的算法,使得這些算法可以相互替換,為這些算法定義一個(gè)公共的接口,以約束這些算法的功能具體實(shí)現(xiàn)。如果這些算法具有公共的功能,可以將接口變?yōu)槌橄箢?lèi),將公共功能放到抽象父類(lèi)里面。
4.3、策略模式擴(kuò)展性更好,擴(kuò)展策略實(shí)現(xiàn)非常容易,只需新增一個(gè)策略實(shí)現(xiàn)類(lèi),然后在使用策略實(shí)現(xiàn)的地方,使用這個(gè)新的策略實(shí)現(xiàn)就好。新增或修改時(shí),只新增或修改具體的某個(gè)策略類(lèi),其他策略類(lèi)不用修改,減少代碼審核人員審核工作量。
4.4、面向接口或抽象編程,能夠享受到面向接口編程帶來(lái)的好處,通過(guò)統(tǒng)一的的策略接口來(lái)封裝和分離各個(gè)具體的策略實(shí)現(xiàn),無(wú)需關(guān)心具體的策略實(shí)現(xiàn)。
五、缺點(diǎn):
5.1、客戶(hù)端必須了解所有的策略,清楚它們的不同:如果由客戶(hù)端來(lái)決定使用何種算法,那客戶(hù)端必須知道所有的策略,清楚各個(gè)策略的功能和不同,這樣才能做出正確的選擇,但是這暴露了策略的具體實(shí)現(xiàn)。
5.2、增加了對(duì)象的數(shù)量:由于策略模式將每個(gè)具體的算法都單獨(dú)封裝為一個(gè)策略類(lèi),如果可選的策略有很多的話(huà),那對(duì)象的數(shù)量也會(huì)很多。
5.3、只適合偏平的算法結(jié)構(gòu):由于策略模式的各個(gè)策略實(shí)現(xiàn)是平等的關(guān)系(可相互替換),實(shí)際上就構(gòu)成了一個(gè)扁平的算法結(jié)構(gòu)。即一個(gè)策略接口下面有多個(gè)平等的策略實(shí)現(xiàn)(多個(gè)策略實(shí)現(xiàn)是兄弟關(guān)系),并且運(yùn)行時(shí)只能有一個(gè)算法被使用。這就限制了算法的使用層級(jí),且不能被嵌套。
問(wèn)題解決
總結(jié)
以上是生活随笔為你收集整理的delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 矫正牙齿后会反弹吗
- 下一篇: 输卵管堵塞治疗需要花多少钱