Singleton Pattern:: Example

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

1.

Singleton Pattern:

The Singleton Pattern ensures that a class has only one instance and provides a global
point of access to that instance. It is useful when exactly one object is needed to
coordinate actions across the system.

Example:

javaCopy code
public class Singleton { private static Singleton instance; private Singleton() { // Private constructor to prevent
instantiation } public static Singleton getInstance() { if (instance == null ) { instance = new Singleton (); }
return instance; } }

2. Factory Method Pattern:

The Factory Method Pattern defines an interface for creating an object but leaves the
choice of its type to the subclasses, creating an instance of a class in its subclass.

Example:

javaCopy code
public interface Product { void create() ; } public class ConcreteProduct implements Product { @Override
public void create() { System.out.println( "ConcreteProduct created" ); } } public interface Creator { Product
factoryMethod() ; } public class ConcreteCreator implements Creator { @Override public Product
factoryMethod() { return new ConcreteProduct (); } }

3. Observer Pattern:

The Observer Pattern defines a one-to-many dependency between objects, so that


when one object changes state, all its dependents are notified and updated
automatically.

Example:

javaCopy code
import java.util.ArrayList; import java.util.List; public interface Observer { void update(String message) ; }
public class ConcreteObserver implements Observer { private String name; public ConcreteObserver(String
name) { this .name = name; } @Override public void update(String message) { System.out.println(name + "
received message: " + message); } } public class Subject { private List<Observer> observers = new
ArrayList <>(); public void addObserver(Observer observer) { observers.add(observer); } public void
removeObserver(Observer observer) { observers.remove(observer); } public void notifyObservers(String
message) { for (Observer observer : observers) { observer.update(message); } } }
4. Decorator Pattern:

The Decorator Pattern attaches additional responsibilities to an object dynamically.


Decorators provide a flexible alternative to subclassing for extending functionality.

Example:

javaCopy code
public interface Component { void operation() ; } public class ConcreteComponent implements Component {
@Override public void operation() { System.out.println( "ConcreteComponent operation" ); } } public abstract
class Decorator implements Component { protected Component component; public Decorator(Component
component) { this .component = component; } @Override public void operation() { component.operation(); } }
public class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component component) {
super (component); } @Override public void operation() { super .operation();
System.out.println( "ConcreteDecorator operation" ); } }

5. Strategy Pattern:

The Strategy Pattern defines a family of algorithms, encapsulates each one, and makes
them interchangeable. It allows the client to choose the appropriate algorithm at
runtime.

Example:

javaCopy code
public interface Strategy { void execute() ; } public class ConcreteStrategyA implements Strategy {
@Override public void execute() { System.out.println( "Executing strategy A" ); } } public class
ConcreteStrategyB implements Strategy { @Override public void execute() { System.out.println( "Executing
strategy B" ); } } public class Context { private Strategy strategy; public Context(Strategy strategy) {
this .strategy = strategy; } public void setStrategy(Strategy strategy) { this .strategy = strategy; } public void
executeStrategy() { strategy.execute(); } }

6. Adapter Pattern:

The Adapter Pattern allows the interface of an existing class to be used as another
interface. It is often used to make existing classes work with others without modifying
their source code.

Example:

javaCopy code
public interface Target { void request() ; } public class Adaptee { public void specificRequest()
{ System.out.println( "Specific request" ); } } public class Adapter implements Target { private Adaptee
adaptee; public Adapter(Adaptee adaptee) { this .adaptee = adaptee; } @Override public void request()
{ adaptee.specificRequest(); } }

7. Command Pattern:

The Command Pattern encapsulates a request as an object, thereby allowing users to


parameterize clients with queues, requests, and operations. It also allows for support of
undoable operations.

Example:

javaCopy code
public interface Command { void execute() ; } public class ConcreteCommand implements Command {
private Receiver receiver; public ConcreteCommand(Receiver receiver) { this .receiver = receiver; } @Override
public void execute() { receiver.action(); } } public class Receiver { public void action()
{ System.out.println( "Receiver's action" ); } } public class Invoker { private Command command; public void
setCommand(Command command) { this .command = command; } public void executeCommand()
{ command.execute(); } }

These design patterns represent solutions to common problems encountered in


software design.

You might also like