diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Bus.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Bus.java new file mode 100644 index 0000000..01df4dd --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Bus.java @@ -0,0 +1,10 @@ +package pl.mperor.lab.java.design.pattern.structural.bridge; + +public record Bus(Engine engine) implements Vehicle { + + @Override + public void run() { + engine.start(); + System.out.println("Bus 🚌 is running!"); + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Car.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Car.java new file mode 100644 index 0000000..32a484d --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Car.java @@ -0,0 +1,10 @@ +package pl.mperor.lab.java.design.pattern.structural.bridge; + +public record Car(Engine engine) implements Vehicle { + + @Override + public void run() { + engine.start(); + System.out.println("Car 🚗 is running!"); + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/DieselEngine.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/DieselEngine.java new file mode 100644 index 0000000..9030398 --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/DieselEngine.java @@ -0,0 +1,9 @@ +package pl.mperor.lab.java.design.pattern.structural.bridge; + +public record DieselEngine() implements Engine { + + @Override + public void start() { + System.out.println("Diesel engine 🟢 has been started!"); + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Engine.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Engine.java new file mode 100644 index 0000000..e4d239c --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Engine.java @@ -0,0 +1,6 @@ +package pl.mperor.lab.java.design.pattern.structural.bridge; + +public sealed interface Engine permits DieselEngine, PetrolEngine { + + void start(); +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/PetrolEngine.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/PetrolEngine.java new file mode 100644 index 0000000..5be6e6a --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/PetrolEngine.java @@ -0,0 +1,9 @@ +package pl.mperor.lab.java.design.pattern.structural.bridge; + +public record PetrolEngine() implements Engine { + + @Override + public void start() { + System.out.println("Petrol engine 🟢 has been started!"); + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Vehicle.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Vehicle.java new file mode 100644 index 0000000..a2944dc --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge/Vehicle.java @@ -0,0 +1,6 @@ +package pl.mperor.lab.java.design.pattern.structural.bridge; + +public sealed interface Vehicle permits Bus, Car { + + void run(); +} diff --git a/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/bridge/VehicleBridgeTest.java b/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/bridge/VehicleBridgeTest.java new file mode 100644 index 0000000..b6ed346 --- /dev/null +++ b/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/bridge/VehicleBridgeTest.java @@ -0,0 +1,27 @@ +package pl.mperor.lab.java.design.pattern.structural.bridge; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pl.mperor.lab.common.TestUtils; + +public class VehicleBridgeTest { + + @Test + public void shouldAllowToCreateVehiclesWithDifferentEngines() { + var out = TestUtils.setTempSystemOut(); + + var diselEngineCar = new Car(new DieselEngine()); + var petrolEngineBus = new Bus(new PetrolEngine()); + + diselEngineCar.run(); + petrolEngineBus.run(); + + var outLines = out.lines(); + Assertions.assertEquals("Diesel engine 🟢 has been started!", outLines.getFirst()); + Assertions.assertEquals("Car 🚗 is running!", outLines.getSecond()); + Assertions.assertEquals("Petrol engine 🟢 has been started!", outLines.getThird()); + Assertions.assertEquals("Bus 🚌 is running!", outLines.getForth()); + + TestUtils.resetSystemOut(); + } +} \ No newline at end of file