原型模式的定义:
      用原型实例指定要创建对象的种类,并且通过拷贝这些原型创建新的对象。
Picture
      LVOOP 是值传递方式,这意味着LV自动实现原型模式,不需要任何编程。
      一个对象的实例意味着在堆中已经建立了对象的变量,这个对象的变量即包含了对象的类型,也包括了对象的私有数据。原型模式即根据已有的对象实例,建立一个或者多个新的实例,这个实例具有和它的原型图同样的变量类型和私有数据。
      在文本方式面向对象的编程语言中,复制一个对象的实例并非一件简单的事情,在VS.net编程中,分为深层复制和浅层复制两种方式。
      浅层复制复制本身是值复制,复制后的实例具有和原型完全相同的私有变量值。如果一个类中包含另一个类作为它的数据成员,此时复制的指向包含类的引用。也就是说,浅层复制中,如果类中包含了另一个类,那么浅层复制后,原型和新的实例中,包含类的引用指向同一地址,并非完全创建了一个不相关的实例。
      浅层复制在VS.NET 中比较简单,因为自动提供了Clone接口,但是深层复制则编程比较复杂。
      在LVOOP 中,原型复制是非常自然的。LV 的数据流方式与LVOOP的值传递方式本身就是深层复制的,可以轻易实现原型复制模式。
     
      下面我们创建一个例子,演示一下LV 自然的原型模式。 例子中创建了个人信息类和公司信息类,在雇员信息类的私有数据中,将个人信息类和公司信息类作为雇员信息类的数据成员。
      这样做的目的是,对于很多雇员信息,他们的个人信息是不同的,但是多人的公司信息可能是相同的,这样通过原型方式,可以创建多个具有相同公司信息,不同个人信息的具体实例。这就是原型模式的重要作用。


Picture
      个人信息类的私有数据成员和获取个人信息方法以及设置个人信息方法如下图所示:
Picture
      公司信息类的私有数据成员和获取信息以及设置信息方法如下图所示:
Picture
Picture
      下面我们创建一个测试VI,根据一个雇员信息为原型,创建多个具体实例,所有实例具有相同的公司信息。
Picture
      上面的例子中首先创建一个公司信息类的具体实例,由于LVOOP 值传递的特点,替代了雇员信息类的中公司信息类成员,结果输出了一个雇员信息类的具体实例。用FOR 循环自动索引,自动创建了三个雇员信息类的具体实例并写入数组。
      可以看到这三个具体信息类的实例,具有相同的公司信息,这样就实现了原型复制。
      LVOOP 是天生的原型复制,这得益于他的值传递方式。但是由于并非传递引用,所以很多OOP的面向对象的功能在LV 中很难实现。
      原型模式的主要目的是如何创建实例的问题,我们知道,LVOOP不支持构造函数,所以它创建实例的过程本身采用的就是原型复制模式。
      我们重新考虑一下,如何在LV 中创建一个类的实例,通常有三种方法。

一、通过复制类常量,构造一个具体实例。
Picture
二、通过类的输入控件,建立一个新的类实例
Picture
三、使用函数导出类的实例,这是最为重要的创建实例的方法。
      通过类的方法,可以输出类的实例。对于一般的方法,类的输入端子选择必须连接,这样在使用方法时,必须传入类的实例。
      一个重要的技巧是,类的方法中,如果类的输入端子采用推荐或者可选方式,在不连接输入的情况下,则输出默认值,实际上就是根据默认值自动构建一个类的实例。

      通过这种方式,可以实现类似于构造函数的功能。
Picture
Picture



Leave a Reply.