Builder Design

本文探讨了Java Builder模式的应用,通过实现BuilderAPI接口构建对象,并展示了如何使用此模式生成XML字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


package ycl.learn.effective.java.builder;

public interface BuilderAPI<T> {

public T build();

/**
* this is the builder Implement to build Object
* 1. we can use diferent thing to builder diference Object.
* 2. we can use something to builder any Type of Object.
*
* @return
*/
public T build(T root);

/**
* we can use the given object to builder Object what you want.
* 1. we can builder object use given object.
* 2. we can use the given object to builder new object,
* but the type is not change
* @param a
* @param b
* @return
*/
public T build(T parent,T sub);
}





package ycl.learn.effective.java.builder;

import java.io.ByteArrayOutputStream;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.xerces.jaxp.DocumentBuilderFactoryImpl;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

@SuppressWarnings("hiding")
public class TreeBuilder<Element> implements BuilderAPI<Element> {

private Document rootDoc = null;

public Element build() {
// TODO Auto-generated method stub
return null;
}


@SuppressWarnings("unchecked")
public Element build(Node doc,Element root) {
return (Element) doc.appendChild((Node) root);
}

@SuppressWarnings("unchecked")
public Element build(Element parent,Element sub) {
return (Element) ((Node) parent).appendChild((Node) sub);
}

public String getXMLString(Document xmlDoc){
String xmlString = null;
try{
if (xmlDoc != null) {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty("encoding", "UTF-8");//
ByteArrayOutputStream bos = new ByteArrayOutputStream();
t.transform(new DOMSource(xmlDoc), new StreamResult(bos));
xmlString = bos.toString();
bos.close();
}
}catch(Exception e){
e.printStackTrace();
}
return xmlString;
}

public Document document(){
if(rootDoc ==null){
try {
DocumentBuilderFactoryImpl impl = new DocumentBuilderFactoryImpl();
rootDoc= impl.newDocumentBuilder().newDocument();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return rootDoc;
}


public Element build(Element root) {
// TODO Auto-generated method stub
return null;
}


}




package ycl.learn.effective.java.builder;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

public class BuilderTest {

/**
* @param args
*/
public static void main(String[] args) {

TreeBuilder<Element> builder = new TreeBuilder<Element>();
Document doc = builder.document();
Element root = doc.createElement("root");
builder.build(doc,root);
Element header = doc.createElement("header");
header.setAttribute("uri", "http://www.baidu.com");
builder.build(root, header);
for(int i=0;i<10;i++){
Element data = doc.createElement("data"+i);
Text text = doc.createTextNode("val"+i);
data.appendChild(text);
builder.build(header, data);
}

String result = builder.getXMLString(doc);
System.out.println(result);

}

}




<?xml version="1.0" encoding="UTF-8"?><root><header uri="http://www.baidu.com"><data0>val0</data0><data1>val1</data1><data2>val2</data2><data3>val3</data3><data4>val4</data4><data5>val5</data5><data6>val6</data6><data7>val7</data7><data8>val8</data8><data9>val9</data9></header></root>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值