Java设计模式--原型模式

1.定义
通过复制现有的对象来创建新的对象
2.实现

  1. 实现Cloneable接口
  • Cloneable接口可以通知JVM在运行时安全的让实现此接口的类使用clone方法。如果没有实现Cloneable接口,使用clone方法,JVM会在运行时抛出CloneNotSupportException异常
  1. 重写Object类的clone方法
  • Object类是所有Java类的父类,其中有一个clone方法,作用是返回对象的一个拷贝。但此方法的作用域是protected,需要重写,将作用域改为public
  1. 代码

实体类

class Mail implements Cloneable{
	private String name;
	
	@Override
	public Mail clone() {
		Mail mail = null;
		try {
			mail = (Mail)super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return mail;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}

测试 --输出false

public class Clone {

	public static void main(String[] args) {
		Mail mail = new Mail();
		mail.setName("wl");
		int i =1;
		Mail mailclone = null;
		mailclone = mail.clone();
		System.out.println(mail == mailclone);
	}
	
}

优点

  1. clone方法直接操纵底层二进制流创建对象,比new一个对象要快。特别是复制大对象时,效果更加明显
  2. 隐藏了创建新对象的复杂性

缺点

  1. 由于复制对象是没有调用构造方法,无法和单例模式同时使用。单例模式对象是private的,原型模式是public
  2. 原型模式不能有final对象
  3. clone方法只会拷贝对象中的基本数据类型和属性,对于引用类型和数组不会拷贝。需要另行拷贝。clone方法是浅拷贝。

适用场景

  1. 需要创建的对象比较大
  2. 对目标对象的修改不会影响原有的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值