java设计模式--原型模式

## java设计模式--原型模式
```package CreationalPatterns.PrototypePattern;

public class Sheep implements Cloneable{
    public Sheep(String name, String colour, int age) {
        this.name = name;
        this.colour = colour;
        this.age = age;
    }

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

    private int age;
    private String name;
    private String colour;

    public String getName() {
        return name;
    }

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

    public String getColour() {
        return colour;
    }

    public void setColour(String colour) {
        this.colour = colour;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //重写该实例,使用默认的克隆方法
    @Override
    protected Object clone() {
        Sheep sheep= null;
        try {
            sheep = (Sheep)super.clone();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        return sheep;
    }
}
使用方式

    Sheep s1 = new Sheep("多利", "白色", 10);
    Sheep s2 = (Sheep) s1.clone();
案例:
Spring中配置beans.xml文件时,scope属性应用到了原型模式获取bean

public Sheep friend;//定义一个Sheep对象作为Sheep类的属性friend

测试:
        Sheep s1 = new Sheep("懒洋洋", "白色", 10);
        s1.friend = new Sheep("沸羊羊","黑色",11);
        Sheep s6 = (Sheep) s1.clone();

        System.out.println(s1);
        System.out.println(s6);
        System.out.println(s1.friend);
        System.out.println(s6.friend);
        System.out.println(s1.friend==s6.friend);//判断s1和s6的friend是不是同一个
  结果:
   Sheep{age=10, name='懒洋洋', colour='白色'}
   Sheep{age=10, name='懒洋洋', colour='白色'}
   Sheep{age=11, name='沸羊羊', colour='黑色'}
   Sheep{age=11, name='沸羊羊', colour='黑色'}
   true
浅拷贝:
1)对于数据类型是基本类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象;
2)对于数据类型是引用类型的成员变量,那么钱拷贝会进行引用传递;
3)浅拷贝是使用默认的clone()方法来实现

深拷贝:
1)包含浅拷贝的复制内容,为所有引用数据类型的成员变量申请存储空间,并复制引用类型成员变量所引用的对象.
2)实现方式1:重写clone方法
  实现方式2:通过对象序列化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值