The Prototype Design Pattern

Erik Zhou | Apr 27, 2023 min read

The Prototype is a creational design pattern in software development. This pattern comes in handy when the creation of a new instance of a class is resource-intensive or when the system should not be aware of the specific object types being created. In this blog post, we will take a look into the Prototype design pattern and how to implement it.

Understanding the Prototype Design Pattern

The Prototype pattern is a design pattern that involves generating new objects by cloning existing ones instead of directly instantiating them. This pattern is beneficial when the object construction process is costly or time-consuming, or when the system should not know which specific objects are being created.

The Prototype pattern needs a prototype interface or an abstract class that that has a clone abstract method. Classes implementing this interface or inheriting from the abstract class should have their own implementations of the cloning method. This lets the classes be able to be created by the cloning method instead of the traditional constructor method.

Implementing the Prototype Design Pattern: A Step-by-Step Guide

Now let’s see how we implement the Prototype pattern. Let’s say we have a Shape class, and our goal is to create new shapes by cloning existing ones.

Step 1: Define the prototype interface

First, we must define a prototype interface that has the clone abstract method.

public interface IShape
{
    IShape Clone();
}

Step 2: Create concrete shape classes

Next, we will develop concrete shape classes that implement the IShape interface and has their own implementation of the Clone method.

public class Circle : IShape
{
    public int Radius { get; set; }

    private Circle(int radius)
    {
        Radius = radius;
    }

    public IShape Clone()
    {
        return new Circle(Radius);
    }
}

public class Rectangle : IShape
{
    public int Width { get; set; }
    public int Height { get; set; }

    private Rectangle(int width, int height)
    {
        Width = width;
        Height = height;
    }

    public IShape Clone()
    {
        return new Rectangle(Width, Height);
    }
}

Step 3: Utilize the prototype to create objects

Lastly, we can use prototype objects to create new shapes by cloning existing ones.

IShape circle = new Circle(5);
IShape clonedCircle = circle.Clone();

IShape rectangle = new Rectangle(4, 6);
IShape clonedRectangle = rectangle.Clone();

By applying the Prototype pattern, we can create new shape objects by replicating existing ones, without instantiating their classes directly.