设计模式之☞适配器模式,通俗易懂,一学就会!!!
简介
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
功能展示
场景模拟
外国出差,给笔记本充电,德国有一套德国标准,中国有一套中国标准(国标),国际有一套国际标准,插排上有不同的孔,二孔、三孔等等(案例不一定真实)。。。
功能介绍
- 给笔记本充电
代码实现
德国标准
德国接口:DBSocket.java
package com.cyb.ssm.design_pattern.adapter;
/**
* 德国标准的插排
* @author apple
*
*/
public interface DBSocket {
void charge();
}
德国接口实现:DBSocketImpl.java
package com.cyb.ssm.design_pattern.adapter;
/**
* 德国标准的插排
* @author apple
*
*/
public class DBSocketImpl implements DBSocket {
@Override
public void charge() {
System.out.println("使用两眼插孔充电。。。");
}
}
国标标准(中国)
国标接口:GBSocket.java
package com.cyb.ssm.design_pattern.adapter;
/**
* 中国标准的插排
*
* @author apple
*
*/
public interface GBSocket {
void charge();
}
国标接口实现:GBSocketImpl.java
package com.cyb.ssm.design_pattern.adapter;
/**
* 中国标准的插排
* @author apple
*
*/
public class GBSocketImpl implements GBSocket {
@Override
public void charge() {
System.out.println("使用三眼插孔充电。。。。");
}
}
国际标准
国际标准接口:GJBZSocket.java
package com.cyb.ssm.design_pattern.adapter;
/**
* 国际标准插排
*
* @author apple
*
*/
public interface GJBZSocket {
void charge();
}
国际标准接口实现:GJBZSocketImpl.java
package com.cyb.ssm.design_pattern.adapter;
/**
* 国际标准插排
*
* @author apple
*
*/
public class GJBZSocketImpl implements GJBZSocket {
@Override
public void charge() {
System.out.println("使用四眼插孔充电。。。。");
}
}
适配器(重点)
适配类:SocketAdapter.java
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(); // 强转数据类型,执行
}
}
}
测试类:TestAdapter.java
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();
}
}
实现

赞 (0)
