设计模式之原型模式

设计模式之原型模式

原型模式

简介

原型模式是一个创建型模式。原型模式使用原型实例指定创建对象的种类,并且通过拷贝原型对象创建新的对象。

为什么需要原型模式

1.为什么不用new直接新建对象,而要用原型模式?
首先,用new新建对象不能获取当前对象运行时的状态,其次就算new了新对象,在将当前对象的值复制给新对象,效率也不如原型模式高。
2.为什么不直接使用拷贝构造函数,而使用原型模式?
原型模式与拷贝构造函数是不同的概念,拷贝构造函数涉及的类是已知的,原型模式涉及的类可以是未知的(基类的拷贝构造函数只能复制得到基类的对象)。
原型模式生成的新对象可能是一个派生类。拷贝构造函数生成的新对象只能是类本身。原型模式是描述了一个通用方法(或概念),它不管是如何实现的,而拷贝构造则是描述了一个具体实现方法。

原型模式优缺点

优点:
1.原新模式对客户隐藏了具体的产品类。
2.原型模式是在内存中二进制流的拷贝,要比直接new一共对象性能好很多,特别是要在一共循环体内产生大量对象时,原型模式可能更好的体现其优点。
3.还有一个重要的用途就是保护性拷贝,也就是对某个对象对外可能是只读的,为了防止外部对这个只读对象的修改,通常可以通过返回一共对象拷贝的形式实现只读的限制。

缺点:
1.这个既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的,在实际开发中应该注意这个潜在问题。优点是减少了约束,缺点也是减少了约束,需要大家在实际应用时考虑。
2.通过实现Cloneable接口的原型模式在调用clone函数构造实例时并不一定比通过new操作速度快,只有当通过new构造对象较为耗时或者说成本较高时,通过clone方法才能够获得效率上的提升。

Java浅克隆和深克隆

代码实战

创建实体Student,再实体中实现Cloneable与Serializable接口。并写入深克隆与浅克隆两个方法。

public class Student implements Cloneable,Serializable {
   

    private String name;

    private int age;

    private Teacher teacher;


    //浅克隆
    public Object clone(){
   
        Object obj = null;

        try{
   
            obj = super.clone();
        }catch (Exception e){
   
            e.printStackTrace();
            return null;
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值