From f28b106ad80955596eeb510432c56ea36ca494ac Mon Sep 17 00:00:00 2001 From: mperor Date: Sun, 19 Jan 2025 18:50:09 +0100 Subject: [PATCH] Add adapter implementation with unit test --- .../structural/adapter/AnalogSignal.java | 7 +++++ .../structural/adapter/ComputerMonitor.java | 9 +++++++ .../structural/adapter/DigitalSignal.java | 7 +++++ .../adapter/DigitalToAnalogSignalAdapter.java | 15 +++++++++++ .../pattern/structural/adapter/VideoCard.java | 11 ++++++++ .../DigitalToAnalogSignalAdapterTest.java | 27 +++++++++++++++++++ 6 files changed, 76 insertions(+) create mode 100644 DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/AnalogSignal.java create mode 100644 DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/ComputerMonitor.java create mode 100644 DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalSignal.java create mode 100644 DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalToAnalogSignalAdapter.java create mode 100644 DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/VideoCard.java create mode 100644 DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalToAnalogSignalAdapterTest.java diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/AnalogSignal.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/AnalogSignal.java new file mode 100644 index 0000000..e7e029e --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/AnalogSignal.java @@ -0,0 +1,7 @@ +package pl.mperor.lab.java.design.pattern.structural.adapter; + +@FunctionalInterface +public interface AnalogSignal { + + void transmitAnalog(); +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/ComputerMonitor.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/ComputerMonitor.java new file mode 100644 index 0000000..926effa --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/ComputerMonitor.java @@ -0,0 +1,9 @@ +package pl.mperor.lab.java.design.pattern.structural.adapter; + +public record ComputerMonitor() { + + void display(AnalogSignal analogSignal) { + System.out.println("🖥️ Computer monitor displaying ..."); + analogSignal.transmitAnalog(); + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalSignal.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalSignal.java new file mode 100644 index 0000000..e09c2c6 --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalSignal.java @@ -0,0 +1,7 @@ +package pl.mperor.lab.java.design.pattern.structural.adapter; + +@FunctionalInterface +public interface DigitalSignal { + + void transmitDigital(); +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalToAnalogSignalAdapter.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalToAnalogSignalAdapter.java new file mode 100644 index 0000000..879e37e --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalToAnalogSignalAdapter.java @@ -0,0 +1,15 @@ +package pl.mperor.lab.java.design.pattern.structural.adapter; + +public class DigitalToAnalogSignalAdapter implements AnalogSignal { + + private final DigitalSignal digitalSignal; + + public DigitalToAnalogSignalAdapter(DigitalSignal digitalSignal) { + this.digitalSignal = digitalSignal; + } + + @Override + public void transmitAnalog() { + digitalSignal.transmitDigital(); + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/VideoCard.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/VideoCard.java new file mode 100644 index 0000000..337e1de --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter/VideoCard.java @@ -0,0 +1,11 @@ +package pl.mperor.lab.java.design.pattern.structural.adapter; + +import java.util.function.Consumer; + +public record VideoCard() { + + public void render(Consumer consumer) { + DigitalSignal renderedSignal = () -> System.out.println("Video card rendered signal 🎲"); + consumer.accept(renderedSignal); + } +} diff --git a/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalToAnalogSignalAdapterTest.java b/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalToAnalogSignalAdapterTest.java new file mode 100644 index 0000000..c4f288b --- /dev/null +++ b/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/adapter/DigitalToAnalogSignalAdapterTest.java @@ -0,0 +1,27 @@ +package pl.mperor.lab.java.design.pattern.structural.adapter; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pl.mperor.lab.common.TestUtils; + +public class DigitalToAnalogSignalAdapterTest { + + @Test + public void adapterShouldAllowToTransformDigitalSignalToAnalogSignal() { + var out = TestUtils.setTempSystemOut(); + + var monitor = new ComputerMonitor(); + var videoCard = new VideoCard(); + + videoCard.render(digitalSignal -> + monitor.display(new DigitalToAnalogSignalAdapter(digitalSignal)) + ); + + var outLines = out.lines(); + Assertions.assertEquals("🖥️ Computer monitor displaying ...", outLines.getFirst()); + Assertions.assertEquals("Video card rendered signal 🎲", outLines.getSecond()); + + TestUtils.resetSystemOut(); + } + +} \ No newline at end of file