適配器模式(Adapter Pattern)是做爲兩個不兼容的接口之間的橋樑。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。java
外國出差,給筆記本充電,德國有一套德國標準,中國有一套中國標準(國標),國際有一套國際標準,插排上有不一樣的孔,二孔、三孔等等(案例不必定真實)。。。設計模式
package com.cyb.ssm.design_pattern.adapter; /** * 德國標準的插排 * @author apple * */ public interface DBSocket { void charge(); }
package com.cyb.ssm.design_pattern.adapter; /** * 德國標準的插排 * @author apple * */ public class DBSocketImpl implements DBSocket { @Override public void charge() { System.out.println("使用兩眼插孔充電。。。"); } }
package com.cyb.ssm.design_pattern.adapter; /** * 中國標準的插排 * * @author apple * */ public interface GBSocket { void charge(); }
package com.cyb.ssm.design_pattern.adapter; /** * 中國標準的插排 * @author apple * */ public class GBSocketImpl implements GBSocket { @Override public void charge() { System.out.println("使用三眼插孔充電。。。。"); } }
package com.cyb.ssm.design_pattern.adapter; /** * 國際標準插排 * * @author apple * */ public interface GJBZSocket { void charge(); }
package com.cyb.ssm.design_pattern.adapter; /** * 國際標準插排 * * @author apple * */ public class GJBZSocketImpl implements GJBZSocket { @Override public void charge() { System.out.println("使用四眼插孔充電。。。。"); } }
package com.cyb.ssm.design_pattern.adapter; /** * 適配器(將不一樣類型的國標和德標都適配成國際標準) * * @author apple * @param <T> * */ public class SocketAdapter<T> implements GJBZSocket { private T socket; public SocketAdapter(T socket) { super(); this.socket = socket; } @Override public void charge() { if (socket instanceof GBSocket) { // 適配國標 ((GBSocket) socket).charge(); // 強轉數據類型,執行 } else if (socket instanceof DBSocket) { // 適配德標 ((DBSocket) socket).charge(); // 強轉數據類型,執行 } else if (socket instanceof GJBZSocket) { // 適配國際標準 ((GJBZSocket) socket).charge(); // 強轉數據類型,執行 } } }
package com.cyb.ssm.design_pattern.adapter; import org.junit.Test; /** * 適配器模式: 將不一樣類型的對象能夠經過適配模式,在一塊兒工做 * * @author apple * */ public class TestAdapter { @Test public void test() { // 德標 SocketAdapter<DBSocketImpl> socketAdapter1 = new SocketAdapter<DBSocketImpl>(new DBSocketImpl()); socketAdapter1.charge(); // 國標 SocketAdapter<GBSocketImpl> socketAdapter2 = new SocketAdapter<GBSocketImpl>(new GBSocketImpl()); socketAdapter2.charge(); // 國際標準 SocketAdapter<GJBZSocketImpl> socketAdapter3 = new SocketAdapter<GJBZSocketImpl>(new GJBZSocketImpl()); socketAdapter3.charge(); } }