`

Builder Design

 
阅读更多
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>
分享到:
评论

相关推荐

    ReportBuilder v15.04 for Berlin with DevExpress theme support

    ReportBuilder is the defacto standard for Delphi reporting solutions. Delphi developers have ... This screen shot of the ReportBuilder Report Designer shows the ergonomic design of the user-interface.

    design_Builder1_builder_Mine!_

    描述中的"design_builder1 example of mine"进一步确认了这是一个关于Builder模式的实例。 Builder模式通常包含四个主要角色: 1. **产品(Product)**:这是要构建的复杂对象。它通常包含多个组成部分或属性。 2. **...

    Oracle Warehouse Builder 11g 教程 Part 2

    创建仓库后,你需要登录到 Warehouse Builder Design Center,这是OWB的主要工作界面,用于设计数据仓库模型和ETL流程。 2. **准备数据库实例** 在使用 OWB 之前,确保已有一个支持 OWB 功能的数据库实例,例如 ...

    Android Design Patterns and Best Practice

    Chapter 1 , Design Patterns, introduces the development environment, and two common design patterns, the factory and abstract factory. ...support library and the builder design pattern.

    专题3-Quartus-II-软件使用入门.ppt

    Quartus II 还提供了多种高级特性,例如 MegaWizard 和 SOPC Builder Design Tools、Incremental Design Flow、LogicLock 优化工具、PowerPlay 功率分析工具等,用户可以使用这些工具对设计进行优化和调整。...

    WindowBuilder Pro安装

    安装完成后,你可以通过Eclipse的“Window”-&gt;“Show View”-&gt;“Other”菜单找到WindowBuilder的视图,如“Design”和“Source”视图,它们分别用于图形化设计和查看/编辑生成的Java代码。 WindowBuilder Pro支持的...

    Oracle数据仓库产品在Windows上的安装配置

    - 提供额外的组件,如 HTTP Server,用于配置 Oracle Warehouse Builder Design Browser。 2. **Oracle DB 10.1.0.3 Patch** - 包含补丁更新,用于增强数据库性能和安全性。 ##### 无需安装产品说明 1. **Oracle ...

    formbuilder表单构建工具_在线表单设计器代码

    "formbuilder表单构建工具_在线表单设计器代码"是一个专为用户提供的便捷、高效的在线表单设计和构建平台。这个工具允许用户无需编程知识,就能通过简单的拖拽操作创建自定义的表单,适用于各种场景,如数据收集、...

    windowbuilder eclipse设置

    - **Maximize editor on "Design" page activation**:切换到设计视图时,自动最大化 WindowBuilder 编辑器。 - **Go to component definition in source on selection**:在设计视图中选择控件时,在代码视图中高亮...

    设计模式_java

    4. 建造者模式(Builder Design Pattern):建造者模式属于创建型模式,它提供了一种创建复杂对象的方法。该模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式适用于那些...

    vue+ant-design+formBuiler表单构建器-技能提升-form design-亲测有效

    vue+ant-design+formBuiler表单构建器——技能提升——form design——亲测有效 vue+ant-design+formBuiler表单构建器 ...formBuilder插件的使用 vue:表单构建器 自定义拖拽表单 实现自定义拖拽表单的效果,自定义

    design_Builder_www。5567bb。com_design_Mine!_

    通过这些知识点,我们可以理解"design_Builder"可能是一个全面的设计创作和管理平台,旨在帮助用户高效、便捷地完成设计项目并展示他们的作品。如果你对具体的功能或使用方法有更多的疑问,欢迎进一步探索这个工具...

    C++ Builder 编程实战

    4. **Rtti和Design-Time支持**:C++ Builder中的运行时类型信息(RTTI)和设计时支持允许开发者在运行时检查对象类型,以及在设计阶段自定义组件行为。 5. **数据库连接**:C++ Builder通常用于企业级应用开发,其...

    DSP Builder Handbook.pdf

    整个手册是针对ALTERA FPGA用户,特别是使用ALTERA Complete Design Suite的用户设计和实现DSP系统时的参考资料。通过学习这个手册,读者能够获得必要的知识和技能来有效地使用DSP Builder,从而在FPGA上实现高效的...

    DSP Builder 设计教程

    在现代电子系统设计领域,特别是涉及数字信号处理(DSP)模块的设计时,传统的EDA(Electronic Design Automation)技术虽然强大,但在某些方面,尤其是算法密集型设计及模拟信号处理上显得力不从心。为此,Altera公司...

    Powerbuilder 9.0实用教程代码

    5. **用户接口设计(UI Design)**:PowerBuilder的拖放式界面使得开发者能快速构建用户界面,包括窗口布局、控件放置、菜单设计等。 6. **数据源连接(Datasource Connectivity)**:PowerBuilder支持多种数据库,如...

    visual-builder-design-wireframes:用于Visual Builder的草图线框

    "visual-builder-design-wireframes"这一资源包,正是为Visual Builder用户量身定制的,旨在提升UI设计的效率和质量。 "Sketch"、"Figma"和"Adobe XD"等标签揭示了这些线框模板支持的流行设计工具。Sketch以其强大...

    powerbuilder 技巧大全

    7. **用户界面设计(UI Design)**:PowerBuilder提供了丰富的控件和布局选项,如窗口、菜单、对话框等。掌握如何设计美观且易用的用户界面,包括控件的布局、颜色、字体等属性调整,是提升用户体验的关键。 8. **...

    SceneBuilder-11.0.0.msi.zip

    在描述中提到的jfoenix最新版9.0.8,就是一个流行的JavaFX UI库,它包含了Material Design风格的组件。通过SceneBuilder,开发者可以直接将这些美观且功能丰富的控件拖放到界面上,极大地丰富了UI设计的可能性。 在...

Global site tag (gtag.js) - Google Analytics