這三種模式也不是第一次見了,但是看過之后就忘記了,傻傻分不清楚,今天就來好好的理一理其中的區別!
1.適配器模式
首先是適配器的模式的解釋,將一個類的接口轉換成用戶期望的另一個接口,適配器模式使得原本不能一起工作的類可以一同工作,說白了就是使得目標接口的方法經過適配之后,可以完成原本不具備的能力。
網上給出的應用模型大體都是什么轉接頭啊,type-c轉vga接口等等的例子,這種例子雖然非常的形象,但是我本人看到這個例子,很難將這個模式應用到實際的代碼中去。后來在學習java io包的源碼的時候,意外的看到了這種模式的實際應用,大家可以去看一下io包中的InputStreamReader類,在這個類的編寫中就用到了神奇的適配器模式,這個類這里就不再詳細說了,官方說這個類是字節流通向字符流的橋梁,其實按照適配器模式中的角色來看,他就是一個適配器,使得InputStream和Reader這兩個接口可以一同工作!具體不在展開,這里想說的是,適配器模式和裝飾器模式以及代理模式是最容易區分的,因為適配器模式中一般是會有兩個接口,目的是讓讓兩個接口協同工作,而裝飾器模式和代理模式則是單個接口,從這一點就可以區分了!
2.裝飾器模式和代理模式
裝飾器模式和代理模式在我看來其實真的是非常非常的類似,有時候你混着用都說不出什么問題來!
裝飾器模式是目標類和裝飾類都實現了同一個接口,然后裝飾器里面持有了目標類的引用,這樣就可以對目標類的功能進行擴展了,擴展也是裝飾器的核心思想。
代理模式,在最簡單的代理模式中,也是被代理的類和代理類實現了同一個接口,然后代理類持有被代理的類的引用,使用者只能拿到代理類,對被代理類應該是無感的,透明的,這樣就可以透過代理類去對目標方法進行把控和輔助,這是他的核心思想。
這樣說來,兩者確實非常相似,但是從實際意義出發,代理,偏重因自己無法完成或自己無需關心,需要他人干涉事件流程,更多的是對對象的控制。
裝飾,偏重對原對象功能的擴展,擴展后的對象仍是是對象本身。