ARTICLE

Proto Type Design Pattern

Posted by Srihari Chinna Articles | Design & Architecture October 25, 2010
In this article you will learn What is a Proto type design pattern.
Reader Level:

GOF -> A fully initialized instance to be copied or cloned. The Prototype pattern specifies the kind of objects to create using a prototypical instance.

So first create an object that allows copying himself to another object of same type, instead of creating new objects by using 'New' keyword.

  • Prototype co-opts one instance of a class for use as a breeder of all future instances.
  • Prototype is unique among the other creational patterns in that it doesn't require a class - only an object.
  • Prototypes are useful when object initialization is expensive
  • Factory Method creation through inheritance. Prototype creation through delegation
  • Prototype doesn't require sub classing, but it does require an "initialize" operation. Factory Method requires sub classing, but doesn't require Initialize.

    image1.gif

C# Support for the Proto type

A. Shallow Copy -> Object.MemberwiseClone Method

Any object that derives from the System.Object has this method, which creates a shallow copy of the current Object. The MemberwiseClone method creates a shallow copy by creating a new object, and then copying the nonstatic fields of the current object to the new object.

1. Value Type

When a field is a value type, a bit-by-bit copy of the field is performed.

2. Reference Type

When a field is a reference type, the reference is copied but the referred object is the same. So, the original object and its clone refer to the same object. For example, consider an object called SomePerson that references objects Person. A shallow copy of SomePerson creates new object SomePerson1 that also references objects Person.

Look at the following example

 public class A

                {

        private string _a;

        public A(string a){

 this._a = a;

        }

        public A Clone(){

            return (A)this.MemberwiseClone();

        }

}

On the client

image2.gif

Now consider another example

             public class SomeData{

        private int myVar;

        public int MyProperty

        {

            get { return myVar; }

            set { myVar = value; }

        }

    }

 

 

    public class A{

        private string _a;

        public SomeData MySomeData;

 

        public A(string a){

            this._a = a;

        }

 

        public A Clone(){

            return (A)this.MemberwiseClone();

        }
    }


Client side

image3.gif

B. Deep Copy -> Object.MemberwiseClone Method

As said above Deep copy is altogether different. It creates new objects. Following is the example code to implement deep copy.
 

                public class SomeData

    {

        private int myVar;

 

        public int MyProperty

        {

            get { return myVar; }

            set { myVar = value; }

        }

               

    }

 

 

    public class A

    {

        private string _a;

 

        public SomeData MySomeData;

 

        public A(string a)

        {

            this._a = a;

        }

 

        public A Clone()

        {

            return (A)this.MemberwiseClone();

        }

 

        public A DeepCopy()

        {

            A a = (A)this.MemberwiseClone();

            a.MySomeData = new SomeData();

            a.MySomeData.MyProperty = this.MySomeData.MyProperty;

 

            return a;

        }

    }


Client side code

image4.gif

Login to add your contents and source code to this article
post comment
     
COMMENT USING
PREMIUM SPONSORS
DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and add new content to existing PDF documents from within your applications.
Get Career Advice from Experts
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.