Singleton Pattern vs. Static Class

Recently one of my friends asked me the difference between Singleton Pattern and Static Class. I said something really close, but I could not convinence him.  Later I Bing’ed it. I found the wide variety of difference. I consolidated some of them below

First let we see what is Singleton and Static Class over here.

Singleton Pattern: The name it self better describes about it.  Singleton means only once instance of the class. We can define it as a pattern that is used to restrict instantiation of that class to a single instance.

Below code describes the thread safe Singleton Pattern

 
public class SingletonPattern
    {
        private static SingletonPattern _instance = null;
        private static object _lock = new object();

        private SingletonPattern()
        {
        }
        public static SingletonPattern Instance
        {
            get
            {
                if (_instance == null)
                {
                    lock (_lock)
                    {
                        if (_instance == null)
                        {
                            _instance = new SingletonPattern();
                        }
                    }
                }
                return _instance;
            }
        }

        public void DoSomthing()
        {
        }
    }

In above code SingletonPattern class contains the logic that always ensures that only on instance of the class is created. This is achieved by declaring a private constructor and a Static property of SingletonPattern class type.

The DoSomething method in above SingletonPattern class will be accessed in the code like below

 SingletonPattern.Instance.DoSomthing();

Static Class:  Static Class can be defined as a class that can’t be instantiated. This is achieved by placing a key word Static.  Static class will declared like below

public static class StaticClass

    {

        public static void DoSomthing()

        {

        }

    }

The DoSomething method in above StaticClass will be accessed in the code like below

 
StaticClass.DoSomthing();

I don’t know about you, but to me, there doesn’t appear to be a whole lot of practical difference here. In fact Static Class is much simpler than singleton pattern.

Now the real problem comes in to the picture, what if you want to extend or inherit new class from either of these? By default Static Class are sealed. You can’t extend Static Class. Where Singleton Pattern is take advantage over Static Class and few other differences between them are below.

  1. Singleton pattern will handle objects and subclass very well over Static Classes
  2. Singleton pattern will extend the classes and implement   the interfaces. Where Static Class is does not.
  3. we can easily “Lazy Initialization and asynchronous Initialization” the Singleton Classes
  4. Singleton Instance can be passed as parameter to other methods.

Hope now you are little clearer about Singleton vs. Static Class

How to call an ASP.net WebService (OR WCF Service) using Jquery

After seeing much response to my previous article “How to calls server side code using JavaScript”, I am very much impressed to write this. I would like keep this much simple.

Step 1: Create a new Ajax enabled Website

Step 2: Add a Web Service (common.asmx or .svc file) to it.

Step 3: on Webservice code behind file make sure that add 

<System.Web.Script.Services.ScriptService()>_

Attribute to your class as show in below. This will enable to call your webservice from JavaScript.

 Your Webservice code behind file should look like below. Here we are adding a Web method “SayHello”, which is taking Name as input parameter and returns string as output parameter.

 

<System.Web.Script.Services.ScriptService()> _

Public Class Common

    Inherits System.Web.Services.WebService 

                <WebMethod(True)> _

    Public Function SayHello(ByVal Name As string) AS string

        Return “Hello” + Name

    End Function

End Class

Step 4:  Now on your Default.aspx Add a Textbox and Button (Button1) control

Step 5: Now add a new folder called scripts in your project add new JavaScript file  Common.js

 Step 6: Download Jqery library from http://jquery.com/  add it to your script folder. 

Step 7: Now open your common.js and add the following reference as shown in below

Step 8: add following Jquery function on your common.js file

$(document).ready(function() {

 $(‘[id$=Button1]’).click(function() { 

var serviceurl =  “http://yourservname/common.asmx/SayHello”;

var varName = $(‘[id$=TextBox1]’).text;

var ajaxdata = “{‘Name’:'” + varName + “‘}”;

      $.ajax({

            type: “POST”,

            url: serviceurl,

            data: ajaxdata,

            contentType: “application/json; charset=utf-8”,

            dataType: “json”,

            success: onSucess(response),

            error: onError

        });

        return false;

 });

  }); 

function onSucess(response) {

    alert(response);

function onError() {

    alert(“Error while calling webservice”);

}

Step 9: Now add your common.js  file and Jquery.js file to your default.aspx page and run your application

 Step 10: Enter a name in your text box and click on button.  You will see your javascript calling web service.