XML建模

XML建模使用XML描述和组织数据结构,包括DTD和XML Schema。优点在于可扩展性、灵活性和通用性。主要作用是数据存储、传输和表示。工厂模式用于解析XML生成指定对象,提供代码复用性,但可能导致系统复杂度增加。

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

目录

什么是xml建模?

XML建模的优点

XML建模的作用

一.xml建模的思路

二.xml建模应用

2.1XML建模应用方式

三.工厂模式

3.1什么是工厂模式

3.2工厂模式优缺点


什么是xml建模?

XML建模是指使用XML来描述和组织数据结构的过程。XML是一种通用的标记语言,它可以用于描述各种类型的数据,如文本、图像、音频和视频等。在XML中,可以定义元素、属性、命名空间等概念来组织数据,从而形成有层次结构的数据模型。

XML建模主要包括两个方面:DTD和XML Schema。DTD是一种简单的文本文件,用于定义XML文档中允许出现的元素、属性和实体等,它是XML建模的一种基本方式。XML Schema是一种更为严格和功能更强大的建模方式,它基于XML语法,提供了一组结构定义和数据类型定义,用于强制检查XML文档的结构和数据类型。

XML建模的优点

  1. 可扩展性和灵活性:XML的结构可以根据需要进行扩展和修改,以适应不同的应用场景。

  2. 易于处理和解析:XML的结构清晰明了,易于程序处理和解析,可以有效地进行数据交换和存储。

  3. 通用性和互操作性: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建模广泛应用于各种数据交换和存储场景中,其应用方式主要包括以下几种:

  1. 数据交换:XML建模可以用于不同系统和应用程序之间进行数据交换和传输,以实现数据的统一格式和结构。其应用范围涵盖了各种行业、领域和应用场景,如电子商务、金融服务、医疗保健、制造业等。

  2. 数据存储:XML建模可以用于将数据存储到XML文件或数据库中,以实现数据的持久化和管理。开发人员可以使用XML建模定义数据模型和存储格式,以便于后续的数据访问、查询和分析。

  3. 应用集成:XML建模可以用于不同应用程序和系统之间进行集成,以实现数据的共享和协同处理。其应用范围涵盖了各种企业应用,如ERP、CRM、SCM等。

  4. 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什么是工厂模式

工厂模式是设计模式中的一种,它属于创建型模式。

工厂模式通过工厂类来创建对象,并将对象的创建过程封装在工厂类中,从而将对象的创建与使用分离,提高了系统的灵活性和可维护性。

工厂模式有三种常见的实现方式:

  1. 简单工厂模式:通过一个 Factory 类来创建对象,根据不同的参数返回不同的对象实例。

  2. 工厂方法模式:定义一个抽象的工厂类和多个具体的工厂类,每个具体的工厂类负责创建指定的产品对象。

  3. 抽象工厂模式:定义一个抽象的工厂类和多个具体的工厂类,每个具体工厂类负责创建一组相关的产品对象。

上面的代码使用的是:简单工厂模式

3.2工厂模式优缺点

工厂模式的优点:

  1. 工厂模式通过封装对象的创建过程,将对象的创建和使用解耦,提高了系统的灵活性和可维护性。

  2. 工厂模式可以通过配置或其他方式动态地改变对象的创建方式,使系统具有更高的可定制性和可扩展性。

  3. 工厂模式可以屏蔽具体产品类的实现细节,降低了客户端与具体产品类之间的耦合度,使系统更加可靠稳定。

  4. 工厂模式可以通过统一的接口来创建不同类别的产品对象,使客户端使用起来更加方便和简单。

工厂模式的缺点:

  1. 工厂模式增加了额外的开销,需要增加工厂类和产品类的数量和复杂度,不利于系统的维护和管理。

  2. 工厂模式增加了额外的抽象层,降低了系统的效率和性能,特别是在创建大量对象时。

  3. 工厂模式需要对不同的产品类进行分类和管理,增加了系统的复杂度和难度,尤其是在需要创建的产品类型较多的情况下。

 总的来说,工厂模式的优点在于它能够提高系统的灵活性、可维护性和可扩展性,缺点在于它会增加系统的复杂度和开销,需要根据具体的情况进行选择和应用。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值