1. 程式人生 > 其它 >java 介面卡模式實現程式碼

java 介面卡模式實現程式碼

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;
         }
    }
}