美文网首页大话设计模式
第9章 原型模式(Prototype)

第9章 原型模式(Prototype)

作者: 小超_8b2f | 来源:发表于2020-03-19 16:30 被阅读0次

解决问题:
创建n个类似的对象就需要new n次,每次都重写set一大堆属性值,很麻烦。
Java已有一些工具类来进行JavaBean的copy。
如果没有工具类,而是让你自己弄呢?这就是原型模式。让需要被copy的对象里实现一个clone()。

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。


原型模式结构图

浅引用:

对象中的引用类型属性只拷贝引用。拷贝对象和原对象共用一个相同的引用

深引用:

对象中的引用类型属性不拷贝引用,而是将次属性也物理拷贝。拷贝对象和原对象不共用一个相同的引用。

import lombok.Getter;
/**原型类*/
public abstract class Prototype {
    
    @Getter
    private String id;
    
    public Prototype(String id) {
        this.id = id;
    }
    
    //抽象类关键就是有一个这样的clone方法
    public abstract Prototype clone();
}


import lombok.Data;
@Data
public class ConcretePrototype1 extends Prototype {
    
    private String name;
    private Integer sex;
    
    public ConcretePrototype1(String id) {
        super(id);
    }

    @Override
    public Prototype clone() {
        return (Prototype)this.memberWiseClone();
    }
    
    private ConcretePrototype1 memberWiseClone() {
        ConcretePrototype1 cp = new ConcretePrototype1(super.getId());
        cp.setName(name);
        cp.setSex(sex);
        return cp;
    }
}


public class Client {
    public static void main(String[] args) {
        Prototype p0 = new ConcretePrototype1("007");
        Prototype p1 = p0.clone();
        Prototype p2 = p0.clone();
        Prototype p3 = p0.clone();
    }
}

相关文章

网友评论

    本文标题:第9章 原型模式(Prototype)

    本文链接:https://www.haomeiwen.com/subject/qdjlyhtx.html