標(biāo)簽(空格分隔):裝飾器模式 代理模式
裝飾器模式:在不改變原有結(jié)構(gòu)的情況下博投,允許動態(tài)的給一個現(xiàn)有對象添加一些額外的職責(zé)(額外的結(jié)構(gòu))
裝飾器模式需要創(chuàng)建了一個裝飾類,用來包裝原有的類加袋,并在保持類方法簽名完整性的前提下凛辣,提供了額外的功能
裝飾器模式主要解決:動態(tài)對一個類進(jìn)行擴(kuò)展,保證其原有結(jié)構(gòu)不變的基礎(chǔ)上獲得新的結(jié)構(gòu)和功能职烧。這種擴(kuò)展不以繼承的方式實(shí)現(xiàn)扁誓,有效的防止子類過分膨脹的問題。
優(yōu)點(diǎn):裝飾類和被裝飾類可以獨(dú)立發(fā)展蚀之,不會相互耦合蝗敢。
裝飾模式是繼承的一個替代的方法,裝飾模式可以動態(tài)擴(kuò)展一個實(shí)現(xiàn)類的功能足删。另外寿谴,裝飾模式可以實(shí)現(xiàn)未知順序的擴(kuò)展,將原有的父子結(jié)構(gòu)轉(zhuǎn)換為兄弟結(jié)構(gòu)失受,降低系統(tǒng)的耦合度讶泰。
代理模式:為其他對象提供一種代理以控制對這個對象的訪問咏瑟。
代理模式使用一個代理類來代表另一個類的功能,代理類持有現(xiàn)有對象痪署,并利用現(xiàn)有對象對外界提供功能码泞。代理模式可以看作是對原有對象的一個再包裝,現(xiàn)在其他對象對原有對象的訪問都應(yīng)該通過代理的模式來做狼犯,起到控制訪問的效果余寥。
代理模式主要解決:直接訪問對象的時候需要很多額外的操作(比如權(quán)限控制,安全性檢查等)辜王,這個對象被訪問的時候希望能無一例外的對這些請求做控制劈狐,此時則需要使用到代理模式。
優(yōu)點(diǎn):1呐馆、職責(zé)清晰肥缔,滿足單一職責(zé)原則。 被代理者和代理者各自負(fù)責(zé)自己的職責(zé)即可汹来,將被代理者的訪問控制轉(zhuǎn)移到代理者身上续膳。2、高擴(kuò)展性收班,代理者可以作為一個被代理者被再次包裝坟岔,在不改變原有結(jié)構(gòu)的基礎(chǔ)上擴(kuò)展新功能。
代理模式可以看作是一種特殊目的的裝飾器模式摔桦。
- 裝飾器是在不改變原有類的結(jié)構(gòu)下社付,為其增加新的功能。代理模式則是在不改變原有類的結(jié)構(gòu)下邻耕,控制其他類對其的訪問鸥咖,這種控制功能可以看作是為原有類增加的特殊的新功能。
- 代理模式為了實(shí)現(xiàn)對原有類的訪問的控制兄世,則要求持有原有對象啼辣。裝飾器模式?jīng)]有必要的要求,裝飾器模式可以和被裝飾類(原有類)互相獨(dú)立御滩,只需要在需要裝飾的時候可以獲取到被裝飾類即可鸥拧。
- 依據(jù)第二點(diǎn),可以看出代理模式和裝飾器模式之間最大的區(qū)別在于:代理模式中削解,代理者和被代理者的關(guān)系需要在編譯時就確定下來富弦,實(shí)現(xiàn)對被代理者的有效控制;裝飾器模式中氛驮,裝飾者和被裝飾者之間是相互獨(dú)立的腕柜,當(dāng)被裝飾者有新功能需要添加的時候,使用合適的裝飾者將其裝飾即可。