原型模式--java实现

      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%左右,还是很可观的。

      原型模式更说明了设计模式是思想,而不是背代码。我相信很多人以前用过原型模式,我以前就用过,不过我用的时候不知道原来这还是一种模式。觉得简单就用了。

猜你喜欢

转载自709002341.iteye.com/blog/2266713
今日推荐