jsonConfig使用方法

在说原型模式之前,我们先来看java里面的深复制和浅复制:

1. 浅复制:被复制的对象的所有变量都持有和原来对象的变量相同的值,而所有的对其他对象的引用都指向原来的对象。

2.
深复制:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他变量的对象。那些引用其他对象的变量将指向被复制过来的新对象,而不是原来那些被引用的对象。深复制需要把要复制的对象的所有引用都复制一遍。

这两者的区别就是关于引用对象的处理,浅复制是不考虑引用对象,而深复制需要考虑引用对象的问题。

对java中的clone()方法我们有以下约定:

1. 对于任何的对象x, 都有x.clone()!=x

2. 对于任何的对象x, 都有x.clone().getClass() == x.getClass();

3. 对于任何的对象x, 都有x.clone().equals(x) = true

继承自java.lang.Object的clone方法是浅复制。

在深复制的过程中我们需要考虑深复制的深度问题,可能会出现循环引用的问题,所以对于深复制,我们一般是利用串行化来做深复制的:先把对象写到流里,再从流里读出来。

下面是一段示意性的代码:


package com.javadesignpattern.prototype;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class TestDeepClone implements Serializable{

/**
*
*/
private static final long serialVersionUID = 1L;

public static void main(String[] args) throws IOException, ClassNotFoundException{
File file = new File("out.ser");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject("test");
oos.flush();

FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println(ois.readObject());
ois.close();
}

}

下面看原型模式的结构,《java与模式》中给出两种原型模式,一种是简单形式的原型模式,一种是登记型的原型模式。

1. 简单形式的原型模式

示意性代码:

?





1

2

3

4

5

6

7

package
com.javadesignpattern.prototype.simple;

public interface Prototype extends
Cloneable {

    

    public
Object clone();

}

  


package com.javadesignpattern.prototype.simple;

public class ConcretePrototype implements Prototype {

public Object clone(){
try {
return super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}

}


package com.javadesignpattern.prototype.simple;

public class Client {

private Prototype prototype;

public void operation(Prototype example){
Prototype prototype = (Prototype)example.clone();
}

public static void main(String[] args){
Prototype prototypeTest = new ConcretePrototype();
Client clientInctance = new Client();
clientInctance.operation(prototypeTest);
System.out.println(clientInctance.prototype);
}

}

2. 登记形式的原型模式

示意性代码如下:

1. Prototype和CPrototype类和上面的简单原型模式没什么区别。


package com.javadesignpattern.prototype.register;

import java.util.ArrayList;

public class PrototypeManager {

private ArrayList object = new ArrayList();

public Prototype get(int i) {
return (Prototype)object.get(i);
}

public void set(Prototype objectp) {
object.add(objectp);
}

public int getSize(){
return object.size();
}

}


package com.javadesignpattern.prototype.register;

public class Client {

private PrototypeManager mgr;
private Prototype prototype;

public String registerPrototype(){
prototype = new ConcretePrototype();
mgr = new PrototypeManager();
mgr.set((Prototype)prototype.clone());
if(mgr != null ){
return "SUCCESS";
}else{
return "FAILED";
}
}

public static void main(String[] args){
Client client = new Client();
System.out.println(client.registerPrototype() + "-------" + client.mgr.getSize());
}

}

简单原型模式和登记类型的原型模式的比较:

1. 如果需要创建的原型对象的数目比较少并且比较固定的话,我们可以选择第一种简单类型的原型,这种情况下,原型对象由客户端持有。

2.
如果需要创建的原型对象不固定的话,可以选择第二种方式:登记类型的原型,这样的话原型对象交给manager类持有,客户端从原型类中解脱出来,在创建一个新的原型对象之前,客户端可以看Manager类中是不是已经有符合条件的对象,有的话,就直接从manager类中拿出来用,没有的话,客户端就自己再去复制一份。

jsonConfig使用方法

时间: 2024-10-10 01:12:00

jsonConfig使用方法的相关文章

jsonConfig处理日期及对象级联问题

项目中经常用到ajax请求后台,返回给前台json对象字符串.有些实体包含字段可能有日期.list.以及级联对象情况.因此,我们需要有针对性处理, 例如日期date类型,我们要给它转为我们所想要的格式的日期字符串,返回给前台.list我们要去除掉,级联对象,只提取我们所需要的字段值. 例如实体product: 1 /** 2 * 3 */ 4 package com.hik.entity; 5 6 import java.util.ArrayList; 7 import java.util.Da

Android学习笔记之Json的使用....

PS:当你的能力还驾驭不了你的目标时,那你需要沉下心来历练... 学习内容: 1.Json的使用... 2.Json信息过滤... 3.从网络上获取Json数据... 4.解析Json数据获取各个属性...   使用Json首先需要下载官方提供的一些jar文件...引用内部提供好的接口...才能够实现Json数据的获取....一共需要六个jar包...我已经进行了上传...大家可以直接下载... jar下载地址:http://files.cnblogs.com/files/RGogoing/js

json-lib过滤属性

依赖jar: commons-beanutils-1.9.3.jar? commons-collections-3.1.jar commons-lang-2.4.jar commons-logging-1.2.jar ezmorph-1.0.6.jar json-lib-2.4-jdk15.jar 直接上程序 1.Person.java: import java.util.List; /** * Created by Administrator on 2017/5/6. */public cla

JSON 中JsonConfig的使用(转)

我们通常对一个Json串和Java对象进行互转时,经常会有选择性的过滤掉一些属性值,而json-lib包中的JsonConfig为我们提供了这种 功能,具体实现方法有以下几种.(1)建立JsonConfig实例,并配置属性排除列表,(2)用属性过滤器,(3)写一个自定义的 JsonBeanProcessor. 1. 实现JSONString接口的方法 public class Person implements JSONString {  private String name;  privat

java 中关于json的使用方法

json在数据传输起了很大的作用,下面说说java中json的使用方法. 文章参考:http://www.codes51.com/article/detail_99574.html json串示例 [{"id":1,"name":"name1","password":"password1","remark":"remark1"},{"id":2,&

(2)-生成JSONObject的方法

生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class User { public String username; public String password; public String getUsername() { return username; } public void setUsername(String

json处理复杂对象jsonConfig

 我们通常的Json字符串和java当对象互转.经常有选择性地过滤掉一些属性值,和json-lib包JsonConfig为我们提供了这样一个 特征,有几种方法实施细则. (1)建立JsonConfig实例,并配置属性排除列表,(2)用属性过滤器,(3)写一个自己定义的 JsonBeanProcessor. 1. 实现JSONString接口的方法 public class Person implements JSONString { private String name; private

json-lib——JsonConfig详细使用说明

在使用json-lib包中JSONObject.fromObject(bean,cfg)时,可能出现以下几种情况: 1.(防止自包含)转换的对象包含自身对象,或者对象A下面挂了对象B,对象B下面又挂了对象A,如果不设置JsonConfig,则那么会抛异常:"There is a cycle in the hierarchy!" 解决方法: 在调用JSONObject.fromObject(bean,cfg)时,自定义JsonConfig: JsonConfig cfg = new Js

Java和JavaScript中使用Json方法大全

林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka   摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 它基于ECMAScript的一个子集. JSON採用全然独立于语言的文本格式,可是也使用了相似于C语言家族的习惯(包含C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写.同一时候也易于机器解析和生成