Skip to main content

Design Patterns : Abstract Factory


Abstract Factory is a kind of Structural Design Pattern.
Solves the problem of creating instances of entire product families without specifying their concrete class.

Frequency of use: 5/5 (High)

Intent:
Provides an interface for creating families of related or dependent objects without specifying their concrete classes.
The new operator is considered harmful

Problem:


Solution:

  • Explicitly declare interfaces for each distinct product of the product family
  • Make all variants of that product follow those interfaces
  • Create an abstract factory which returns abstract product type represented by the interface


UML Class Diagram:


Code:




 
using System;

namespace AbstractFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("This is Abstract Factory");
            Console.ReadLine();
        }
    }

    #region FamilyOfProducts
    abstract class Button
    {
        public abstract void Paint();
    }

    class WindowsButton : Button
    {
        public override void Paint()
        {
            Console.WriteLine("Paint() called of Windows Button");
        }
    }

    class MacButton : Button
    {
        public override void Paint()
        {
            Console.WriteLine("Paint() called of Mac Button");
        }
    }

    abstract class CheckBox
    {
        public abstract void Paint();
    }

    class WinCheckBox : CheckBox
    {
        public override void Paint()
        {
            Console.WriteLine("Paint() called of Windows CheckBox");
        }
    }

    class MacCheckBox : CheckBox
    {
        public override void Paint()
        {
            Console.WriteLine("Paint() called of Mac CheckBox");
        }
    }
    #endregion FamilyOfProducts

    #region AbstractFactory & ConcreteFactory
    abstract class GUIFactory
    {
        public abstract Button CreateButton();
        public abstract CheckBox CreateCheckBox();
    }

    class WinFactory : GUIFactory
    {
        public override Button CreateButton()
        {
            return new WindowsButton();
        }

        public override CheckBox CreateCheckBox()
        {
            return new WinCheckBox();
        }
    }

    class MacFactory : GUIFactory
    {
        public override Button CreateButton()
        {
            return new MacButton();
        }

        public override CheckBox CreateCheckBox()
        {
            return new MacCheckBox();
        }
    }
    #endregion AbstractFactory


    class Application
    {
        private GUIFactory _factory;
    }
}




Comments

Popular posts from this blog

15404 error in SQL not able to create new DB diagram

In SQL Server Management Studio do the following: Right Click on your database, choose properties Go to the Options Page In the Drop down at right labeled "Compatibility Level" choose "SQL Server 2005(90)" 3-1. choose "SQL Server 2008" if you receive a comparability error. Go to the Files Page Enter "sa" in the owner textbox. 5-1 or click on the ellipses(...) and choose a rightful owner. Hit OK after doing this, You will now be able to access the Database Diagrams.

How to check if JWT Token is Tampered ?

JWT Tokens has three parts: Header Pay Load Signature Header includes the encryption algorithm and token type. e.g: {    "alg" : "HS256",    "typ" : "JWT" } Signature is created using base64url encoding the header and payload and concatenating them with a period(.) as a seperator. Take the signature of the token and decode it from base64, take the encryption algorithm from the header and generate the signature for the base64 encoded header + '.' + base64 encoded payload. If the signature received and calculated are matching then nobody has tampered the JWT. - Mayank Gupta