Singleton Pattern:: Example
Singleton Pattern:: Example
Singleton Pattern:: Example
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; } }
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:
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:
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:
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(); } }