17
Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern comes under structural pattern as this pattern decouples implementation class and abstract class by providing a bridge structure between them. This pattern involves an interface which acts as a bridge which makes the functionality of concrete classes independent from interface implementer classes. Both types of classes can be altered structurally without affecting each other.

Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Embed Size (px)

DESCRIPTION

Structure

Citation preview

Page 1: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

BridgeBridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern comes under structural pattern as this pattern decouples implementation class and abstract class by providing a bridge structure between them. This pattern involves an interface which acts as a bridge which makes the functionality of concrete classes independent from interface implementer classes. Both types of classes can be altered structurally without affecting each other.

Page 2: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Applicability

Use the Bridge pattern when· you want to avoid a permanent binding between an abstraction and

its Implementation.· both the abstractions and their implementations should be extensible

by Subclassing· changes in the implementation of an abstraction should have no

impact on clients; that is, their code should not have to be recompiled.

· (C++) you want to hide the implementation of an abstraction completely from Clients

· you want to share an implementation among multiple objects (perhaps using reference counting), and this fact should be hidden from the client

Page 3: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Structure

Page 4: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Participants. Abstractiono defines the abstraction's interface.o maintains a reference to an object of type Implementor.· RefinedAbstractiono Extends the interface defined by Abstraction.· Implementoro defines the interface for implementation classes. This interfacedoesn't have to correspond exactly to Abstraction's interface; infact the two interfaces can be quite different. Typically theImplementor interface provides only primitive operations, andAbstraction defines higher-level operations based on theseprimitives.· ConcreteImplementoro implements the Implementor interface and defines its concreteimplementation.

Page 5: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Consequences

• Decoupling interface and implementation• Improved extensibility• Hiding implementation details from clients

Page 6: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Implementation

• We have a DrawAPI interface which is acting as a bridge implementer and concrete classes RedCircle, GreenCircle implementing the DrawAPI interface. Shape is an abstract class and will use object of DrawAPI. BridgePatternDemo, our demo class, will use Shape class to draw different colored circle.

Page 7: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern
Page 8: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Step 1 Create bridge implementer interface.DrawAPI.java public interface DrawAPI { public void drawCircle(int radius, int x, int y); } Step 2 Create concrete bridge implementer classes implementing the DrawAPI interface. RedCircle.java public class RedCircle implements DrawAPI { @Override public void drawCircle(int radius, int x, int y) { System.out.println("Drawing Circle[ color: red, radius: " + radius +", x: " +x+", "+ y +"]"); } }

Page 9: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

GreenCircle.java public class GreenCircle implements DrawAPI { @Override public void drawCircle(int radius, int x, int y) { System.out.println("Drawing Circle[ color: green, radius: " + radius +", x: " +x+", "+ y +"]"); } } Step 3 Create an abstract class Shape using the DrawAPI interface. Shape.java public abstract class Shape { protected DrawAPI drawAPI; protected Shape(DrawAPI drawAPI){

Page 10: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

this.drawAPI = drawAPI; } public abstract void draw(); } Step 4 Create concrete class implementing the Shape interface. Circle.java public class Circle extends Shape { private int x, y, radius; public Circle(int x, int y, int radius, DrawAPI drawAPI) { super(drawAPI); this.x = x; this.y = y; this.radius = radius; } public void draw() { drawAPI.drawCircle(radius,x,y); } }

Page 11: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Step 5 Use the Shape and DrawAPI classes to draw different colored circles. BridgePatternDemo.java public class BridgePatternDemo { public static void main(String[] args) { Shape redCircle = new Circle(100,100, 10, new RedCircle()); Shape greenCircle = new Circle(100,100, 10, new GreenCircle()); redCircle.draw(); greenCircle.draw(); } } Step 6 Verify the output. Drawing Circle[ color: red, radius: 10, x: 100, 100] Drawing Circle[ color: green, radius: 10, x: 100, 100]

Page 12: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Decorator

• Decorator pattern allows a user to add new functionality to an existing object without altering its structure. This type of design pattern comes under structural pattern as this pattern acts as a wrapper to existing class.

• This pattern creates a decorator class which wraps the original class and provides additional functionality keeping class methods signature intact.

Page 13: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Applicability

Use Decorator· to add responsibilities to individual objects dynamically

and transparently, that is, without affecting other objects.

· for responsibilities that can be withdrawn.· when extension by subclassing is impractical. Sometimes

a large number of independent extensions are possible and would produce an explosion of subclasses to support every combination. Or a class definition may be hidden or otherwise unavailable for subclassing.

Page 14: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Structure

Page 15: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Participants· Componento defines the interface for objects that can have responsibilitiesadded to them dynamically.· ConcreteComponent o defines an object to which additional responsibilities can beattached.· Decoratoro maintains a reference to a Component object and defines an interfacethat conforms to Component's interface.· ConcreteDecorator o adds responsibilities to the component.

Page 16: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern

Implementation

We are going to create a Shape interface and concrete classes implementing the Shape interface. We will then create an abstract decorator class ShapeDecorator implementing the Shape interface and having Shape object as its instance variable.

RedShapeDecorator is concrete class implementing ShapeDecorator.

DecoratorPatternDemo, our demo class, will use RedShapeDecorator to decorate Shape objects.

Page 17: Bridge Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern