当前位置: 首页 > 图灵资讯 > 技术篇> Prototype

Prototype

来源:图灵教育
时间:2024-09-18 15:28:10

prototype

它是创造性的设计模式之一。 重复/浅副本用于创建给定对象。 当直接创建对象的成本很高时,这种模式非常有用。例如,如果在查询大型数据库后创建对象,则在性能上一次又一次地创建对象并不经济。 因此,一旦对象被创建,我们将缓存对象,并在未来需要相同的对象时,我们将从缓存中获得它,而不是从数据库中再次创建它,并在需要时更新数据库,以减少数据库的呼叫.

注:我们必须使用它 cloneable,也就是说,需要克隆对象的标记接口(clonable)不包括任何方法,它表明一个类可以被克隆,这意味着创建一个类的副本对象。

object.clone() 方法 浅拷贝是默认创建的 默认情况下,clone() 浅表复制方法执行对象。这意味着它创建了一个新对象,并将所有字段从原始对象复制到新对象。但是,如果对象包含对其他对象(如数组、列表或自定义对象)的引用,则复制引用本身,而不是它们指向的实际对象。 因此,原始对象和克隆对象都会引用这些字段的相同对象。引用对象的任何变化都将通过一个例子反映在另一个例子中。

让我们通过可克隆 shape 对象的例子来理解这一点。

形状

public class shape implements cloneable {
    private string id;
    protected string shape;

    @override
    public string tostring() {
        return "shape [id=" + id + ", shape=" + shape + "]";
    }
    public string getid() {
        return id;
    }
    public void setid(string id) {
        this.id = id;
    }
    public string getshape() {
        return shape;
    }

    @override
    public object clone(){
        object clone = null;
        try {
            clone = super.clone();
        } catch (clonenotsupportedexception e) {
            e.printstacktrace();
        }
        return clone;
    }
}

儿童班

public class rectangle extends shape {

    public rectangle(){
        shape = "rectangle";
    }
    public void draw(){
       system.out.println("calling draw() of rectangle shape");
    }
}

public class circle extends shape {
    public circle(){
        shape = "circle";
    }
    public void draw(){
        system.out.println("calling draw in circle method");
    }
}

缓存

public class shapecache {
    public static hashmap<string> cache = new hashmap();

    public static shape cloneobject(string id){
        return (shape)cache.get(id);
    }
    public static void addshapeincache(shape shape){
        cache.put(shape.getid(),shape);
    }

}
</string>

主要

public class main {
    public static void main(string args[]){
        shape circle = new circle();
        circle.setid("1");
        shape rectangle = new rectangle();
        rectangle.setid("2");

        shapecache.addshapeincache(rectangle);
        shapecache.addshapeincache(circle);

        shape copyshape1 = (shape) shapecache.cache.get(circle.getid());
        shape copyshape2 =(shape) shapecache.cache.get(rectangle.getid());

        system.out.println(copyshape1);
        system.out.println(copyshape2);
    }

}

输出:

Shape [id=1, shape=Circle]
Shape [id=2, shape=Rectangle]

要点

  • 圆形和矩形遵循里氏替换原则(solid原则),规定对象可以在不影响代码正确性的情况下用其子类型替换。
  • 仅创建 shape 对象的浅表副本。

以上是Prototype的详细内容,请关注图灵教育的其他相关文章!