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%左右,还是很可观的。
原型模式更说明了设计模式是思想,而不是背代码。我相信很多人以前用过原型模式,我以前就用过,不过我用的时候不知道原来这还是一种模式。觉得简单就用了。