Skip to content

dharmarajrdr/Design-Patterns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into code but rather a description or template for how to solve a problem that can be used in many different situations. Design patterns help to speed up the development process by providing tested, proven development paradigms.

Key points about design patterns:

  1. Reusability: They promote code reuse and reduce redundancy.
  2. Best Practices: They encapsulate best practices and the experiences of developers.
  3. Efficiency: They help in writing well-structured and maintainable code, leading to better performance and easier debugging.

1. Creational Design Patterns: These patterns deal with object creation mechanisms, trying to create objects in a manner suitable to the situation.

S.No Pattern Problem Solution
1 Singleton Need only one instance of a class (e.g., config, logging). Ensures only one instance exists and provides global access to it.
2 Factory Method Don't want to specify the exact class to instantiate. Defines a method for creating objects in a subclass, leaving the choice of which object to instantiate to the subclass.
3 Abstract Factory Need families of related objects but want to switch between them easily. Provides an interface to create related objects without knowing their concrete classes.
4 Builder Object construction is complex with many optional parameters. Separates object construction from its representation, making it easy to create complex objects step by step.
5 Prototype Creating objects is costly (e.g., large or complex objects). Creates new objects by copying existing ones, reducing the cost of creation.

2. Structural Design Patterns: These patterns deal with object composition or how classes and objects can be composed to form larger structures.

S.No Pattern Problem Solution
1 Adapter Two incompatible interfaces need to work together. Converts one interface into another so incompatible classes can work together.
2 Bridge Tight coupling between abstraction and implementation. Decouples abstraction from implementation, allowing both to vary independently.
3 Composite Need to treat individual objects and groups uniformly (e.g., file systems). Composes objects into tree structures to represent part-whole hierarchies, treating both individual and composite objects uniformly.
4 Decorator Need to add functionality dynamically without modifying the original code. Wraps the object with additional behavior dynamically while keeping the original object's interface intact.
5 Facade Complex subsystems with too many interfaces make usage hard. Provides a simplified interface to a larger body of code, making it easier to use.
6 Flyweight Many similar objects consume too much memory (e.g., rendering text). Shares common parts of objects to save memory while maintaining the unique parts.
7 Proxy Need controlled access to an object (e.g., lazy loading, security). Provides a placeholder for another object to control access, reduce cost, or add functionality.

3. Behavioral Design Patterns: These patterns deal with object interaction and responsibility. They help in defining communication between objects and the flow of control in a program.

S.No Pattern Problem Solution
1 Strategy Need to switch between different algorithms easily. Encapsulates algorithms in separate classes, allowing them to be swapped at runtime without altering the client code.
2 Observer Want to notify multiple objects when one object changes its state. Allows an object (subject) to notify a group of observer objects automatically when its state changes.
3 Command Need to encapsulate requests as objects to handle undo, logging, etc. Encapsulates a request as an object, allowing parameterization, queuing, and undoable operations.
4 Chain of Responsibility Multiple objects could handle a request, but which one should? Passes the request along a chain of handlers, allowing each handler to process or pass it further.
5 Mediator Too many direct interactions between objects lead to tight coupling. Introduces a mediator to centralize communication between objects, reducing coupling.
6 Memento Need to restore an object to a previous state (e.g., undo functionality). Captures the object’s state in a memento so it can be restored later.
7 State Object behavior changes based on its state. Encapsulates state-specific behavior into separate classes, allowing the object to change behavior at runtime by changing its state.
8 Template Method Common algorithm structure, but steps may vary. Defines the skeleton of an algorithm in a base class, allowing subclasses to define or override specific steps.
9 Visitor Need to perform new operations on a set of objects without modifying them. Separates an algorithm from the object structure, allowing new operations to be added without changing the objects.
10 Interpreter Need to interpret or evaluate language grammar (e.g., SQL, regex). Defines a grammar and provides a way to evaluate sentences in that grammar, encapsulating the logic for interpreting expressions.

Each design pattern provides a solution to a problem in a specific context and can be adapted to fit the needs of the situation at hand.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages