本文主要是介绍《设计模式》第二部分 创建型设计模式 第6章 原型模式(B:Java实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关于“原型模式”的具体讲解请看笔者博客
《设计模式》第二部分 创建型设计模式 第6章 原型模式(A:C++实现)
此文是“原型模式”的Java实现。
原型模式的克隆分为浅克隆和深克隆,Java 中的 Object 类提供了浅克隆的 clone() 方法,具体原型类只要实现 Cloneable 接口就可实现对象的浅克隆,这里的 Cloneable 接口就是抽象原型类。其代码如下:
步骤一:具体原型类
package com;public class ConcretePrototype implements Cloneable{public ConcretePrototype(){System.out.println("具体原型创建成功!");}public Object clone() throws CloneNotSupportedException{System.out.println("具体原型复制成功!");return (ConcretePrototype)super.clone();}
}
步骤二:测试
package com;public class Main {public static void main(String[] args) throws CloneNotSupportedException {ConcretePrototype obj1= new ConcretePrototype();ConcretePrototype obj2 = (ConcretePrototype)obj1.clone();System.out.println("obj1==obj2? " + (obj1==obj2));}
}
结果如下所示:
为了进一步说明,再举一个例子吧。同一学校的“三好学生”奖状除了获奖人姓名不同,其他都相同,属于相似对象的复制,同样可以用原型模式创建,然后再做简单修改就可以了。图3所示是三好学生奖状生成器的结构图。
代码如下所示:
Citation.java
package com;public class Citation implements Cloneable{String name;String info;String college;Citation(String name,String info,String college){this.name=name;this.info=info;this.college=college;System.out.println("奖状创建成功!");}void setName(String name){this.name=name;}String getName(){return(this.name);}void display(){System.out.println(name+info+college);}public Object clone() throws CloneNotSupportedException{System.out.println("奖状拷贝成功!");return (Citation)super.clone();}
}
Main.java
package com;public class Main {public static void main(String[] args) throws CloneNotSupportedException {Citation obj1=new Citation("张三","同学:在2016学年第一学期中表现优秀,被评为三好学生。","韶关学院");obj1.display();Citation obj2=(Citation) obj1.clone();obj2.setName("李四"); obj2.display();}
}
这篇关于《设计模式》第二部分 创建型设计模式 第6章 原型模式(B:Java实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!