问题描述
基本类图
项目结构
实现工厂模式
运行的效果
代码
package Car;
public interface Benz {
public void carColor();
public void carSpeed();
public void carPrice();
}
package Car;
public class BenzC180 implements Benz {
@Override
public void carColor() {
System.out.println("BenzC180:carColor:red");
}
@Override
public void carSpeed() {
System.out.println("BenzC180:carSpeed:100km/h");
}
@Override
public void carPrice() {
System.out.println("BenzC180:carPrice:500,000");
}
}
package Car;
public class BenzE260 implements Benz {
@Override
public void carColor() {
System.out.println("BenzE260:carColor:blue");
}
@Override
public void carSpeed() {
System.out.println("BenzE260:carSpeed:120km/h");
}
@Override
public void carPrice() {
System.out.println("BenzE260:carPrice:1,000,000");
}
}
package Car;
public interface BenzFactory extends Benz{
public void createCar();
}
package Car;
public class C180Factory implements BenzFactory{
@Override
public void carColor() {
System.out.println("BenzC180:carColor:red");
}
@Override
public void carSpeed() {
System.out.println("BenzC180:carSpeed:100km/h");
}
@Override
public void carPrice() {
System.out.println("BenzC180:carPrice:500,000");
}
@Override
public void createCar() {
System.out.println("BenzC180:createCar");
}
}
package Car;
public class E260Factory implements BenzFactory{
@Override
public void carColor() {
System.out.println("BenzE260:carColor:blue");
}
@Override
public void carSpeed() {
System.out.println("BenzE260:carSpeed:120km/h");
}
@Override
public void carPrice() {
System.out.println("BenzE260:carPrice:1,000,000");
}
@Override
public void createCar() {
System.out.println("BenzE260:createCar");
}
}
package Car;
public class main {
public static void main(String[] args) {
// 生产BenzC180
BenzFactory c180 = new C180Factory();
c180.carColor();
c180.carPrice();
c180.carSpeed();
c180.createCar();
System.out.println("============================");
// 生产BenzE260
BenzFactory e260 = new E260Factory();
e260.carColor();
e260.carPrice();
e260.carSpeed();
e260.createCar();
}
}
反射读取xml,并创建对象
要求
xml配置文件,仿照前面的示例定义一个读取配置文件的工具类,能够从配置文件中读取需要创建的工厂类名。
运行效果
代码
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<!-- Cat类是个包 -->
<bean id="id1" class="Car.C180Factory">
</bean>
<!-- Cat类是个包 -->
<bean id="id2" class="Car.E260Factory">
</bean>
</beans>
package Car.config;
import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLUtil {
public static void main(String args[]) {
Element element = null;
// 路径
File f = new File("src/Car/config/config.xml");
DocumentBuilder db = null;
DocumentBuilderFactory dbf = null;
try {
// 创建DocumentBuilderFactory的实例
dbf = DocumentBuilderFactory.newInstance();
// 创建newDocumentBuilder的实例
db = dbf.newDocumentBuilder();
Document dt = db.parse(f);// 得到一个DOM
element = dt.getDocumentElement();
String nodeName = element.getNodeName();
System.out.println("根元素:" + nodeName);
// 根元素下的所有子节点
NodeList childNodes = element.getChildNodes();
// 遍历这些子节点
for (int i = 0; i < childNodes.getLength(); i++) {
// 获得每个对应位置i的结点
Node node1 = childNodes.item(i);
if ("bean".equals(node1.getNodeName())) {
String sClass = node1.getAttributes().getNamedItem("class").getNodeValue();
System.out.println(sClass);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}