diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/CPU.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/CPU.java new file mode 100644 index 0000000..ddf12db --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/CPU.java @@ -0,0 +1,16 @@ +package pl.mperor.lab.java.design.pattern.structural.facade; + +public class CPU { + + public void freeze() { + System.out.println("CPU is freezing"); + } + + public void jump(long position) { + System.out.println("CPU jumped to " + position); + } + + public void execute() { + System.out.println("CPU is executing"); + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/Computer.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/Computer.java new file mode 100644 index 0000000..c157a36 --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/Computer.java @@ -0,0 +1,6 @@ +package pl.mperor.lab.java.design.pattern.structural.facade; + +public interface Computer { + + void start(); +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/ComputerFacade.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/ComputerFacade.java new file mode 100644 index 0000000..5208e13 --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/ComputerFacade.java @@ -0,0 +1,27 @@ +package pl.mperor.lab.java.design.pattern.structural.facade; + +public class ComputerFacade implements Computer { + + private final static long BOOT_ADDRESS = 0x0; + private final static long BOOT_SECTOR = 0xF; + private final static int SECTOR_SIZE = 16; + + private final CPU processor; + private final Memory ram; + private final HardDrive hd; + + public ComputerFacade() { + this.processor = new CPU(); + this.ram = new Memory(); + this.hd = new HardDrive(); + } + + @Override + public void start() { + processor.freeze(); + byte[] data = hd.read(BOOT_SECTOR, SECTOR_SIZE); + ram.load(BOOT_ADDRESS, data); + processor.jump(BOOT_ADDRESS); + processor.execute(); + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/HardDrive.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/HardDrive.java new file mode 100644 index 0000000..2f234fa --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/HardDrive.java @@ -0,0 +1,9 @@ +package pl.mperor.lab.java.design.pattern.structural.facade; + +public class HardDrive { + + public byte[] read(long lba, int size) { + System.out.println(size + " bits is reading from " + lba); + return new byte[size]; + } +} diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/Memory.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/Memory.java new file mode 100644 index 0000000..0b914e9 --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/facade/Memory.java @@ -0,0 +1,8 @@ +package pl.mperor.lab.java.design.pattern.structural.facade; + +public class Memory { + + public void load(long position, byte[] data) { + System.out.println("Data are loading"); + } +} diff --git a/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/facade/ComputerFacadeTest.java b/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/facade/ComputerFacadeTest.java new file mode 100644 index 0000000..409d68f --- /dev/null +++ b/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/facade/ComputerFacadeTest.java @@ -0,0 +1,19 @@ +package pl.mperor.lab.java.design.pattern.structural.facade; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pl.mperor.lab.common.TestUtils; + +public class ComputerFacadeTest { + + @Test + public void shouldAllowToRunComputerInVerySimpleWayHidingItsComplexity() { + var out = TestUtils.setTempSystemOut(); + Computer pc = new ComputerFacade(); + pc.start(); + Assertions.assertNotNull(pc); + Assertions.assertTrue(out.all().contains("CPU is executing")); + TestUtils.resetSystemOut(); + } + +} \ No newline at end of file