Rumah > Java > javaTutorial > teks badan

设计模式之原型模式实例教程

零下一度
Lepaskan: 2017-06-27 10:26:33
asal
1135 orang telah melayarinya

定义(From 百度百科)
      用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

UML类图:

     

具体代码:

     

public class Client {public static void main(String[] args) {//        Director d = new Director(new ConcreteBuilder());//        d.construct();ConcretePrototype1 prototype = new ConcretePrototype1();for (int i = 0; i < 10; i++) {
            ConcretePrototype1 x = (ConcretePrototype1) prototype.clone();
            x.test1();
        }
    }
}public class Prototype  implements Cloneable {public Prototype clone() {
        Prototype prototype = null;try{
            prototype = (Prototype)super.clone();
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }return prototype;
    }
}public class ConcretePrototype1 extends Prototype {public void test1() {
        System.out.println(this);
        System.out.println("123");
    }
}
Salin selepas log masuk

各部分说明:
Prototype 原型类实现Cloneable接口。
ConcretePrototype1 原型类Prototype的子类

模式详细说明:
通过克隆复制一个对象实例
克隆出来的新的对象复制原实例的值

原型模式的注意事项:
   使用原型模式复制对象不会调用类的构造方法。因为对象的复制是通过调用Object类的clone方法来完成的,连访问权限都对原型模式无效。还记得单例模式吗?单例模式中,
只要将构造方法的访问权限设置为private型,就可以实现单例。但是clone方法直接无视构造方法的权限,所以,单例模式与原型模式是冲突的,在使用时要特别注意。
    clone方法,执行的是浅拷贝,也就是说如果是引用类型的属性,则它不会进行拷贝,而是只拷贝引用。

优缺点:
优点:
clone方法是由虚拟机直接复制内存块执行,速度比new快很多
运行时获取对象及相应的状态
缺点:
Prototype必须实现clone方法,如果Prototype里的属性很多引用类型,甚至对象里的应用,那就要递归实现clone方法,会很复杂,新增引用属性时,会去更改clone方法的实现。

Atas ialah kandungan terperinci 设计模式之原型模式实例教程. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan