標(biāo)簽(空格分隔):裝飾器模式 代理模式
裝飾器模式:在不改變原有結(jié)構(gòu)的情況下,允許動態(tài)的給一個現(xiàn)有對象添加一些額外的職責(zé)(額外的結(jié)構(gòu))
裝飾器模式需要創(chuàng)建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能
裝飾器模式主要解決:動態(tài)對一個類進(jìn)行擴展,保證其原有結(jié)構(gòu)不變的基礎(chǔ)上獲得新的結(jié)構(gòu)和功能。這種擴展不以繼承的方式實現(xiàn),有效的防止子類過分膨脹的問題。
優(yōu)點:裝飾類和被裝飾類可以獨立發(fā)展,不會相互耦合。
裝飾模式是繼承的一個替代的方法,裝飾模式可以動態(tài)擴展一個實現(xiàn)類的功能。另外,裝飾模式可以實現(xiàn)未知順序的擴展,將原有的父子結(jié)構(gòu)轉(zhuǎn)換為兄弟結(jié)構(gòu),降低系統(tǒng)的耦合度。
代理模式:為其他對象提供一種代理以控制對這個對象的訪問。
代理模式使用一個代理類來代表另一個類的功能,代理類持有現(xiàn)有對象,并利用現(xiàn)有對象對外界提供功能。代理模式可以看作是對原有對象的一個再包裝,現(xiàn)在其他對象對原有對象的訪問都應(yīng)該通過代理的模式來做,起到控制訪問的效果。
代理模式主要解決:直接訪問對象的時候需要很多額外的操作(比如權(quán)限控制,安全性檢查等),這個對象被訪問的時候希望能無一例外的對這些請求做控制,此時則需要使用到代理模式。
優(yōu)點:1、職責(zé)清晰,滿足單一職責(zé)原則。 被代理者和代理者各自負(fù)責(zé)自己的職責(zé)即可,將被代理者的訪問控制轉(zhuǎn)移到代理者身上。2、高擴展性,代理者可以作為一個被代理者被再次包裝,在不改變原有結(jié)構(gòu)的基礎(chǔ)上擴展新功能。
代理模式可以看作是一種特殊目的的裝飾器模式。
- 裝飾器是在不改變原有類的結(jié)構(gòu)下,為其增加新的功能。代理模式則是在不改變原有類的結(jié)構(gòu)下,控制其他類對其的訪問,這種控制功能可以看作是為原有類增加的特殊的新功能。
- 代理模式為了實現(xiàn)對原有類的訪問的控制,則要求持有原有對象。裝飾器模式?jīng)]有必要的要求,裝飾器模式可以和被裝飾類(原有類)互相獨立,只需要在需要裝飾的時候可以獲取到被裝飾類即可。
- 依據(jù)第二點,可以看出代理模式和裝飾器模式之間最大的區(qū)別在于:代理模式中,代理者和被代理者的關(guān)系需要在編譯時就確定下來,實現(xiàn)對被代理者的有效控制;裝飾器模式中,裝飾者和被裝飾者之間是相互獨立的,當(dāng)被裝飾者有新功能需要添加的時候,使用合適的裝飾者將其裝飾即可。