


In Factory pattern, we create object without exposing the creation logic to the client and refer to newly created object using a common interface.
The main goal of the Factory Pattern is to define an interface for creating an object, but leave the choice of its type to the subclasses, creating the object without specifying its exact class. This pattern promotes loose coupling between the client code and the specific classes being instantiated.
The Prototype Pattern is a creational design pattern that allows the creation of new objects by copying an existing object, known as the prototype
Design Patterns (sourcemaking.com)
Creational design patterns
These design patterns are all about class instantiation. This pattern can be further divided into class-creation patterns and object-creational patterns. While class-creation patterns use inheritance effectively in the instantiation process, object-creation patterns use delegation effectively to get the job done.
· Abstract
Factory
Creates an instance of several families of classes
· Builder
Separates object construction from its representation
· Factory
Method
Creates an instance of several derived classes
· Object
Pool
Avoid expensive acquisition and release of resources by recycling objects that
are no longer in use
· Prototype
A fully initialized instance to be copied or cloned
· Singleton
A class of which only a single instance can exist
These design patterns are all about Class and Object composition. Structural class-creation patterns use inheritance to compose interfaces. Structural object-patterns define ways to compose objects to obtain new functionality.
· Adapter
Match interfaces of different classes
· Bridge
Separates an object’s interface from its implementation
· Composite
A tree structure of simple and composite objects
· Decorator
Add responsibilities to objects dynamically
· Facade
A single class that represents an entire subsystem
· Flyweight
A fine-grained instance used for efficient sharing
Private Class Data
Restricts accessor/mutator access
· Proxy
An object representing another object
These design patterns are all about Class's objects communication. Behavioral patterns are those patterns that are most specifically concerned with communication between objects.
· Chain of
responsibility
A way of passing a request between a chain of objects
· Command
Encapsulate a command request as an object
· Interpreter
A way to include language elements in a program
· Iterator
Sequentially access the elements of a collection
· Mediator
Defines simplified communication between classes
· Memento
Capture and restore an object's internal state
· Null
Object
Designed to act as a default value of an object
· Observer
A way of notifying change to a number of classes
State
Alter an object's behavior when its state changes
· Strategy
Encapsulates an algorithm inside a class
· Template
method
Defer the exact steps of an algorithm to a subclass
· Visitor
Defines a new operation to a class without change

Bridge Design Pattern - GeeksforGeeks
Bridge pattern decouple an abstraction from its implementation so that the two can vary independently.
Without Bridge Design Pattern

With Bridge Design Pattern

// Java code to demonstrate
// bridge design pattern
// abstraction in bridge pattern
abstract class Vehicle {
protected Workshop workShop1;
protected Workshop workShop2;
protected Vehicle(Workshop workShop1, Workshop workShop2)
{
this.workShop1
= workShop1;
this.workShop2
= workShop2;
}
abstract public void manufacture();
}
// Refine abstraction 1 in bridge pattern
class Car extends Vehicle {
public Car(Workshop workShop1, Workshop workShop2)
{
super(workShop1,
workShop2);
}
@Override
public void manufacture()
{
System.out.print("Car
");
workShop1.work();
workShop2.work();
}
}
// Refine abstraction 2 in bridge pattern
class Bike extends Vehicle {
public Bike(Workshop workShop1, Workshop workShop2)
{
super(workShop1,
workShop2);
}
@Override
public void manufacture()
{
System.out.print("Bike
");
workShop1.work();
workShop2.work();
}
}
// Implementer for bridge pattern
interface Workshop
{
abstract public void work();
}
// Concrete implementation 1 for bridge pattern
class Produce implements Workshop {
@Override
public void work()
{
System.out.print("Produced");
}
}
// Concrete implementation 2 for bridge pattern
class Assemble implements Workshop {
@Override
public void work()
{
System.out.print("
And");
System.out.println("
Assembled.");
}
}
// Demonstration of bridge design pattern
class BridgePattern {
public static void main(String[] args)
{
Vehicle vehicle1 =
new Car(new Produce(), new Assemble());
vehicle1.manufacture();
Vehicle vehicle2 =
new Bike(new Produce(), new Assemble());
vehicle2.manufacture();
}
Output :
Car Produced And Assembled.
Bike Produced And Assembled.































