Let's Play Around With Factory Design Pattern

Introduction
 

Today, in this article let's play around with one of the interesting and most useful concepts of design patterns, which will be hosted in a web app.

Question: What is a Factory Pattern ? 

In simple terms "Creates an object without exposing implementation logic to the client".
I think we are now good to go to implement this wonderful concept.

Step 1: The complete code of Default.aspx looks like this:


<
%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FactoryPatternApplication._Default" %>

    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

        <head runat="server">

            <title></title>

        </head>

        <body>

            <form id="form1" runat="server">

                <div>

                    <h1 style="text-align:center; font-family:Verdana; font-size:large; color:Maroon">Factory Pattern - Design Patterns</h1>

                    <center>

                        <table>

                            <tr>

                                <td>

                                    <asp:Label ID="Label1" runat="server" Text="Please Enter First Number" Font-Size="Small" Font-Bold="true" Font-Italic="true" Font-Names="Verdana"></asp:Label>

                                </td>

                                <td>

                                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

                                </td>

                            </tr>

                            <tr>

                                <td>

                                    <asp:Label ID="Label2" runat="server" Text="Please Enter Second Number" Font-Size="Small" Font-Bold="true" Font-Italic="true" Font-Names="Verdana"></asp:Label>

                                </td>

                                <td>

                                    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

                                </td>

                            </tr>

                            <tr>

                                <td colspan="2">

                                    <asp:Button ID="Button1" runat="server" Text="Addition" Width="165px"Font-Names="Verdana" BackColor="Orange" onclick="Button1_Click" />

                                </td>

                            </tr>

                            <tr>

                                <td colspan="2">

                                    <asp:Button ID="Button2" runat="server" Text="Subtraction" Width="165px"Font-Names="Verdana" BackColor="Orange" onclick="Button2_Click" />

                                </td>

                            </tr>

                            <tr>

                                <td colspan="2">

                                    <asp:Button ID="Button3" runat="server" Text="Multiplication" Width="165px"Font-Names="Verdana" BackColor="Orange" onclick="Button3_Click" />

                                </td>

                            </tr>

                            <tr>

                                <td colspan="2">

                                    <asp:Button ID="Button4" runat="server" Text="Division" Width="165px"Font-Names="Verdana" BackColor="Orange" onclick="Button4_Click" />

                                </td>

                            </tr>

                        </table>

                        <table>

                            <tr>

                                <td colspan="2">

                                    <asp:Label ID="lblResult" runat="server" Font-Names="Verdana" ForeColor="Brown"></asp:Label>

                                </td>

                            </tr>

                        </table>

                    </center>

                </div>

            </form>

        </body>

    </html>


Step 2: The complete code of IAdd.cs looks like this:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace FactoryPatternApplication

{

    public interface IAdd

    {

        double Add(double a, double b);

    }

}

 

Step 3: The complete code of ISub.cs looks like this:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace FactoryPatternApplication

{

    public interface ISub

    {

        double Sub(double a, double b);

    }

}

 

Step 4: The complete code of IMul.cs looks like this:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace FactoryPatternApplication

{

    public interface IMul

    {

        double Mul(double a, double b);

    }

}


Step 5: The complete code of IDiv.cs looks like this:


using
System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace FactoryPatternApplication

{

    public interface IDiv

    {

        double Div(double a, double b);

    }

}


Step 6: The complete code of Addition.cs looks like this:


using
System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

namespace FactoryPatternApplication

{

    public class AdditionClass : IAdd

    {

        public double Add(double a, double b)

        {

            return a + b;

        }

    }

}

 

   

Step 7: The complete code of Subtraction.cs looks like this:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

namespace FactoryPatternApplication

{

    public class SubtractionClass : ISub

    {

        public double Sub(double a, double b)

        {

            return a - b;

        }

    }

}

 

Step 8: The complete code of Multiplication.cs looks like this:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

namespace FactoryPatternApplication

{

    public class MultiplicationClass : IMul

    {

        public double Mul(double a, double b)

        {

            return a * b;

        }

    }

}

   

Step 9: The complete code of Division.cs looks like this:


using
System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

namespace FactoryPatternApplication

{

