java设计模式---原型模式
来源:互联网 发布:手机淘宝店类目怎么改 编辑:程序博客网 时间:2024/04/29 18:52
用原型实例指定创建对象的种类,并且同过拷贝这些原型创建新的对象。
在java中提供了clone方法来实现对象的克隆,那么先看下clone应满足的条件(要实现克隆该类必需implements Cloneable):
1、对任何对象X,都有X.clone() != X,即克隆对象与原对象不是同一对象,存储的地址也不同;
2、对任何对象X,都有X.clone().getClass() == X.getClass(),即克隆对象与原对象的类型一致;
3、对象X的equals方法定义恰当的话,应该有:X.clone().equals(X) == true;
组成:
抽象原型:实现Cloneable,并且实现了自己的clone。
具体原型:对抽象原型的具体实现(我个人认为没必要)。
类图关系:
具体代码:
抽象原型(我这里只用的普通类):Prototype.java
public class Prototype implements Cloneable {public String name;public String password;public Prototype(String name, String password) {this.name = name;this.password = password;}public void setName(String name) {this.name = name;}public void setPassword(String password) {this.password = password;}public Prototype clone() {Prototype prototype = null;try {prototype = (Prototype)super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();System.out.println("clone failure!!!");}return prototype;}public boolean equals(Object obj) {if(obj instanceof Prototype) {Prototype currPrototype = (Prototype)obj;if(currPrototype.name.equals(this.name) && currPrototype.password.equals(this.password)) {return true;}}return false;}}
客户端:TestPrototype.java
public class TestPrototype {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubPrototype pro = new Prototype("xxx", "xxx123");System.out.println("befor clone--> clone object:" + pro);Prototype pro2 = pro.clone();System.out.println("after clone--> clone object:" + pro2);System.out.println(pro2 == pro);System.out.println(pro2.getClass().equals(pro.getClass()));System.out.println(pro2.equals(pro));}}
运行结果:
当需要更多的该类的对象时,只要使用创建好的对象.clone()就能复制另一个对象。
应用场景:
1、一个系统应该独立于它的产品的创建、构成和表示时;
2、当要实例化的类是在运行时指定(动态加载);
3、需要创建相似的对象比较多的时候。
- java 原型设计模式
- Java原型设计模式
- java设计模式(原型模式)
- java设计模式---原型模式
- java设计模式---原型模式
- java设计模式---原型模式
- Java设计模式---原型模式
- JAVA设计模式:原型模式
- java设计模式----原型模式
- JAVA 设计模式 - 原型模式
- 《Java设计模式》 原型模式
- Java设计模式 -- 原型模式
- Java设计模式--原型模式
- Java 设计模式-原型模式
- JAVA设计模式--原型模式
- java设计模式-原型模式
- Java设计模式--原型模式
- java设计模式,原型模式
- php中生成随机密码的自定义函数代码
- 海量数据面试题整理
- 字符串模板总结(四):后缀数组
- smarty模板引擎的变量修饰器
- 修改mysql root密码的几种方法
- java设计模式---原型模式
- guid跟sequence做主键的比较
- [原创]项目svn版本控制中的分支策略
- lte学习
- Oracle数据库imp命令导入时1659错误处理
- 用js的for循环获取radio选中的值
- 表内容自增(主要是填充测试数据用)
- 安装系统时磁盘采用GPT分区形式转换MRP格式
- Linux Shell编程入门