什么是xml建模?
XML建模是指使用XML来描述和组织数据结构的过程。XML是一种通用的标记语言,它可以用于描述各种类型的数据,如文本、图像、音频和视频等。在XML中,可以定义元素、属性、命名空间等概念来组织数据,从而形成有层次结构的数据模型。
XML建模主要包括两个方面:DTD和XML Schema。DTD是一种简单的文本文件,用于定义XML文档中允许出现的元素、属性和实体等,它是XML建模的一种基本方式。XML Schema是一种更为严格和功能更强大的建模方式,它基于XML语法,提供了一组结构定义和数据类型定义,用于强制检查XML文档的结构和数据类型。
XML建模的优点
可扩展性和灵活性:XML的结构可以根据需要进行扩展和修改,以适应不同的应用场景。
易于处理和解析:XML的结构清晰明了,易于程序处理和解析,可以有效地进行数据交换和存储。
通用性和互操作性:XML是一种标准的、平台无关的数据格式,可以用于不同的应用程序、系统和平台之间进行数据交换和共享。
XML建模的作用
XML建模的主要作用是用于存储、传输和表示数据。它提供了一种通用的、可扩展的数据格式,可以用于描述各种类型的数据,如文本、图像、音频和视频等。通过定义标签和属性,XML可以将数据结构化,便于程序处理和解析。
XML建模还可以用于数据交换和互操作性,因为XML是一种标准的、平台无关的数据格式。不同的应用程序、系统和平台都可以使用XML来交换数据,从而实现数据的共享和集成。
此外,XML建模还可以用于Web开发中的数据传输和表示。许多Web服务都使用XML作为数据格式进行通信,例如SOAP和RESTful服务等。同时,XML也是许多Web页面中用于描述内容和样式的标记语言的基础,如HTML、SVG和MathML等。
一.xml建模的思路
1、分析需要被建模的文件中有几个对象
2、每个对象拥有的行为(比如增删改查)以及属性
3、定义对象从小到大(从里到外)
4、通过23种的设计模式中的工厂模式,解析xml生产出指定对象
5.好处:提高代码的复用性
二.xml建模应用
2.1XML建模应用方式
XML建模广泛应用于各种数据交换和存储场景中,其应用方式主要包括以下几种:
数据交换:XML建模可以用于不同系统和应用程序之间进行数据交换和传输,以实现数据的统一格式和结构。其应用范围涵盖了各种行业、领域和应用场景,如电子商务、金融服务、医疗保健、制造业等。
数据存储:XML建模可以用于将数据存储到XML文件或数据库中,以实现数据的持久化和管理。开发人员可以使用XML建模定义数据模型和存储格式,以便于后续的数据访问、查询和分析。
应用集成:XML建模可以用于不同应用程序和系统之间进行集成,以实现数据的共享和协同处理。其应用范围涵盖了各种企业应用,如ERP、CRM、SCM等。
Web服务:XML建模可以用于描述Web服务中的数据格式和交换协议,以实现不同Web服务之间的互操作和集成。其应用范围涵盖了各种Web应用和互联网服务,如电子邮件、电子商务、社交网络等。
总之,XML建模的应用方式可以根据具体的场景和需求进行灵活地调整和定制,以实现最佳的数据交换和存储效果。
XML建模可以采用面向对象方式来描述数据模型。在面向对象方式中,可以使用XML元素来表示类,使用XML属性来表示类的属性,使用XML子元素来表示类的关系。
以config.xml为例子:
面向对象思考的步骤:
1. 在configModel中添加actionModel,就要有个容器来装载actionModel,又因为axtionModel是唯一值,所有这个容器就为 (Map集合);
2. actionModel中添加forwordModel,用Map容器来装载;
3. 在actionModel中还有属性 path,type;
4. 在forwordModel中有属性 name,path,redirect ;
所有这里需要注意实现时从小到大(从里到外)
这里的实现顺序为 forwordModel----actionModel----configModel---ConfigmodelFactory
ConfigmodelFactory 包为工厂模式
forwordModel包:
package com.liaozzhixiang.Model; public class ForwardModel { private String name; private String path; private boolean redirect; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public boolean isRedirect() { return redirect; } public void setRedirect(boolean redirect) { this.redirect = redirect; } }
actionModel:
package com.liaozzhixiang.Model; import java.util.HashMap; import java.util.Map; public class ActionModel { private String path; private String type; private Map<String, ForwardModel> fmap= new HashMap<String, ForwardModel>(); public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getType() { return type; } public void setType(String type) { this.type = type; } //压栈 public void push(ForwardModel ForwardModel) { fmap.put(ForwardModel.getName(), ForwardModel); } //弹栈 public ForwardModel pop(String name) { return fmap.get(name); } }
configModel包:
package com.liaozzhixiang.Model; import java.util.HashMap; import java.util.Map; public class Configmodel { private Map<String, ActionModel> amap = new HashMap<String, ActionModel>(); public void push(ActionModel ActionModel) { amap.put(ActionModel.getPath(), ActionModel); } //压栈 public ActionModel pop(String path) { return amap.get(path); } public static void main(String[] args) throws Exception { Configmodel configmodel= ConfigmodelFactory.build(); ActionModel actionModel = configmodel.pop("/loginAction"); ForwardModel forwardModel = actionModel.pop("success"); System.out.println(forwardModel.getPath()); } }
ConfigmodelFactory 包
package com.liaozzhixiang.Model; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 知识点 23种的设计模式中的工厂模式 * @author Administrator * */ public class ConfigmodelFactory { /** * 创建并构建 ConfigModel 对象 * @return Configmodel 配置模型对象 * @throws Exception 执行过程中抛出的异常 */ public static Configmodel build() throws Exception { Configmodel configmodel = new Configmodel(); // 获取 config.xml 文件的输入流 InputStream in = ConfigmodelFactory.class.getResourceAsStream("/config.xml"); // 创建 XML 解析器 SAXReader SAXReader sr = new SAXReader(); // 使用 SAXReader 解析 XML 文件,得到 Document 对象 Document doc = sr.read(in); // 获取所有 action 元素的列表,并依次处理 List<Element> actioneles = doc.selectNodes("/config/action"); for (Element actionele : actioneles) { // 创建 ActionModel ActionModel actionModel = new ActionModel(); // 获取 action 元素的 path 和 type 属性,并设置到 ActionModel 对象中 actionModel.setPath(actionele.attributeValue("path")); actionModel.setType(actionele.attributeValue("type")); // 获取当前 action 元素下的所有 forward 元素的列表,并依次处理 List<Element> forwardEles = actionele.selectNodes("forward"); for (Element forwardEle : forwardEles) { // 创建ForwardModel ForwardModel forwardmodel = new ForwardModel(); // 获取 forward 元素的 name 和 path 属性,并设置到 ForwardModel 对象中 forwardmodel.setName(forwardEle.attributeValue("name")); forwardmodel.setPath(forwardEle.attributeValue("path")); // 设置 ForwardModel 对象的 redirect 属性 forwardmodel.setRedirect(!"false".equals(forwardEle.attributeValue("redirect"))); // 将 ForwardModel 对象添加到 ActionModel 对象的 forwardModels 列表中 actionModel.push(forwardmodel); } // 将 ActionModel 对象添加到 Configmodel 对象的 actionModels 列表中 configmodel.push(actionModel); } // 返回构建好的 Configmodel 对象 return configmodel; } public static void main(String[] args) throws Exception { ConfigmodelFactory.build(); } }
在Configmodel中解析并且拿到xml生产出指定对象:
三.工厂模式
3.1什么是工厂模式
工厂模式是设计模式中的一种,它属于创建型模式。
工厂模式通过工厂类来创建对象,并将对象的创建过程封装在工厂类中,从而将对象的创建与使用分离,提高了系统的灵活性和可维护性。
工厂模式有三种常见的实现方式:
简单工厂模式:通过一个 Factory 类来创建对象,根据不同的参数返回不同的对象实例。
工厂方法模式:定义一个抽象的工厂类和多个具体的工厂类,每个具体的工厂类负责创建指定的产品对象。
抽象工厂模式:定义一个抽象的工厂类和多个具体的工厂类,每个具体工厂类负责创建一组相关的产品对象。
上面的代码使用的是:简单工厂模式
3.2工厂模式优缺点
工厂模式的优点:
工厂模式通过封装对象的创建过程,将对象的创建和使用解耦,提高了系统的灵活性和可维护性。
工厂模式可以通过配置或其他方式动态地改变对象的创建方式,使系统具有更高的可定制性和可扩展性。
工厂模式可以屏蔽具体产品类的实现细节,降低了客户端与具体产品类之间的耦合度,使系统更加可靠稳定。
工厂模式可以通过统一的接口来创建不同类别的产品对象,使客户端使用起来更加方便和简单。
工厂模式的缺点:
工厂模式增加了额外的开销,需要增加工厂类和产品类的数量和复杂度,不利于系统的维护和管理。
工厂模式增加了额外的抽象层,降低了系统的效率和性能,特别是在创建大量对象时。
工厂模式需要对不同的产品类进行分类和管理,增加了系统的复杂度和难度,尤其是在需要创建的产品类型较多的情况下。
总的来说,工厂模式的优点在于它能够提高系统的灵活性、可维护性和可扩展性,缺点在于它会增加系统的复杂度和开销,需要根据具体的情况进行选择和应用。