设计模式之原型模式

设计模式之原型模式

原型模式:克隆出一个拷贝对象,分深克隆和浅克隆
深克隆:对象内部的所有内容都复制一遍(指的是引用对象)
浅克隆:对象内部的东西直接复用(指的是引用对象)

下面是提供测试得服务方内容

//实现标记接口,代表可以克隆
//当创建对象比较麻烦的时候可以采用克隆模式。可以使用java自带支持的克隆接口。也可以不使用(使用自己编写的接口)
// java底层实现克隆的方式直接拷贝二进制(所以当创建对象的消耗比较大的时候可以使用)
public class SeverUnit implements Cloneable{

    private int a;
    private User user;
    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public SeverUnit clone() throws CloneNotSupportedException {
        SeverUnit clone = (SeverUnit) super.clone();//这里只是浅克隆
        if(this.user!=null){
            clone.user = this.user.clone();//深度克隆
        }
        return clone;
    }

    @Override
    public String toString() {
        return "SeverUnit{" +
                "a=" + a +
                ", user=" + user +
                '}';
    }
}
public class User implements Cloneable{


    private String name;

    public String getName() {
        return name;
    }

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

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

    @Override
    public User clone() throws CloneNotSupportedException {
        return (User)super.clone();
    }
}

测试客户端

public class prototypeClient {
    public static void main(String[] args) throws CloneNotSupportedException {

        SeverUnit unit = new SeverUnit();
        unit.setA(10);
        User user = new User();
        user.setName("123");
        unit.setUser(user);
        SeverUnit clone = unit.clone();
        System.out.println(clone);
        System.out.println(clone.getUser().equals(user));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值