JSON入门之二:org.json的基本用法

廊坊的风一如既往的在窗外刮着,天地间肆意地飘洒,纵情在一刹那,为何现在只剩下风吹乱我的发,乱蓬蓬的,还是去超市逛逛吧,买吃的`(*∩_∩*)′,走进华联超市,热情的店员招呼着我,开始为我介绍,推荐各种各样商品,店员向我推荐了他们的会员卡,全场所有项目均八折,每逢节假日打五折,我心想那太划算了,而且他们总店,分店,加盟店都可以用,所以就办了张会员卡。今天我们的设计模式就从超市会员卡开始说起。

这个俨然就是我们设计模式中的组合模式----组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。看下面的两幅图片:

            

上面两幅图片我们可以看做是一个文件结构,对于这样的结构我们称之为树形结构。在《大话设计模式》中我们了解到可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。我们可以将这颗树理解成一个大的容器,容器里面包含很多的成员对象,这些成员对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样就会给客户带来不必要的麻烦,对于客户而言,始终希望能够一致的对待容器对象和叶子对象。这就是组合模式的设计动机:组合模式定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用的过程中无须进行区分,可以对他们进行一致的处理。下面一起来看一下组合模式的结构图:

以上述在华联超市办会员卡为例,看看组合模式是如何在代码中实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            StoreOrBranch store = new StoreOrBranch("北京总店");
            StoreOrBranch brach = new StoreOrBranch("廊坊分店");
            JoinInStore jstore = new JoinInStore("安徽加盟店一");
            JoinInStore jstore1 = new JoinInStore("海南加盟店二");

            brach.Add(jstore);
            brach.Add(jstore1);
            store.Add(brach);

            store.PayByCard();
        }
    }

    /// <summary>
    /// 店面类 抽象出来的店面部件
    /// </summary>
    public abstract class Storefront
    {
        //店名
        protected string storeName = string.Empty;
        public string StoreName
        {
            get
            {
                return storeName;
            }
        }

        //添加店面
        public abstract void Add(Storefront store);
        //删除店面
        public abstract void Remove(Storefront store);

        //定义所有部件公用的行为 刷卡行为
        public abstract void PayByCard();
    }

    public class StoreOrBranch : Storefront
    {
        //构造函数
        public StoreOrBranch() { }
        public StoreOrBranch(string storeName)
        {
            this.storeName = storeName;
        }
        List<Storefront> myStoreList = new List<Storefront>();
        //刷卡消费
        public override void PayByCard()
        {
            Console.WriteLine("店面{0}的积分已累加进该会员卡", storeName);
            foreach (Storefront sf in myStoreList)
            {
                sf.PayByCard();
            }
        }

        //增加店面
        public override void Add(Storefront store)
        {
            myStoreList.Add(store);
        }

        //解除店面
        public override void Remove(Storefront store)
        {
            myStoreList.Remove(store);
        }
    }

    public class JoinInStore : Storefront
    {
        //构造函数
        public JoinInStore() { }
        public JoinInStore(string storeName)
        {
            this.storeName = storeName;
        }
        //刷卡消费
        public override void PayByCard()
        {
            Console.WriteLine("店面{0}的积分已累加进该会员卡", storeName);
        }

        public override void Add(Storefront store)
        { }

        public override void Remove(Storefront store)
        { }
    }

}

组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。实现这个目标的关键之处,是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。这样一来,客户端就不用区分到底是组合对象还是叶子对象了,只需要全部当成组件对象进行统一的操作就可以了。

JSON入门之二:org.json的基本用法,布布扣,bubuko.com

时间: 2024-08-24 23:32:28

JSON入门之二:org.json的基本用法的相关文章

json入门(二)

背景 之前最早的时候,也见过类似于这样的字符串: {"list":[           {"ArticleId":7392749,"BlogId":1158641,"CommentId":2182295,"Content":"偶是来测试评论滴,哈哈","ParentId":0,"PostTime":"2分钟前","R

JSON入门之二:org.json的基本使用方法

java中用于解释json的主流工具有org.json.json-lib与gson.本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://developer.android.com/reference/org/json/package-summary.html 1.主要类 Classes JSONArray A dense indexed sequence of values. JSONObject A modifiable set of

linux入门(二):find指令的用法

我们知道,Linux下find命令可以在目录中搜索指定文件,并进行相应的操作.find命令提供了相 当强大的查找条件,功能很强大.所以今天我们来分析一下find的用法.与which和whereis不同的是 find在查找文件的时候是真正的在遍历所有的文件,如果find没有找到你所需要的目标的话,那系统中 一定不存在你所需要的文件,因此find在使用的时候会比其他的查找指令更详尽一些,当我们在运行一 个很消耗资源的find指令的时候,人们倾向于将其放在后台运行,因为遍历一个大的文件系统可能需要 很

JSON 入门指南

JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.本文将快速讲解 JSON 格式,并通过代码示例演示如何分别在客户端和服务器端进行 JSON 格式数据的处理. 尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的解析伤透了脑筋,无论是服务器端生成或处理 XML,还是客户端用 JavaScript

springMVC绑定json参数之二(2.2.1)

二.springmvc 接收不同格式的json字符串 2.扫盲完了继续测试springmvc 接收不同格式的json字符串 1).格式一:json简单数组对象 前台两种传递方式: 方式一(需要拼接json字符串): 1 test = function () { 2 var test = '[{"userName":"test11","address":"gz11"},' + 3 '{"userName":&

Java入门系列:处理Json格式数据

本节主要讲解: 1)json格式数据处理方法 2)第三方工具包的使用方法 3)java集合数据类型 [项目任务] 编写一个程序,显示未来的天气信息. [知识点解析] 为了方便后面代码的分析,先需要掌握几个相关的知识. 1.什么是json格式数据 从结构上看,我们所见到的所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是

JavaScript入门篇之新生代JSON遇XML

信息化到处被提及的特点,就是拥有大量的数据交互的格式.前阵子学习了XML的结构化数据,在学习javascript的时候又接触到了JSON,都作为数据的存储格式,二者之间有什么区别和联系呢,查了很多的资料,小编在这里就相当于写个总结了. 十年前,XML是主要的数据交换格式.它的出现,尤如一股清新的空气,以及令人惊喜的SGML(标准通用标记语言),是一个巨大的进步.它使人们能够做到以前想都不敢想的事情,本质上讲,XML就是一个文本文件,在解析上,在普通的web应用领域,开发者经常为XML的解析伤脑筋

JSON取代XML?--JSON入门指南

定义 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等). 这些特性使JSON成为理想的数据交换语言. JSON研究中要关注的命题 1.JSON与XML的比较: 同 XML 或 HTML 片段相比,JSON 提供了更好的简单性和灵活性. 2.JSON序列化的操作: 参考文献 1.JSON

Androidannotation使用之@Rest与服务器交互的JSON数据转换(二)

开篇 之前的一篇博客:Androidannotation使用之@Rest获取资源及用户登录验证(一):http://blog.csdn.net/nupt123456789/article/details/24384713 主要写了Rest在用户登录的时候,需要JSESSION字段的问题.本博客主要写JSON格式的转换. @Rest的参考文档: https://github.com/excilys/androidannotations/wiki/Rest-API#rest 简介: 从上一篇博客中,