description 数组的中文打印

在说原型模式之前,我们先来看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类中拿出来用,没有的话,客户端就自己再去复制一份。

description 数组的中文打印

时间: 2024-11-07 18:31:24

description 数组的中文打印的相关文章

php数组用中文作为键

php数组用中文作为键,读取的时候需加一个trim(): php数组用中文作为键,布布扣,bubuko.com

IOS数组按中文关键字以字母序排序

本文转载至 http://blog.csdn.net/xunyn/article/details/7882087 iosobjective cuser框架通讯 IOS项目中会用到对通讯录的联系人或是会员按姓名为关键字排序,因为NSArray并不直接支持对汉字的排序,这就要通过将汉字转换成拼音完成按A~Z的排序,这看起来是个头疼的问题,因为牵扯到汉字转为拼音,kmyhy给出一个较易实现的方法,获取汉字的首字的首字母,如将“王”变成“W”,完整文章(传送门). 其中他通过pinyinFirstLet

python字典中键值对的值为中文,打印成转义字符,怎么解决

今天是2019-10-02,学习代码第二天. python字典中键值对中有中文,打印的时候,发现成转义字符了.查了好久,解决.记录一下.useful. 今日份代码: 1 #!/usr/bin/python 2 # -*- coding:utf-8 -*- 3 # 字典和列表的区别 4 # 列表是有序的对象集合,字典是无序的对象集合 5 # 字典的特点,字典用{}定义,使用键值对存储数据,键值对间用,分开 6 # 键--key,索引 值--value,数据 键和值间用:分开 键--唯一的,只能取字

打印字典\数组显示中文

// //  NSDictionary+LOG.m //  2015年 CoderWJ (byWJ) // #import <Foundation/Foundation.h> @implementation NSDictionary (LOG) - (NSString *)descriptionWithLocale:(id)locale {     // 1.定义一个可变的字符串, 保存拼接结果     NSMutableString *strM = [NSMutableString stri

统计一段文字中数组、中文、英文字母、空格以及其他特殊字符出现的次数

package util; public class CountStr { /** * 有一个字符串,其中包含中文字符.英文字符和数字字符,请统计和打印出各个字符的个数 * 短信发送平台,短信字数控制查询方法 */ public static void main(String[] args) { //String str = "adasf AAADFD我是中文,,>123"; //String str = "金马甲高端商品交易平台--2013全城热恋克拉钻石项目预售,1

php 字符串转数组 提取中文 提取英文 字符串类型

获取字符串类型 /**  * 判断中英文  */ public function checkStr($str){ $output = ''; ///\<[\s\S]*\>/i $a = preg_match('/[' . chr(0xa1) . '-' . chr(0xff) . ']/i', $str); $b = preg_match('/[0-9]/i', $str); $c = preg_match('/[a-zA-Z]/i', $str); if($a && $b &

用二维数组的方式打印杨辉三角形

public static void main(String[] args) { // 二维数组来实现行列 int[][] yanghui = new int[10][]; // 初始化 for (int i = 0; i < yanghui.length; i++) { // 每行的个数是所在行数加一 yanghui[i] = new int[i + 1]; for (int j = 0; j < yanghui[i].length; j++) { yanghui[i][0] = 1; //

第十一章 Arrays.toString( ... )产生数组的可打印表示

打印容器无需任何帮助,直接打印容器对象即可获得容器内可视数据,但是对于数组,直接打印数组对象,最终是调用toString方法,打印出的只是: * @return a string representation of the object. */ public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 类名@HashCode. package 持有对

解决爬中文打印出乱码得问题

如下图,爬取标题,标题为中文内容,打印出乱码 解决方法,需要对请求后得返回数据重新编码 response = requests.get(url=url2) response.encoding = 'utf-8' #处理编码得步骤 print(url2) wb_data = response.text # 将页面转换成文档树 html = etree.HTML(wb_data) b = html.xpath('//div[@class = "picmainer"]/h1/text()')