From bf5f1582d10528b81fbbea3355f220afc7126151 Mon Sep 17 00:00:00 2001 From: kim Date: Tue, 12 Jan 2021 16:58:21 +0900 Subject: [PATCH] Builder Pattern (chaining) --- design-pattern/src/Builder/Builder | 5 ++- .../src/Builder/Builder2/Computer.java | 43 +++++++++++++++++++ .../src/Builder/Builder2/ComputerBuilder.java | 36 ++++++++++++++++ design-pattern/src/Builder/Builder2/Main.java | 16 +++++++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 design-pattern/src/Builder/Builder2/Computer.java create mode 100644 design-pattern/src/Builder/Builder2/ComputerBuilder.java create mode 100644 design-pattern/src/Builder/Builder2/Main.java diff --git a/design-pattern/src/Builder/Builder b/design-pattern/src/Builder/Builder index d08e57c4..25e78872 100644 --- a/design-pattern/src/Builder/Builder +++ b/design-pattern/src/Builder/Builder @@ -1,3 +1,6 @@ Builder Pattern - 복잡한 단계가 필요한 인스턴스 생성을 빌드 패턴을 통해서 구현 - - 복잡한 단계를 거쳐야 생성되는 객체의 구현을 서브 클래스에게 넘겨주는 패턴 \ No newline at end of file + - 복잡한 단계를 거쳐야 생성되는 객체의 구현을 서브 클래스에게 넘겨주는 패턴 + + - 많은 변수를 가진 객체의 생성을 가독성 높도록 + - 많은 인자를 가진 객체 생성을 다른 객체의 도움으로 생성 diff --git a/design-pattern/src/Builder/Builder2/Computer.java b/design-pattern/src/Builder/Builder2/Computer.java new file mode 100644 index 00000000..1d159199 --- /dev/null +++ b/design-pattern/src/Builder/Builder2/Computer.java @@ -0,0 +1,43 @@ +package Builder.Builder2; + +public class Computer { + + private String cpu; + private String ram; + private String storage; + + @Override + public String toString() { + return cpu + ", " + ram + ", " + storage; + } + + public Computer(String cpu, String ram, String storage) { + this.cpu = cpu; + this.ram = ram; + this.storage = storage; + } + + public String getCpu() { + return cpu; + } + + public void setCpu(String cpu) { + this.cpu = cpu; + } + + public String getRam() { + return ram; + } + + public void setRam(String ram) { + this.ram = ram; + } + + public String getStorage() { + return storage; + } + + public void setStorage(String storage) { + this.storage = storage; + } +} diff --git a/design-pattern/src/Builder/Builder2/ComputerBuilder.java b/design-pattern/src/Builder/Builder2/ComputerBuilder.java new file mode 100644 index 00000000..4105d0e9 --- /dev/null +++ b/design-pattern/src/Builder/Builder2/ComputerBuilder.java @@ -0,0 +1,36 @@ +package Builder.Builder2; + +public class ComputerBuilder { + + private Computer computer; + + private ComputerBuilder() { + computer = new Computer("default", "default", "default"); + } + + public static ComputerBuilder start() { + return new ComputerBuilder(); + } + public static ComputerBuilder startWithCpu(String cpu) { + ComputerBuilder builder = new ComputerBuilder(); + builder.computer.setCpu(cpu); + return builder; + } + + public ComputerBuilder setCpu(String cpu) { + computer.setCpu(cpu); + return this; + } + public ComputerBuilder setRam(String ram) { + computer.setRam(ram); + return this; + } + public ComputerBuilder setStorage(String storage) { + computer.setStorage(storage); + return this; + } + public Computer build() { + return this.computer; + } + +} diff --git a/design-pattern/src/Builder/Builder2/Main.java b/design-pattern/src/Builder/Builder2/Main.java new file mode 100644 index 00000000..630d1b5c --- /dev/null +++ b/design-pattern/src/Builder/Builder2/Main.java @@ -0,0 +1,16 @@ +package Builder.Builder2; + +public class Main { + + public static void main(String[] args) { + Computer computer = ComputerBuilder +// .start() +// .setCpu("i7") + .startWithCpu("i7") + .setRam("8g") + .setStorage("256g ssd") + .build(); + + System.out.println(computer.toString()); + } +}