java 介面卡模式實現程式碼
阿新 • • 發佈:2021-11-03
1、介面卡模式
介面卡模式可以分為類介面卡和物件介面卡。
1.1、類介面卡
//目標介面 interface Target { public void request(); } //適配者介面 class Adaptee { public void specificRequest() { System.out.println("適配者中的業務程式碼被呼叫!"); } } //類介面卡類 class ClassAdapter extends Adaptee implements Target { public void request() { specificRequest(); } } //客戶端程式碼 public class ClassAdapterTest { public static void main(String[] args) { System.out.println("類介面卡模式測試:"); Target target = new ClassAdapter(); target.request(); } }
1.2、物件介面卡
//物件介面卡類 class ObjectAdapter implements Target { private Adaptee adaptee; public ObjectAdapter(Adaptee adaptee) { this.adaptee=adaptee; } public void request() { adaptee.specificRequest(); } } //客戶端程式碼 public class ObjectAdapterTest { public static void main(String[] args) { System.out.println("物件介面卡模式測試:"); Adaptee adaptee = new Adaptee(); Target target = new ObjectAdapter(adaptee); target.request(); } }
2、介面卡模式例項
模擬新能源汽車的適配不同的發動機,在xml裡面讀取具體需要哪個發動機
//目標:發動機 interface Motor { public void drive(); } //適配者1:電能發動機 class ElectricMotor { public void electricDrive() { System.out.println("電能發動機驅動汽車!"); } } //適配者2:光能發動機 class OpticalMotor { public void opticalDrive() { System.out.println("光能發動機驅動汽車!"); } } //電能介面卡 class ElectricAdapter implements Motor { private ElectricMotor emotor; public ElectricAdapter() { emotor=new ElectricMotor(); } public void drive() { emotor.electricDrive(); } } //光能介面卡 class OpticalAdapter implements Motor { private OpticalMotor omotor; public OpticalAdapter() { omotor=new OpticalMotor(); } public void drive() { omotor.opticalDrive(); } } //客戶端程式碼 public class MotorAdapterTest { public static void main(String[] args) { System.out.println("介面卡模式測試:"); Motor motor=(Motor)ReadXML.getObject(); motor.drive(); } }
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
class ReadXML
{
public static Object getObject()
{
try
{
DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=dFactory.newDocumentBuilder();
Document doc;
doc=builder.parse(new File("src/adapter/config.xml"));
NodeList nl=doc.getElementsByTagName("className");
Node classNode=nl.item(0).getFirstChild();
String cName="adapter."+classNode.getNodeValue();
Class<?> c=Class.forName(cName);
Object obj=c.newInstance();
return obj;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
}