通过工厂模式和配置文件方式结合模拟框架的配置

来源:互联网 发布:vss软件保护 编辑:程序博客网 时间:2024/05/22 06:11

本实例的结构图如下:




我们一般开发遵循面向对象的五大基本原则(新手可以自行百度),其中一项为开闭原则,既增加功能的时候

尽量不要改变原来程序的代码,这点容易实现,使用配置文件进行读取无疑是较优的方式,然后通过反射技术

进行类的实例化。


代码架构如下:


代码如下:

<?xml version="1.0"?><config>    <className>com.company.BenzFactory</className></config>package com.company;/** * Created by Dqd on 2017/4/15. */public interface CarFactory {    Car productCar();}public class BMWFactory implements CarFactory{    @Override    public Car productCar() {        return  new BMW();    }}public class BenzFactory implements  CarFactory{    @Override    public Car productCar() {        return new Benz();    }}public interface Car {    void run();}public class Benz implements Car {    @Override    public void run() {        System.out.println("Benz 开车了");    }}public class BMW implements Car {    @Override    public void run() {        System.out.println("BMW 开车了");    }}/** * Created by Dqd on 2017/4/15. */public class GetCar {    static CarFactory carFactory;    static Car car;    public static void main(String[] args){        carFactory = (CarFactory) XMLUtil.getBean();        car = (Car) carFactory.productCar();        car.run();    }}import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import java.io.File;import java.io.IOException;/** * Created by Dqd on 2017/4/15. */public class XMLUtil {    public static Object getBean(){        try {            DocumentBuilderFactory documentBuilderFactory =                DocumentBuilderFactory.newInstance();            DocumentBuilder documentBuilder =                    documentBuilderFactory.newDocumentBuilder();            Document  document;            document = documentBuilder.parse(new File("source/car.xml"));            //获取类名的文本节点            NodeList nodeList = document.getElementsByTagName("className");            Node node = nodeList.item(0).getFirstChild();            String strname = node.getNodeValue();            Class c = Class.forName(strname);            Object object = c.newInstance();            return object;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }}

参考:http://blog.csdn.net/lovelion/article/details/7430414

0 0