Master technical and career interviews with structured answers—short definition, real examples, pitfalls, and how to answer in 60–90 seconds.
Answer: The Facade makes the system more readable. If the subsystem's complexity changes, the facade can be updated without affecting the client code. What interviewers expect A clear definition tied to GoF Patterns in G…
The Facade Pattern enables the user to work with a single entry point (i.e., the HomeTheaterFacade), which internally delegates tasks to the complex subsystem classes. This makes the system much easier to use while hidin…
The Facade class simplifies interactions with the subsystem by providing a unified interface for the user. It wraps the complex subsystem and provides higher-level methods that internally call the appropriate subsystem m…
Add functionality to dynamically change the properties of the decorated object. For instance, you could add a feature to customize the size of the coffee (Small, Medium, Large) which would change both the cost and descri…
Answer: In text editors, the Decorator Pattern could be used for adding formatting options to text (bold, italic, underline) dynamically, without needing separate classes for each combination of formatting. What intervie…
Answer: The original SimpleCoffee class remains unchanged, which means you don’t need to touch existing code. The new functionality is added without altering or subclassing the core class. What interviewers expect A clea…
The CoffeeDecorator class is abstract, and all concrete decorators (MilkDecorator, SugarDecorator) extend this class. The decorator wraps the SimpleCoffee object (or other decorated objects) and enhances or alters its be…
Answer: SimpleCoffee is the core object that implements ICoffee. It has a fixed price and a basic description. This is the base coffee that we will add features to dynamically. What interviewers expect A clear definition…
Answer: You can extend the file system to support additional metadata for each file or directory, such as size, creation date, and file type. This could be added as properties in the File and Directory classes. What inte…
The Composite Pattern can also be used in organizational structures, where departments (composites) contain teams or employees (individuals), and both can be treated as "components" with a common interface for operations…
Answer: The recursive structure makes it easy to manage hierarchical data. For example, when displaying the contents of a directory, you don’t need to worry about whether the child is a file or a subdirectory. What inter…
The File class represents the leaf in the tree structure. It is an individual component (a file) and implements the ShowInfo() method to display its details. public class File : IFileSystemComponent { private string _nam…
You can combine multiple commands into a composite command. For example, if the user performs a series of actions (like adding text, changing fonts, and changing colors), you can encapsulate all of those actions into a s…
Answer: New types of loggers can be added in the future (e.g., DatabaseLogger, CloudLogger) by simply creating new factory subclasses without modifying existing client code. What interviewers expect A clear definition ti…
The TextEditor maintains a stack of executed commands. When the Undo() method is called, it pops the most recent command from the stack and calls its Undo() method, which reverts the action performed by the command (remo…
The AddTextCommand is a concrete implementation of the ICommand interface. It encapsulates the request to add text to the document. The Execute() method adds the specified text to the document, and the Undo() method remo…
Answer: .LogMessage(...)). This continues until a handler processes the message or the chain is exhausted. Key Benefits of the Chain of Responsibility Pattern: What interviewers expect A clear definition tied to GoF Patt…
The InfoLogger and ErrorLogger are concrete handlers that implement the Logger class. Each handler checks if it can handle a particular log level (e.g., Info or Error). If it can, it processes the log; otherwise, it pass…
Since each handler is responsible for a specific task (in this case, logging a specific level of message), it’s easier to modify or extend the system. For example, adding a new log level (e.g., Debug) would only require…
The Flyweight Pattern allows you to manage large quantities of similar objects efficiently. You can still modify the extrinsic state (e.g., the character's position) without impacting the shared intrinsic state. Real-Tim…
The IPizzaBuilder interface defines the steps for constructing a pizza. It includes methods for setting the dough, sauce, and adding toppings, as well as a Build() method to return the fully constructed pizza. public int…
Answer: The separation of concerns means that any changes to the rendering logic (e.g., upgrading the drawing API) do not affect the shape logic, and vice versa. This results in less risk of introducing bugs when making…
The IDrawingAPI interface defines the drawing method (DrawCircle in this case). Different concrete implementations of this interface will represent various drawing styles or technologies. public interface IDrawingAPI { v…
Follow: This pattern provides a clean, reusable way to bridge the gap between incompatible interfaces, making integration smoother and more manageable. Bridge Pattern: Real-Time Example - Drawing Application with Multipl…
The Adaptee class is the existing class that has a different interface from the one the client expects. In this case, it has a method SpecificRequest() that performs some action, but it does not conform to the ITarget in…
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: The Facade makes the system more readable. If the subsystem's complexity changes, the facade can be updated without affecting the client code.
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
the HomeTheaterFacade), which internally delegates tasks to the complex
subsystem classes. This makes the system much easier to use while hiding
unnecessary complexity.
Key Benefits of the Facade Pattern:
Gang of Four Patterns Design Patterns in C# · GoF Patterns
unified interface for the user. It wraps the complex subsystem and provides
higher-level methods that internally call the appropriate subsystem methods.
public class HomeTheaterFacade
{
private readonly Amplifier _amplifier;
private readonly DVDPlayer _dvdPlayer;
public HomeTheaterFacade(Amplifier amplifier, DVDPlayer
dvdPlayer)
{
_amplifier = amplifier;
_dvdPlayer = dvdPlayer;
}
public void WatchMovie(string movie)
{
_amplifier.On();
_dvdPlayer.Play(movie);
}
public void EndMovie()
{
_amplifier.Off();
}
}Gang of Four Patterns Design Patterns in C# · GoF Patterns
object. For instance, you could add a feature to customize the size of the
coffee (Small, Medium, Large) which would change both the cost and
description.
Visual Diagram:
+-------------------------+
| ICoffee | <-- Component Interface
+-------------------------+
/ \
+-------------------------+
| SimpleCoffee | <-- Concrete Component (Core Coffee)
+-------------------------+
+---------------------+ +----------------------+
| CoffeeDecorator |<--- | MilkDecorator |
+---------------------+ +----------------------+
| |
Follow:
+---------------------+ +----------------------+
| SugarDecorator | <-- | WhippedCreamDecorator |
+---------------------+ +----------------------+
SimpleCoffee.
Conclusion:
The Decorator Pattern provides a powerful and flexible way to extend the functionality of
objects at runtime. In real-time applications like customizing a coffee order, decorating UI
elements, or adding functionality to text, this pattern helps in achieving clean, modular, and
extensible code. You can add or remove features dynamically, ensuring that your base
classes remain unaltered and your system remains flexible for future extensions.
Facade Pattern: Real-Time Example - Simplifying a Home Theater
System
Definition:
The Facade Pattern provides a simplified interface to a complex subsystem, making it
easier for clients to interact with multiple components. It hides the complexity of the
subsystem and exposes only what is necessary, offering a higher-level interface to users.
Use Case:
A common example is a home theater system, where the user needs to interact with
multiple components like an amplifier, DVD player, or projector. The Facade Pattern
simplifies the process by providing a unified interface to these various components, making
the system easier to use.
Code Explanation:
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: In text editors, the Decorator Pattern could be used for adding formatting options to text (bold, italic, underline) dynamically, without needing separate classes for each combination of formatting.
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: The original SimpleCoffee class remains unchanged, which means you don’t need to touch existing code. The new functionality is added without altering or subclassing the core class.
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
(MilkDecorator, SugarDecorator) extend this class. The decorator
wraps the SimpleCoffee object (or other decorated objects) and enhances
or alters its behavior, like adding extra cost or modifying the description.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: SimpleCoffee is the core object that implements ICoffee. It has a fixed price and a basic description. This is the base coffee that we will add features to dynamically.
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: You can extend the file system to support additional metadata for each file or directory, such as size, creation date, and file type. This could be added as properties in the File and Directory classes.
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
departments (composites) contain teams or employees (individuals), and both
can be treated as "components" with a common interface for operations like
calculating total salary or generating reports.
Improvement Suggestions:
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: The recursive structure makes it easy to manage hierarchical data. For example, when displaying the contents of a directory, you don’t need to worry about whether the child is a file or a subdirectory.
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
component (a file) and implements the ShowInfo() method to display its
details.
public class File : IFileSystemComponent
{
private string _name;
public File(string name) => _name = name;
public void ShowInfo() => Console.WriteLine($"File: {_name}");
}Gang of Four Patterns Design Patterns in C# · GoF Patterns
example, if the user performs a series of actions (like adding text, changing
fonts, and changing colors), you can encapsulate all of those actions into a
single composite command that can be undone in one step.
Real-Time Use Case Example:
The Command Pattern is often used in:
the entire system can be undone or redone.
allowing for consistent handling of actions across the UI.
encapsulated as commands and undone when necessary.
Follow:
Visual Diagram:
Here's a simple visual diagram to understand the Command Pattern:
+-----------------+ +---------------------+
+------------------+
| TextEditor | ---> | AddTextCommand | ---> |
Document |
| (Invoker) | | (Concrete Command) | |
(Receiver) |
+-----------------+ +---------------------+
+------------------+
| |
+-----------+
+-------------------+
| Undo | |
AddText / RemoveText |
+-----------+
+-------------------+
The Command Pattern provides a flexible and scalable way to handle requests in
object-oriented systems, especially when you need to manage complex workflows,
implement undo/redo functionality, or decouple senders from receivers.
Composite Pattern: Real-Time Example - Building a File System
Scenario:
The Composite Pattern is used when you need to treat individual objects and compositions
of objects uniformly. This is particularly useful when you have a hierarchical structure, like a
file system, where files and directories can be treated in a similar manner.
In a file system:
Follow:
(children).
This pattern helps to simplify the management of hierarchical structures, making it easier to
handle both individual items and collections of items in a unified way.
Code Explanation:
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: New types of loggers can be added in the future (e.g., DatabaseLogger, CloudLogger) by simply creating new factory subclasses without modifying existing client code.
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Undo() method is called, it pops the most recent command from the stack
and calls its Undo() method, which reverts the action performed by the
command (removes the last added text).
Key Benefits of the Command Pattern:
Gang of Four Patterns Design Patterns in C# · GoF Patterns
interface. It encapsulates the request to add text to the document.
Undo() method removes that text.
public class AddTextCommand : ICommand
{
private readonly Document _document;
private readonly string _text;
public AddTextCommand(Document document, string text)
{
_document = document;
_text = text;
}
public void Execute() => _document.AddText(_text);
public void Undo() => _document.RemoveText(_text);
}Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: .LogMessage(...)). This continues until a handler processes the message or the chain is exhausted. Key Benefits of the Chain of Responsibility Pattern:
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
the Logger class. Each handler checks if it can handle a particular log level
(e.g., Info or Error). If it can, it processes the log; otherwise, it passes it along
to the next handler in the chain.
public class InfoLogger : Logger
{
protected override bool CanHandle(LogLevel level) => level ==
LogLevel.Info;
protected override void Handle(string message) =>
Console.WriteLine($"Info: {message}");
}
public class ErrorLogger : Logger
{
protected override bool CanHandle(LogLevel level) => level ==
LogLevel.Error;
protected override void Handle(string message) =>
Console.WriteLine($"Error: {message}");
}Gang of Four Patterns Design Patterns in C# · GoF Patterns
specific level of message), it’s easier to modify or extend the system. For
example, adding a new log level (e.g., Debug) would only require creating a
new handler for that level without affecting existing code.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
efficiently. You can still modify the extrinsic state (e.g., the character's
position) without impacting the shared intrinsic state.
Real-Time Use Case Examples:
Gang of Four Patterns Design Patterns in C# · GoF Patterns
includes methods for setting the dough, sauce, and adding toppings, as well
as a Build() method to return the fully constructed pizza.
public interface IPizzaBuilder
void SetDough(string dough);
void SetSauce(string sauce);
void AddTopping(string topping);
Pizza Build();
Gang of Four Patterns Design Patterns in C# · GoF Patterns
Answer: The separation of concerns means that any changes to the rendering logic (e.g., upgrading the drawing API) do not affect the shape logic, and vice versa. This results in less risk of introducing bugs when making changes.
In a production Gang of Four Patterns application, teams apply this when handling user-facing features or integration boundaries. For example, you might use it during a sprint where reliability and observability matter—logging metrics, validating edge cases, and documenting the decision in an ADR so future developers understand why the approach was chosen.
Tip: Practice aloud on Toolliyo mock interview or the Interview Q&A section before your real interview.
Gang of Four Patterns Design Patterns in C# · GoF Patterns
this case). Different concrete implementations of this interface will represent
various drawing styles or technologies.
public interface IDrawingAPI
{
void DrawCircle(double x, double y, double radius);
}Gang of Four Patterns Design Patterns in C# · GoF Patterns
Follow:
This pattern provides a clean, reusable way to bridge the gap between incompatible
interfaces, making integration smoother and more manageable.
Bridge Pattern: Real-Time Example - Drawing Application with Multiple
Styles
Scenario:
Imagine you are building a drawing application that allows users to draw different shapes
(like circles) in various styles. The Bridge Pattern is a great solution when you want to
decouple the shape abstraction from the rendering logic, allowing both the shapes and the
drawing styles to vary independently.
The Bridge Pattern separates the abstraction (the shape) from its implementation (the
drawing API), allowing you to modify the shape or the rendering technique without affecting
the other. This makes your code more flexible and maintainable.
Code Explanation:
Gang of Four Patterns Design Patterns in C# · GoF Patterns
one the client expects. In this case, it has a method SpecificRequest()
that performs some action, but it does not conform to the ITarget interface.
public class Adaptee
Follow:
public void SpecificRequest() => Console.WriteLine("Specific
request from Adaptee.");