Skip to content

Commit ed65563

Browse files
authored
Add bridge design pattern with test scenario (#46)
1 parent 1f57125 commit ed65563

File tree

7 files changed

+77
-0
lines changed

7 files changed

+77
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package pl.mperor.lab.java.design.pattern.structural.bridge;
2+
3+
public record Bus(Engine engine) implements Vehicle {
4+
5+
@Override
6+
public void run() {
7+
engine.start();
8+
System.out.println("Bus 🚌 is running!");
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package pl.mperor.lab.java.design.pattern.structural.bridge;
2+
3+
public record Car(Engine engine) implements Vehicle {
4+
5+
@Override
6+
public void run() {
7+
engine.start();
8+
System.out.println("Car 🚗 is running!");
9+
}
10+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package pl.mperor.lab.java.design.pattern.structural.bridge;
2+
3+
public record DieselEngine() implements Engine {
4+
5+
@Override
6+
public void start() {
7+
System.out.println("Diesel engine 🟢 has been started!");
8+
}
9+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package pl.mperor.lab.java.design.pattern.structural.bridge;
2+
3+
public sealed interface Engine permits DieselEngine, PetrolEngine {
4+
5+
void start();
6+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package pl.mperor.lab.java.design.pattern.structural.bridge;
2+
3+
public record PetrolEngine() implements Engine {
4+
5+
@Override
6+
public void start() {
7+
System.out.println("Petrol engine 🟢 has been started!");
8+
}
9+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package pl.mperor.lab.java.design.pattern.structural.bridge;
2+
3+
public sealed interface Vehicle permits Bus, Car {
4+
5+
void run();
6+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package pl.mperor.lab.java.design.pattern.structural.bridge;
2+
3+
import org.junit.jupiter.api.Assertions;
4+
import org.junit.jupiter.api.Test;
5+
import pl.mperor.lab.common.TestUtils;
6+
7+
public class VehicleBridgeTest {
8+
9+
@Test
10+
public void shouldAllowToCreateVehiclesWithDifferentEngines() {
11+
var out = TestUtils.setTempSystemOut();
12+
13+
var diselEngineCar = new Car(new DieselEngine());
14+
var petrolEngineBus = new Bus(new PetrolEngine());
15+
16+
diselEngineCar.run();
17+
petrolEngineBus.run();
18+
19+
var outLines = out.lines();
20+
Assertions.assertEquals("Diesel engine 🟢 has been started!", outLines.getFirst());
21+
Assertions.assertEquals("Car 🚗 is running!", outLines.getSecond());
22+
Assertions.assertEquals("Petrol engine 🟢 has been started!", outLines.getThird());
23+
Assertions.assertEquals("Bus 🚌 is running!", outLines.getForth());
24+
25+
TestUtils.resetSystemOut();
26+
}
27+
}

0 commit comments

Comments
 (0)