定义:适配器模式也称为包装器(Wrapper)模式。 适配器模式(AdapterPattern):将一个接口转换成客户希望的另 一个接口,适配器模式使接口不兼容的那些类可以一起工作。 它既可以作为类结构型模式,也可以作为对象结构型模式。 在适配器模式的定义中所提及的接口是指广义的接口,它可以表示成一个方法或者方法的集合。
优点:
缺点:
适用环境:
实例UML:
实例目录:
具体代码:
Dog.java
package adapter;
public class Dog {
public void wang(){
System.out.println("狗汪汪叫");
}
public void run(){
System.out.println("狗快快跑");
}
}
Robot.java
package adapter;
public interface Robot {
public void cry();
public void move();
}
DodAdapter.java
package adapter;
public class DogAdapter extends Dog implements Robot{
public void cry(){
System.out.println("机器人模仿:");
super.wang();
}
public void move(){
System.out.println("机器人模仿:");
super.run();
}
}
XMLUtil.java
package adapter;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
public class XMLUtil {
public static Object getBean() {
try {
//创建文档对象
DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder =dFactory.newDocumentBuilder();
Document doc;
doc=builder.parse(new File("adapter.xml"));
//获取文本节点
NodeList nl=doc.getElementsByTagName("className");
Node classNode=nl.item(0).getFirstChild();
String cName=classNode.getNodeValue();
Class c=Class.forName(cName);
Object obj=c.newInstance();
return obj;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
Client.java
package adapter;
public class Client {
public static void main(String[] args) {
Robot robot=(Robot) XMLUtil.getBean();
robot.cry();
robot.move();
}
}
adapter.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<className>adapter.DogAdapter</className>
</config>
运行结果: