最近温习设计模式,看了这篇文章,根据自己的理解进行了一些修改,加深一下印象。
背景:菜鸟马上又要去德国出差了,上一次由于不知道德国插座与中国插座不同,带去的电子设备好险没充上电,差点沦为摆设,让他在心仪的小美面前出了洋相。这一次,菜鸟吸取教训,特意去超市采购了一件神器,有了神器在手,再也不担心出洋相了。
package adapterPattern;
/**
* Created by cq on 2015/8/16.
* 测试适配器模式
*/
public class Shaver {
private GlSSocketInterface glsocket;
//插入插座
public void setSocket(GlSSocketInterface glsocket){
this.glsocket = glsocket;
}
//充电
public void charge(){
glsocket.powerWithGlS();
}
public static void main(String[] args){
//菜鸟有一把剃须刀
Shaver shaver = new Shaver();
//菜鸟在国内给剃须刀充电
//这里有国标插座,直接使用
GlSSocketInterface glSSocket = new GlSSocket();
//插入国标插座
shaver.setSocket(glSSocket);
//充电
shaver.charge();
//菜鸟出差到了国外,准备给剃须刀充电
//这里只有德国插座(旁边小美斜睨着菜鸟)
GeSSocket geSSocket = new GeSSocket();
//哈哈,大笑中掏出插座适配器,插入德国插座
glSSocket = new SocketAdapter(geSSocket);
//剃须刀插入适配器
shaver.setSocket(glSSocket);
//顺利充电
shaver.charge();
}
}
//符合德国插座标准的德国插座
class GeSSocket{
public void powerWithGeS(){
System.out.println("德国插座充电中...");
}
}
//符合国际标准的插座
interface GlSSocketInterface{
void powerWithGlS();
}
//符合国际插座标准的插座
class GlSSocket implements GlSSocketInterface{
public void powerWithGlS(){
System.out.println("国标插座充电中...");
}
}
//插座适配器,提供给国标剃须刀无缝充电体验
class SocketAdapter implements GlSSocketInterface{
private GeSSocket geSSocket;
public SocketAdapter(GeSSocket geSSocket){
this.geSSocket = geSSocket;
}
//将德国插座送过来的电以国标插座的方式送出
public void powerWithGlS(){
System.out.println("正在使用适配器进行适配...");
geSSocket.powerWithGeS();
}
}