The Bridge design pattern is a structural pattern used to decouple an abstraction from its implementation so that the two can vary independently. This pattern involves an interface which acts as a bridge between the abstraction and its implementation classes. It's particularly useful for scenarios where an abstraction can have multiple implementations.
To demonstrate the Bridge pattern in Java, let's consider a simple example of a TV remote control (the abstraction) and different types of TVs (the implementations). We'll create a hierarchy where the remote control can work with any TV type without being tightly coupled to a specific TV implementation.
Here's how you can structure the classes:
1. RemoteControl.java: An abstract class representing the abstraction. It contains a reference to a TV interface.
2. TV.java: An interface representing the implementer. This will be implemented by different types of TVs.
3. SonyTV.java and SamsungTV.java: Concrete implementations of the TV interface.
4. Main.java: Contains the main method to demonstrate the use of the Bridge pattern.
Step-by-Step Implementation
1. TV.java (Interface) This interface declares methods that will be implemented by concrete TV classes.
public interface TV { void on(); void off(); void tuneChannel(int channel); }
2. SonyTV.java (Concrete Implementation)
Implements the `TV` interface, representing a specific type of TV.
public class SonyTV implements TV { public void on() { System.out.println("Sony TV: ON"); } public void off() { System.out.println("Sony TV: OFF"); } public void tuneChannel(int channel) { System.out.println("Sony TV: Tuned to channel " + channel); } }
3. SamsungTV.java (Concrete Implementation)
Another implementation of the `TV` interface.
public class SamsungTV implements TV { public void on() { System.out.println("Samsung TV: ON"); } public void off() { System.out.println("Samsung TV: OFF"); } public void tuneChannel(int channel) { System.out.println("Samsung TV: Tuned to channel " + channel); } }
4. RemoteControl.java (Abstraction)
This abstract class represents a generic remote control. It holds a reference to a `TV` object and delegates the TV-related operations to it.
public abstract class RemoteControl { protected TV tv; public RemoteControl(TV tv) { this.tv = tv; } public abstract void turnOn(); public abstract void turnOff(); public abstract void setChannel(int channel); }
5. Main.java (Demonstration)
This class demonstrates the use of the Bridge pattern.
public class Main { public static void main(String[] args) { TV sonyTv = new SonyTV(); RemoteControl sonyRemote = new ConcreteRemote(sonyTv); sonyRemote.turnOn(); sonyRemote.setChannel(9); sonyRemote.turnOff(); TV samsungTv = new SamsungTV(); RemoteControl samsungRemote = new ConcreteRemote(samsungTv); samsungRemote.turnOn(); samsungRemote.setChannel(5); samsungRemote.turnOff(); } } class ConcreteRemote extends RemoteControl { public ConcreteRemote(TV tv) { super(tv); } public void turnOn() { tv.on(); } public void turnOff() { tv.off(); } public void setChannel(int channel) { tv.tuneChannel(channel); } }
Order of Creation
1. Create the TV interface. 2. Implement the `TV` interface in SonyTV and SamsungTV.
3. Create the RemoteControl abstract class.
4. Implement a concrete remote control in ConcreteRemote.
5. Use the `Main` class to demonstrate the pattern.
Output When Running the Code
When you run the Main.java, you should see output demonstrating the interaction between the remote controls and their respective TVs:
Sony TV: ON Sony TV: Tuned to channel 9 Sony TV: OFF Samsung TV: ON Samsung TV: Tuned to channel 5 Samsung TV: OFFThis output shows how the Bridge pattern allows different types of TVs to be controlled by a generic remote control without tightly coupling the remote control class to specific TV classes.
No comments:
Post a Comment