目錄
掌握的知識(shí)點(diǎn)
創(chuàng)建型
結(jié)構(gòu)型
行為型
掌握的知識(shí)點(diǎn)
- 設(shè)計(jì)模式分為哪3類
?
- 每一類包含哪些具體的設(shè)計(jì)模式
創(chuàng)建型
創(chuàng)建型模式是對(duì)對(duì)象實(shí)例化過程的抽象,他通過抽象類所定義的接口,封裝了系統(tǒng)中對(duì)象如何創(chuàng)建、組合等信息。
?
創(chuàng)建型模式主要用于創(chuàng)建對(duì)象,做到了軟件模塊跟對(duì)象的創(chuàng)建無關(guān)聯(lián)
包括的設(shè)計(jì)模式有:
- 抽象工廠模式
- 建造者模式
- 工廠方法模式
- 原型模式
- 單例模式
結(jié)構(gòu)型
結(jié)構(gòu)型模式主要用于如何組裝已有的類和對(duì)象,已獲得更大的結(jié)構(gòu),一般借鑒封裝、代理、繼承等概念講一個(gè)或者多個(gè)類進(jìn)行組合、封裝,已提供統(tǒng)一的外部視圖或新的功能。
?
主要負(fù)責(zé)處理類或?qū)ο笾g的關(guān)系,將類和對(duì)象進(jìn)行有效組織,形成良好的體系結(jié)構(gòu)
主要的模式包括:
- 適配器模式
- 橋接模式
- 組合模式
- 裝飾器模式
- 外觀模式
- 享元模式
- 代理模式
行為型
該模式主要用于對(duì)象之間的職責(zé)以及提供的服務(wù)的分配,不僅描述對(duì)象或類的模式,還描述他們之間的通信模式,特別是描述一組對(duì)等的對(duì)象怎樣相互協(xié)作以完成其中任一對(duì)象都無法單獨(dú)完成的任務(wù)。
?
主要處理類和對(duì)象之間的交互方式,以及如何為類和對(duì)象分配職責(zé)進(jìn)行描述
主要的模式包括:
- 責(zé)任鏈模式
- 命令模式
- 解釋器模式
- 迭代器模式
- 中介者模式
- 備忘錄模式
- 觀察者模式
- 狀態(tài)模式
- 策略模式
- 模板方法模式
- 訪問者模式
例子:
由于傳統(tǒng)的結(jié)構(gòu)化的軟件設(shè)計(jì)方法不符合面向?qū)ο蟮脑O(shè)計(jì)原則,無法很好地實(shí)現(xiàn)高內(nèi)聚低耦合的要求,模塊之間過于緊密,給軟件擴(kuò)展和維護(hù)帶來很多困難,這種情況下設(shè)計(jì)模式的出現(xiàn)和廣泛應(yīng)用給問題的解決提供了一種有效的方法,通過利用設(shè)計(jì)模式,可幫助開發(fā)者利用已有的設(shè)計(jì)方法,設(shè)計(jì)出結(jié)構(gòu)合理、易于復(fù)用和可維護(hù)的軟件,當(dāng)用戶需求發(fā)生改變時(shí),可通過修改少量代碼或不修改原有代碼即可滿足新的需求,增強(qiáng)了系統(tǒng)的可修改性和穩(wěn)定性,降低系統(tǒng)開發(fā)成本。
strategy,屬行為型,定義一系列算法,把它們一個(gè)個(gè)封裝起來,并且使它們之間可互相替換,從而讓算法可獨(dú)立于使用它的用戶而變化。在監(jiān)控模塊的告警功能上,我們監(jiān)控的各軟件的前端界面上可由用戶配置接收告警信息的方式,例如默認(rèn)釘釘另有短信、微信、電話語音,定時(shí)任務(wù)在監(jiān)控到有異常且滿足發(fā)告警的情況下,后端代碼會(huì)獲取到用戶配置的信息,根據(jù)配置信息調(diào)用指定的策略發(fā)送告警信息,具體實(shí)現(xiàn)是,先抽象出基類class AlarmSender,子類擴(kuò)展基類class DingSender(AlarmSender)、class SMSSender(AlarmSender)等,并在子類中定義具體實(shí)現(xiàn)def send(self, info),假設(shè)當(dāng)前有RabbitMQ告警且用戶配置的是默認(rèn)釘釘方式,則在發(fā)告警時(shí)的代碼為先實(shí)例化mq_ins = MQInfo(info='告警內(nèi)容', way=[DingSender]),way為具體的發(fā)告警的方式,再調(diào)用mq_ins.way.send(info)完成發(fā)送告警。使用這種模式我們發(fā)現(xiàn),發(fā)告警的方式(即算法)可自由切換,將發(fā)告警的類名作為參數(shù)傳入即可,這也是依賴抽象類設(shè)計(jì)接口的好處之一,還減少代碼冗余,擴(kuò)展性好,移植方便,使用靈活。
例子2:
策略模式:
在系統(tǒng)中,設(shè)計(jì)到住戶繳費(fèi)的功能,目前的線上繳費(fèi)渠道有多種,如微信,支付寶,銀聯(lián)支付等多種。各個(gè)支付渠道的算法又不相同,起初我們用多重條件判斷,涉及各個(gè)渠道支付實(shí)現(xiàn)的算法又包含重條件判斷,這樣定義后,發(fā)現(xiàn)代碼不夠簡潔,也不利于維護(hù),經(jīng)過分析后,我們選擇采用策略模式,首先定義了一個(gè)paystrategy接口作為抽象角色,然后定義了如alipaystrategy,wechatpaystrategy,unicompaystrategy具體角色,這些具體實(shí)現(xiàn)類里封裝了對(duì)于支付方式的算法,并且這些類實(shí)現(xiàn)paystrategy了接口。定義了paycontextstartegy,該類引用了paystrateg.當(dāng)web請(qǐng)求支付,并且?guī)в兄Ц斗绞降膒ay_code; controller接到請(qǐng)求后,使用paycontextstartegy調(diào)用具體的支付類如alipaystategy,wechatpaystategy,uniompaystrategy.通過使用策略模式,我們實(shí)現(xiàn)了不同方式的支付自由切換,避免了多次條件判斷,利用組合代替繼承,將算法的選擇和算法的實(shí)現(xiàn)分開,降低了程序間的耦合度,具有很好的擴(kuò)展型和可維護(hù)型。
例子3:
責(zé)任鏈模式:責(zé)任鏈模式是一種行為設(shè)計(jì)模式,?允許你將請(qǐng)求沿著處理者鏈進(jìn)行發(fā)送。?收到請(qǐng)求后,?每個(gè)處理者均可對(duì)請(qǐng)求進(jìn)行處理,?或?qū)⑵鋫鬟f給鏈上的下個(gè)處理者。
測(cè)試平臺(tái):?
請(qǐng)求---拼裝公共參數(shù)(環(huán)境信息,公共配置)----替換個(gè)性化參數(shù)---替換上下文參數(shù)
文章來源:http://www.zghlxwxcb.cn/news/detail-527375.html
?參考:責(zé)任鏈設(shè)計(jì)模式(職責(zé)鏈模式)文章來源地址http://www.zghlxwxcb.cn/news/detail-527375.html
到了這里,關(guān)于軟考高級(jí)系統(tǒng)架構(gòu)設(shè)計(jì)師(九) 作文模板-論設(shè)計(jì)模式及其應(yīng)用(未完待續(xù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!