.NET Interview Questions by Abhishek Goenka - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Design Pattern

Command

Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

/*the Command interface*/

 public interface Command {

   void execute();

}

/*the Invoker class*/

import java.util.List;

import java.util.ArrayList;

 

public class Switch {

  

  

private List<Command> history = new ArrayList<Command>();

  

public Switch () {

   }

public void storeAndExecute(Command cmd) {

this .history.add(cmd); // optional

       cmd.execute();        

   }

}

/*the Receiver class*/

public class Light {

 

public Light() {

   }

  

public void turnOn() {

      System.out.println("The light is on");

   }

public void turnOff() {

      System.out.println("The light is off");

}

}

/*the Command for turning off the light - ConcreteCommand #2*/

public class FlipDownCommand implements Command {

 

private Light theLight;

 

public FlipDownCommand(Light light) {

this .theLight = light;

   }

 

public void execute() {

      theLight.turnOff();

   }

}

 

/*The test class or client*/

public class PressSwitch {

 

public static void main(String[] args){

      Light lamp = new Light();

      Command switchUp = new FlipUpCommand(lamp);

      Command switchDown = new FlipDownCommand(lamp);

Switch s = new Switch();

  

try {

If (args[0].equalsIgnoreCase("ON")) {

            s.storeAndExecute(switchUp);

            System.exit(0);

         }

        

If (args[0].equalsIgnoreCase("OFF")) {

            s.storeAndExecute(switchDown);

            System.exit(0);

         }

         System.out.println("Argument \" ON \" or \" OFF \" is required.");

      }

catch (Exception e) {

         System.out.println("Argument's required.");

      }

   }

}

Iterator

Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

Null object

Avoid null references by providing a default object.

/* Null Object Pattern implementation:

 */

using System;

 

// Animal interface is the key to compatibility for Animal implementations below.

 

interface IAnimal

{

    void MakeSound();

}

 

// Dog is a real animal.

 

class Dog : IAnimal

{

    public void MakeSound()

    {

        Console.WriteLine("Woof!");

    }

}

// The Null Case: this NullAnimal class should be instantiated and used in place of C# null keyword.

class NullAnimal : IAnimal

{

public void MakeSound()

    {

// Purposefully provides no behaviour.

    }

}

/* =========================

 * Simplistic usage example in a Main entry point.

 */

 static class Program

{

   

static void Main()

    {

        IAnimal dog = new Dog();

        dog.MakeSound(); // outputs "Woof!"

        

/* Instead of using C# null, use a NullAnimal instance.

         * This example is simplistic but conveys the idea that if a NullAnimal instance is used then the program

         * will never experience a .NET System.NullReferenceException at runtime, unlike if C# null was used.

         */

        IAnimal unknown = new NullAnimal();  //<< replaces: IAnimal unknown = null;

 

        unknown.MakeSound(); // outputs nothing, but does not throw a runtime exception      

    }

}

Observer or Publish/subscribe

Define a one-to-many dependency between objects where a state change in one object results in all its dependents being notified and updated automatically.

// Observer pattern -- Structural example

 

using System;

using System.Collections.Generic;

 

namespace DoFactory.GangOfFour.Observer.Structural

 

{

  /// <summary>

  /// MainApp startup class for Structural

  /// Observer Design Pattern.

  /// </summary>

  class MainApp

  {

    /// <summary>

    /// Entry point into console application.

    /// </summary>

    static void Main()

    {

      // Configure Observer pattern

      ConcreteSubject s = new ConcreteSubject();

 

      s.Attach(new ConcreteObserver(s, "X"));

      s.Attach(new ConcreteObserver(s, "Y"));

      s.Attach(new ConcreteObserver(s, "Z"));

 

      // Change subject and notify observers

      s.SubjectState = "ABC";

      s.Notify();

 

      // Wait for user

      Console.ReadKey();

    }

  }

 

  /// <summary>

  /// The 'Subject' abstract class

  /// </summary>

  abstract class Subject

  {

private List<Observer> _observers = new List<Observer>();

 

    public void Attach(Observer observer)

    {

      _observers.Add(observer);

    }

 

    public void Detach(Observer observer)

    {

      _observers.Remove(observer);

    }

 

    public void Notify()

    {

      foreach (Observer o in _observers)

      {

        o.Update();

      }

    }

  }

 

  /// <summary>

  /// The 'ConcreteSubject' class

  /// </summary>

  class ConcreteSubject : Subject

  {

    private string _subjectState;

 

    // Gets or sets subject state

    public string SubjectState

    {

      get { return _subjectState; }

      set { _subjectState = value; }

}

  }

 

  /// <summary>

  /// The 'Observer' abstract class

  /// </summary>

  abstract class Observer

  {

    public abstract void Update();

  }

 

  /// <summary>

  /// The 'ConcreteObserver' class

  /// </summary>

  class ConcreteObserver : Observer

  {

    private string _name;

    private string _observerState;

    private ConcreteSubject _subject;

 

    // Constructor

    public ConcreteObserver(

      ConcreteSubject subject, string name)

    {

      this._subject = subject;

      this._name = name;

    }

 

    public override void Update()

    {

      _observerState = _subject.SubjectState;

      Console.WriteLine("Observer {0}'s new state is {1}",

        _name, _observerState);

}

 

    // Gets or sets subject

    public ConcreteSubject Subject

    {

      get { return _subject; }

      set { _subject = value; }

    }

  }

}

Visitor

Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.

/ Visitor pattern -- Real World example

 

using System;

using System.Collections.Generic;

 

namespace DoFactory.GangOfFour.Visitor.RealWorld

{

  /// <summary>

  /// MainApp startup class for Real-World

  /// Visitor Design Pattern.

  /// </summary>

  class MainApp

  {

    /// <summary>

    /// Entry point into console application.

    ///

Find Your Next Great Read

Describe what you're looking for in as much detail as you'd like.
Our AI reads your request and finds the best matching books for you.

Showing results for ""

Popular searches:

Romance Mystery & Thriller Self-Help Sci-Fi Business