2024/10/11

/**

 * 抽象汽车类

 */

public abstract class Vehicle

{

    protected Road road;

 

    //为汽车设置行驶的马路

    public void setRoad(Road road)

    {

        this.road = road;

    }

 

    //抽象行驶方法

    public abstract void drive();

}

 

public class Bus extends Vehicle

{

    //bus的行驶方法

    @Override

    public void drive()

    {

        String carType = "bus";

        this.road.bedrive(carType);

    }

}

 

public class Car extends Vehicle

{

    //car的行驶方法

    @Override

    public void drive()

    {

        String carType = "car";

        this.road.bedrive(carType);

    }

}

 

public interface Road

{

    void bedrive(String carType);

}

 

public class ConcreteRoad implements Road

{

    //水泥路

    @Override

    public void bedrive(String carType)

    {

        System.out.println(carType+"在水泥路行驶");

    }

}

 

public class PitchRoad implements Road

{

    //沥青路

    @Override

    public void bedrive(String carType)

    {

        System.out.println(carType + "在沥青路行驶");

    }

}

 

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(String args)

    {

        try

        {

            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder = dFactory.newDocumentBuilder();

            Document doc;

            doc = builder.parse(new File("src/main/resources/config9.xml"));

            Node classNode = null;

            NodeList nl = doc.getElementsByTagName("className");

            if (args.equals("road"))

            {

                classNode = nl.item(0).getFirstChild();

            } else if (args.equals("vehicle"))

            {

                classNode = nl.item(1).getFirstChild();

            }

            String cName = classNode.getNodeValue();

            Class c = Class.forName(cName);

            Object obj = c.newInstance();

            return obj;

        }

        catch (Exception e)

        {

            e.printStackTrace();

            return null;

        }

    }

}

 

public class Client

{

    public static void main(String[] args)

    {

        //从xml配置文件动态获取汽车类型

        Vehicle vehicle = (Vehicle) XMLUtil.getBean("vehicle");

        //动态获取路的类型

        Road road = (Road) XMLUtil.getBean("road");

        //给汽车设置行驶的路

        vehicle.setRoad(road);

        //调用汽车的行驶方法

        vehicle.drive();

    }

}

config9.xml

<?xml version="1.0" encoding="UTF-8"?>

<config>

<className>org.example.ConcreteRoad</className>
<className>org.example.Bus</className>

</config>

posted @ 2024-10-11 17:14  为20岁努力  阅读(8)  评论(0)    收藏  举报