プロトタイプモード--java実装

4370 ワード

1時です...クリスマスおめでとうございます.今日は妹と游んで、王府井に行くつもりでしたが、友达の輪ではisisが西洋人が多いところで動作すると伝えられています...妹と一緒に映画を見に行きませんでした.の
勝手にもっとプロトタイプモードを変えましょう.
超シンプルなモードで、個人的にはモードデザインの中で一番簡単だと思います.Javaのインタフェースで、cloneableを実装してcloneメソッドを複写すればいいです.newオブジェクトにリソースが多く、作成されたオブジェクトと前にすでに存在するオブジェクトの属性の差が少ない場合は、プロトタイプモードを使用できます.
学生クラス:
package InvolvedMode.prototype;

import java.util.ArrayList;
import java.util.List;


/**  
 *  Student : 
 * @author xuejupo  [email protected] 
 * create in 2015-12-23   4:27:53    
 */

public class Student implements Cloneable{
	/**  
	* @Fields serialVersionUID : TODO(              )  
	*/  
	private static final long serialVersionUID = 222122222222222L;
	//  ,           
	private final String name;
	//  
	private String className;
	//  
	private int sex;
	//  
	private int age;
	//    
	private ArrayList<String> interest;
	
	public Student(String name){
		this.name = name;
	}
	
	public final ArrayList<String> getInterest() {
		return interest;
	}
	public final void setInterest(ArrayList<String> interest) {
		this.interest = interest;
	}
	public final String getName() {
		return name;
	}
//	public final void setName(String name) {
//		this.name = name;
//	}
	public final String getClassName() {
		return className;
	}
	public final void setClassName(String className) {
		this.className = className;
	}
	public final int getSex() {
		return sex;
	}
	public final void setSex(int sex) {
		this.sex = sex;
	}
	public final int getAge() {
		return age;
	}
	public final void setAge(int age) {
		this.age = age;
	}
	
	public Student clone(){
		Student student = null;
		try {
			student = (Student)super.clone();
			student.interest = (ArrayList<String>)this.interest.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return student;
	}
}

プロトタイプテスト:
package InvolvedMode.prototype;

import java.util.ArrayList;
import java.util.List;

/**  
 *  Prototype :     
 * @author xuejupo  [email protected] 
 * create in 2015-12-23   4:27:37    
 */

public class Prototype {
	static Prototype p = new Prototype();
	public static void main(String[] args){
		p.testClone();
	}
	
	/**  
	* testNew:    new  
	* void         
	*/
	private void testNew(){
		long start = System.currentTimeMillis();
		List<Student> l = new ArrayList<Student>();
		for(int i = 0; i < 1000000; i++){
			Student s = new Student("");
			p.setStudent(s, "");
			l.add(s);
		}
		long end = System.currentTimeMillis();
		System.out.println("      :"+(end - start));
	}
	/**  
	* testClone:    clone  (    )
	* void         
	*/
	private void testClone(){
		long start = System.currentTimeMillis();
		List<Student> l = new ArrayList<Student>();
		Student s = new Student("ssaw");
		p.setStudent(s, "");
		for(int i = 0; i < 2; i++){
			Student s1 = s.clone();
			l.add(s1);
			System.out.println(s1.getName());
		}
		long end = System.currentTimeMillis();
		System.out.println("      :"+(end - start));
	}
	/**  
	* setStudent:  student   
	* @param s 
	* void         
	*/
	private void setStudent(Student s,String name){
		s.setAge(18);
		s.setClassName("5 ");
		s.setSex(1);
		ArrayList<String> l = new ArrayList<String>();
		l.add("  ");
		l.add("   ");
		l.add("    ");
		l.add("    ");
		s.setInterest(l);
	}
}

テストの結果,cloneの効率はnewの効率より60%程度高く,やはり大きい.
プロトタイプモードは、設計モードがバックコードではなく思想であることをさらに示している.私は多くの人が以前プロトタイプを使ったことがあると信じています.私は以前使ったことがありますが、私が使っていたときはこれがモデルだったことを知りませんでした.簡単だと思って使いました.