    public class DivisionClass : IDiv

    {

        public double Div(double a, double b)

        {

            return a / b;

        }

    }

}

 

Step 10: The complete code of ArthmeticFactory.cs looks like this:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI.WebControls;

namespace FactoryPatternApplication

{

    public class ArthmeticFactory

    {

        public IAdd getAdd(string a)

        {

            if (a == "Addition"){return new AdditionClass();

            }

            elsereturn null;

        }

        public ISub getSub(string a)

        {

            if (a == "Subtraction")

            {

                return new SubtractionClass();

            }

            elsereturn null;

        }

        public IMul getMul(string a){if (a == "Multiplication")

        {

            return new MultiplicationClass();

        }

            elsereturn null;

        }

        public IDiv getDiv(string a)

        {

            if (a == "Division")

            {

                return new DivisionClass();

            }

            elsereturn null;

        }

    }

}

 

Step 11: The complete code of Default.aspx.cs looks like this:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;namespace FactoryPatternApplication

{
public
partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e){}

    protected void Button1_Click(object sender, EventArgs e)

    {

        if (string.IsNullOrEmpty(TextBox1.Text) || string.IsNullOrEmpty(TextBox2.Text))

        {

            lblResult.Text = "Please Enter Some Values";

        }

        else

        {

            var a = Button1.Text;IAdd obj_Add = objFactory.getAdd(a);

            lblResult.Text = "Addition Result of " + TextBox1.Text + " and " + TextBox2.Text + " is : <b>" + obj_Add.Add

                (Convert.ToDouble(TextBox1.Text), Convert.ToDouble(TextBox2.Text)) + "</b>";TextBox1.Text = "";

            TextBox2.Text = "";}}protected void Button2_Click(object sender, EventArgs e)

            {

                if (string.IsNullOrEmpty(TextBox1.Text) || string.IsNullOrEmpty(TextBox2.Text))

                {

                    lblResult.Text = "Please Enter Some Values";

                }

                else

                {

                    var a = Button2.Text;ISub obj_Sub = objFactory.getSub(a);

                    lblResult.Text = "Subtraction Result of " + TextBox1.Text + " and " + TextBox2.Text + " is : <b>" +

                        obj_Sub.Sub(Convert.ToDouble(TextBox1.Text),

                        Convert.ToDouble(TextBox2.Text)) + "</b>";TextBox1.Text = "";

                    TextBox2.Text = "";

                }

            }

    protected void Button3_Click(object sender, EventArgs e)

    {

        if (string.IsNullOrEmpty(TextBox1.Text) || string.IsNullOrEmpty(TextBox2.Text))

        {

            lblResult.Text = "Please Enter Some Values";

        }

        else

        {

            var a = Button3.Text;IMul obj_Mul = objFactory.getMul(a);

            lblResult.Text = "Multiplication Result of " + TextBox1.Text + " and " + TextBox2.Text + " is : <b>" + obj_Mul.Mul

                (Convert.ToDouble(TextBox1.Text),

                Convert.ToDouble(TextBox2.Text)) + "</b>";TextBox1.Text = "";TextBox2.Text = "";

        }

    }

    protected void Button4_Click(object sender, EventArgs e)

    {

        if (string.IsNullOrEmpty(TextBox1.Text) || string.IsNullOrEmpty(TextBox2.Text))

        {

            lblResult.Text = "Please Enter Some Values";

        }

        else

        {

            var a = Button4.Text;IDiv obj_Div = objFactory.getDiv(a);lblResult.Text = "Division Result of " +

                TextBox1.Text + " and " + TextBox2.Text + " is : <b>" + obj_Div.Div

                (Convert.ToDouble(TextBox1.Text),

                Convert.ToDouble(TextBox2.Text)) + "</b>";TextBox1.Text = "";TextBox2.Text = "";

        }

    }

    #region Instance MembersArthmeticFactory objFactory = new ArthmeticFactory();#endregion

}

}

Step 12: The output of the application looks like this:

Output1.png 

Step 13: The output of the nothing entered application looks like this:

 

Output2.png


Step 14: The output of the addition operation application looks like this:


Output3.png

 

Step 15: The output of the division operation application looks like this:

 Output4.png