实战设计模式之用组合模式实现JSON(七)

Nodous项目旨在通过四个核心接口实现数据结构的灵活构建,包括叶子节点、普通节点、根节点和数组节点。文章详细介绍了各接口的功能,并提供了具体的类实现说明。
具体实现
         我给项目起了个名,叫Nodous,这个单词很生僻,它是多节的意思,呵,顺便说一个,这个域名在我手里,.Com的,有要的吱个声哈,当然是要给钱的,呵呵,开玩笑哈。
         另外这个版本的命名也有一些变更,希望读者能够适应。
         前两章都没有类图,这章还是先上一个类图吧,有一个感性的认识。
 
         看到这些可爱的棒棒糖(接口)没有,它简直是我们的大救星,我就针对这三张图来描述,我想说完了也就差不多了。
接口类
         我们一共有四个接口,分别是INodousLeaf、INodousNode、INodousRoot、INodousItem,从命名我们就可以看出来,分别对应的叶子节点、普通节点、根节点、数组节点,细心的读者可能会看出来,咦,怎么少了一个数组子节点?没错,数组子节点从本质上来说,和普通节点并没有什么差别,对外的操作接口都是一样的。其实根节点和普通节也没有差别,不过根节点要多了两个方法,一个是Create,另一个是NodousToString。
叶子节点的接口:INodousLeaf
叶子结点的接口很奇怪,它一个空接口,因为它没有对外的方法或属性
普通节点的接口:INodousNode
INodousItem AddItem( string name);
添加数组节点
INodousNode AddNode( string name);
添加普通节点
INodousLeaf AddLeaf( string name, string value);
添加叶子节点
INodousLeaf SafeAddLeaf( string name, string value);
安全添加叶子节点,这是一个很有意思的方法,它与AddLeaf不同的是,它认为value是安全的,不包含敏感字符,主要是针对Xml中使用的,因为我们知道XML对如“&,>”等符号是敏感,如果使用这个方法,叶子节点就被被添加为属性,否则就会被添加为CData结点。
根节点的接口:INodousRoot
string NodousToString();
返回已经创建的数据
void Create();
创建节点数据
 
根节点继承了普通节点INodousNode,包含所有普通节的接口方法
数组节点的接口:INodousItem
INodousNode AddItemNode();
创建数组子节点
 
生成XML的类
类图
         除了抽象类XmlNodousComponent,所有的类都继承于XmlNodousComponent和对应的接口。
         相对于生成JSON的功能,生成XML的功能要简单得多,因为微软已经为我们封装好了操作XML的功能。
抽象类:XmlNodousComponent
protected List < XmlNodousComponent > list;
保存节点列表
protected bool isSafe = false ;
是否为安全的值,安全的值不包括Xml的敏感字符串
protected XmlElement parentElement;
父级的Element
protected XmlDocument container;
容器
protected string name;
节点名
protected string value;
节点的值
public XmlNodousComponent Parent { get ; set ; }
父级节点,公开的属性
protected internal XmlNodousComponent( string name, string value)
构造函数,要求提供节的名称及节点的值
protected void Add( XmlNodousComponent c)
添加节点
protected void Remove( XmlNodousComponent c)
删除节点
public void RemoveAt( int index)
根据索引删除节点
protected void Create()
创建数据
protected virtual void CreateNode()
创建具体节点,这个方法其实是Create方法中分离出来的,因为有些节点节点需要重写里面的内容
 
         和第二版相比,有了一些变动,把不需要对外使用的字段改为protected的变量。
根节点:XmlNodousRoot
继承于XmlNodousNode和INodousRoot
 
public XmlNodousRoot( string name)
根节的构造函数
protected override void CreateNode()
重载
public string NodousToString()
返回创建的数据
public new void Create()
继承于INodousRoot,创建数据,需要注意的是,这个方法有一个new的关键字,因为父类已经有了一个Create方法了,所以这里要用new关键字,要不然就变成重写了
 
这里一定要注意,根节点不是继承于XmlNodousComponent,而是继承于XmlNodousNode,因为在实际操作中,普通节点与根节点是没有差别中,不同的只是普通节点多了Create和NodousToString方法,这样我们可以少写一大堆的重复方法。
普通节点:XmlNodousNode
继承于XmlNodousComponent和INodousNode
 
protected internal XmlNodousNode( string name) : base (name, string .Empty)
普通节点的构造函数
public INodousItem AddItem( string name)
增加数组节点
public INodousNode AddNode( string name)
增加普通节点
public INodousLeaf AddLeaf( string name, string value)
增加叶子节点
public INodousLeaf SafeAddLeaf( string name, string value)
增加安全叶子节点
数组节点:XmlNodousItem
继承于XmlNodousComponent和INodousItem
 
protected internal XmlNodousItem( string name) : base (name, string .Empty)
构造函数
public INodousNode AddItemNode()
添加数组节点
非常简单的一个类,就只有一个构造函数和一个和一个添加数组节点的方法
叶子节点:XmlNodousLeaf
继承于XmlNodousComponent和INodousLeaf
 
protected internal XmlNodousLeaf( string name, string value) : base (name, value)
构造函数
protected internal XmlNodousLeaf( string name, string value, bool isSafe)
构造函数,加了一个参数isSafe,如果为True的话,将把值写处属性
protected override void CreateNode()
叶子节点的创建节点和其它节点不一样,所以我们要重写父类的方法
  

注意:本文为我的独立博客镜像博客,自发表不再更新,原文可能随时被更新,敬请访问原文。同时,请大家不要在此评论,如果有什么看法,请点击这里:http://iove.net/1705/

本文来自http://iove.net,欢迎转载,转载敬请保留相关链接,否则视为侵权,原文链接:http://iove.net/1705/

转载于:https://www.cnblogs.com/conis/archive/2009/01/14/1720514.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值