原型模式在实际开发中的应用BeanUtils

本文探讨了原型模式在实际开发中的两大应用场景,包括保持操作独立性和避免多线程影响。分析了原型模式带来的效率和稳定性优势,并指出直接new对象的替代方案。针对原型模式实现的不便,文章引入了Spring和Apache的BeanUtils工具,讨论了它们在实现非侵入式原型模式中的作用,以及性能比较,推荐在属性赋值时使用Spring的BeanUtils。
摘要由CSDN通过智能技术生成

       我们学习设计模式的时候学了原型模式,原型模式在我们的实际开发中使用场景也是很多的,我在实际开发中主要有以下两大场景:

              1、在我们希望接下来这个类的操作与之前这个类的操作之间相互不影响;

              2、通常在异步操作的时候避免多线程问题,在调用方法的时候不希望被调用方法对对象的操作影响本层的剩余业务逻辑处理;

       在需要这样的时候我可以直接new一个对象自己赋值不采用原型模式呢?

       当然可以,只要你不嫌麻烦,前辈们为我们提供了原型模式肯定是因为原型模式对我们有大大的好处的,一般来说原型模式给我们带来了以下的好处:

              1、程序运行效率:可以节省new创建对象的时间,

              2、代码开发效率:可以一个clone()方法搞定,无需复杂的赋值操作

              3、代码的稳定性:依次一个一个的进行代码赋值,会不会因为一个Cv操作失误导致一个细微难察觉的代码bug发布出来了呢?

 那么首先我们来看看要通过clone实现原型模式的代码吧

//第一步:对象实现Cloneable接口
//第二步:重写clone方法;
public Object clone() throws CloneNotSupportedException{
    Student student=(Student)super.clone();
    student.setStudentFiles((StudentFiles)studentFiles.clone());
    return student;
}



//当我们需要进行深克隆的时候可以通过序列化的方式实现;

但是在实际开发中就会发现当我们需要使用原型模式的时候还需要去对对象model进行clone这种方式真的不是很友好;

      what? 不友好吗?

      当然,首先,这不符合开闭原则,我们在使用前并不知道这个需要使用原型模式,当需要使用的时候还需要去改老代码,这不是不符合开闭原则吗?

      其次,我只是需要一个克隆对象,还需要去实现一堆复杂的浅克隆,深克隆代码吗?是不是有点太耗费功夫了呢?是的,作为程序员的我就是这么懒;

 

      那么我们不使用clone,怎么快速友好,非侵入的实现原型模式呢?

      这个时候我们的猪脚就上场了,而且还是两个

            org.springframework.beans.BeanUtils

            org.apache.commons.beanutils.BeanUtils

 

按照惯例,我们分析就从源码进入

       org.springframework.beans.BeanUtils

    //使用无参数构造函数实例化类的便利方法。    
    public static <T> T instantiate(Class<T> clazz) throws BeanInstantiationException {
		Assert.notNull(cl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值