原型模式

8 篇文章 0 订阅

原型模式

即对于对象,我们通过类似复制的形式进行克隆,对于创建对象代价较大时,使用new进行创建就会使效率低下,使用原型模式就会提高效率
需要注意的就是深克隆和浅克隆

实现形式

实现Cloneable接口
重写clone方法

代码实现

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Pig implements Cloneable{
    private int weight;
    private Date birthDate;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class Consumer {
    public static void main(String[] args) throws CloneNotSupportedException {
        Date date = new Date();
        Pig pig = new Pig(99,date);
        System.out.println(pig);
        System.out.println(pig.hashCode());

        Pig clone = (Pig) pig.clone();
        System.out.println(clone);
        System.out.println(clone.hashCode());

    }
}

此时结果为

Pig(weight=99, birthDate=Tue Mar 09 19:47:47 CST 2021)
382774248
Pig(weight=99, birthDate=Tue Mar 09 19:47:47 CST 2021)
382774248

假设我们在最后加上

date.setDate(999);
System.out.println(pig);
System.out.println(clone);

可以发现,pig和clone对象的date都变了,类似于深拷贝和浅拷贝,有深克隆和浅克隆之分
上面的例子就是浅克隆,如果需要深克隆,有多种方式,我们可以采用重写clone方法的形式深克隆

举例上面的例子,Pig类改写成

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Pig implements Cloneable{
    private int weight;
    private Date birthDate;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Pig pig = (Pig) super.clone();
        //对birthDate也进行clone
        pig.birthDate = (Date) this.birthDate.clone();
        return pig;
    }
}

就会变成深克隆

应用

在Spring中
配置的xml文件里,如下,scope的属性如果是prototype就是原型模式,如果是singleton就是单例模式

<bean id="user2" class="com.Cai.pojo.User" c:name="c22" c:age="22" scope="prototype"/>
<!--    singleton单例模式-->
<!--    prototype原型模式-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值