设计模式--原型模式(1)

本文通过克隆羊的比喻,深入浅出地介绍了Java中对象克隆的两种方式:传统方式与实现Cloneable接口的方式。对比了两者的优缺点,并详细解释了为何需要实现Cloneable接口。最后,介绍了在Spring框架中如何使用原型方式创建对象。

事例:克隆羊问题
现有一只羊叫tom,请创建和tom属性完全相同的十只羊

传统方式
定义 Sheep

public class Sheep {
    String name;

    Sheep(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Sheep{" +
                "name='" + name + '\'' +
                '}';
    }
}

调用sheep,如果创建10只,需要new10次即可

public class SheepClient {

    public static void main(String[] args) {
        Sheep sheep = new Sheep("tom");
        Sheep sheep1 = new Sheep("tom");
        System.out.println(sheep1);
    }
}

好处:简单易懂
缺点:创建对象时,总要初始化属性,而不是动态获取运行时动态的属性,如果创建对象复杂时,效率比较低


Java的所有类都默认继承java.lang.Object类
Cloneable 中
在这里插入图片描述

为什么必须要实现Cloneable

因为如果不实现Cloneable接口,当调用clone()时会抛出CloneNotSupportedException异常

public class Sheep implements Cloneable {
    String name;

    Sheep(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Sheep{" +
                "name='" + name + '\'' +
                '}';
    }

    @Override
    protected Sheep clone() {
        Sheep sheep = null;
        try {
            sheep = (Sheep) super.clone();
        } catch (CloneNotSupportedException e) {
            System.out.println(e.getMessage());
        }

        return sheep;
    }
}

public class SheepClient {

    public static void main(String[] args) {
        Sheep sheep = new Sheep("tom");
        Sheep sheep2 = sheep.clone();
        System.out.println(sheep2);
    }
}

框架中原型的使用:Spring
Spring可使用原型方式创建对象scope设置为prototype
bean.xml
在这里插入图片描述
测试类
在这里插入图片描述
BeanFactory的实现类

先获取bean工厂
在这里插入图片描述
其内部是个同步代码块,返回ConfigurableListableBeanFactory
在这里插入图片描述
ConfigurableListableBeanFactory继承
在这里插入图片描述
AbstractBeanFactory实现ConfigurableBeanFactory
在这里插入图片描述
在这里插入图片描述
doGetBean中对配置中scope原型的处理
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值