设计模式:适配器模式(Adapter)
生活随笔
收集整理的這篇文章主要介紹了
设计模式:适配器模式(Adapter)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
適配器模式:將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。適配器模式有類適配器模式和對象適配器模式兩種不同的形式。
適配器模式所涉及的角色:1. 目標角色(Target): 這就是所期待得到的接口。2. 源角色(Adaptee):需要適配的接口3. 適配器角色(Adapter):適配器類是本模式的核心。適配器把源接口轉換成目標接口。顯然,這一角色不可以是接口,而必須是具體類。
package com.learn.adapter;/*** 目標角色(Target),這就是所期待得到的接口* @author Leon.Sun**/
public interface Target {public void request();}
package com.learn.adapter;/*** 源角色(Adaptee),需要適配的接口* @author Leon.Sun**/
public class Adaptee {public void specificRequest() {System.out.println("被適配的類Adaptee");}}
package com.learn.adapter;/*** 適配器角色(Adapter):適配器類是本模式的核心,適配器把源接口轉換成目標接口.* 顯然,這一角色不可以是接口,而必須是具體類.* * 類適配器決定了Target不能為類,只能為接口,因為JAVA不支持多繼承的關系* @author Leon.Sun**/
public class Adapter extends Adaptee implements Target {@Overridepublic void request() {super.specificRequest();}}
package com.learn.adapter;public class MainTest {public static void main(String[] args) {Target adapter = new Adapter();adapter.request();}
}
對象適配器1. 目標角色(同上,這里的目標角色Target可以為類)2. 源角色(同上)3. 適配器角色
package com.learn.adapter;public class ObjectAdapter implements Target {private Adaptee adaptee;public ObjectAdapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {this.adaptee.specificRequest();}}
package com.learn.adapter;public class MainTest {public static void main(String[] args) {Target adapter = new ObjectAdapter(new Adaptee());adapter.request();}
}
Jdk中的適配器模式1. java.util.Arrays#asList()2. java.io.InputStreamReader(InputStream)3. java.io.OutputStreamWriter(OutputStream)
優點:1. 系統需要使用現有的類,而此類的接口不符合系統的需要。那么通過適配器模式就可以讓這些功能得到更好的復用。2. 更好的擴展性:在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能。缺點:1. 過多的使用適配器,會讓系統非常零亂,不易整體進行把握。2. 如果不是很有必要,可以不使用適配器,而是直接對系統進行重構。
默認適配器1. 當你想實現一個接口但又不想實現接口中所有的方法,只想去實現一部分方法時,就用到了默認適配器模式。2. 在接口和具體實現類中添加一個抽象類,而用抽象類是實現目標接口的所有方法。3. 而具體的實現類只需要覆蓋其需要完成的方法即可。
package com.learn.adapter;/*** 接口類,有許多方法,吃,睡,工作以及鍛煉,但是我懶只想吃和睡* @author Leon.Sun**/
public interface Live {void sleep();void eat();void work();void train();}
package com.learn.adapter;/*** 抽象類* @author Leon.Sun**/
public class LiveDefault implements Live {@Overridepublic void sleep() {}@Overridepublic void eat() {}@Overridepublic void work() {}@Overridepublic void train() {}}
package com.learn.adapter;public class LiveImpl extends LiveDefault {@Overridepublic void eat() {System.out.println("哇,好好吃");}@Overridepublic void sleep() {System.out.println("不想起床");}}
?
總結
以上是生活随笔為你收集整理的设计模式:适配器模式(Adapter)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring+ActiveMQ+Mysq
- 下一篇: 设计模式之_Strategy_01