From d0d26df60551f716d196e90da8129aef8df0ca88 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 13 Mar 2023 11:44:32 +0900 Subject: [PATCH] Decorator Pattern --- .../decoratorPattern/Americano.java | 9 ++++ .../decoratorPattern/Coffee.java | 5 ++ .../decoratorPattern/Decorator.java | 16 ++++++ .../decoratorPattern/DecoratorMain.java | 51 +++++++++++++++++++ .../decoratorPattern/Latte.java | 14 +++++ .../decoratorPattern/Mocha.java | 14 +++++ .../design-pattern/decoratorPattern/README.md | 0 .../decoratorPattern/WhippedCream.java | 14 +++++ 8 files changed, 123 insertions(+) create mode 100644 oop-in-spring/practice/design-pattern/decoratorPattern/Americano.java create mode 100644 oop-in-spring/practice/design-pattern/decoratorPattern/Coffee.java create mode 100644 oop-in-spring/practice/design-pattern/decoratorPattern/Decorator.java create mode 100644 oop-in-spring/practice/design-pattern/decoratorPattern/DecoratorMain.java create mode 100644 oop-in-spring/practice/design-pattern/decoratorPattern/Latte.java create mode 100644 oop-in-spring/practice/design-pattern/decoratorPattern/Mocha.java create mode 100644 oop-in-spring/practice/design-pattern/decoratorPattern/README.md create mode 100644 oop-in-spring/practice/design-pattern/decoratorPattern/WhippedCream.java diff --git a/oop-in-spring/practice/design-pattern/decoratorPattern/Americano.java b/oop-in-spring/practice/design-pattern/decoratorPattern/Americano.java new file mode 100644 index 000000000..a28dfc34c --- /dev/null +++ b/oop-in-spring/practice/design-pattern/decoratorPattern/Americano.java @@ -0,0 +1,9 @@ +package decoratorPattern; + +public class Americano extends Coffee { + + @Override + public void brewing() { + System.out.println("Americano Coffee"); + } +} diff --git a/oop-in-spring/practice/design-pattern/decoratorPattern/Coffee.java b/oop-in-spring/practice/design-pattern/decoratorPattern/Coffee.java new file mode 100644 index 000000000..4ddbbedeb --- /dev/null +++ b/oop-in-spring/practice/design-pattern/decoratorPattern/Coffee.java @@ -0,0 +1,5 @@ +package decoratorPattern; + +public abstract class Coffee { + public abstract void brewing(); +} diff --git a/oop-in-spring/practice/design-pattern/decoratorPattern/Decorator.java b/oop-in-spring/practice/design-pattern/decoratorPattern/Decorator.java new file mode 100644 index 000000000..82804bc7c --- /dev/null +++ b/oop-in-spring/practice/design-pattern/decoratorPattern/Decorator.java @@ -0,0 +1,16 @@ +package decoratorPattern; + +// 여러가지 데코레이터의 상속 목적으로만 사용할 거라서 `abstract` class로 선언 +public abstract class Decorator extends Coffee { + + Coffee coffee; + + public Decorator(Coffee coffee) { + this.coffee = coffee; + } + + @Override + public void brewing() { + coffee.brewing(); + } +} diff --git a/oop-in-spring/practice/design-pattern/decoratorPattern/DecoratorMain.java b/oop-in-spring/practice/design-pattern/decoratorPattern/DecoratorMain.java new file mode 100644 index 000000000..ea2734c78 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/decoratorPattern/DecoratorMain.java @@ -0,0 +1,51 @@ +package decoratorPattern; + +import java.io.*; + +public class DecoratorMain { + + + public static void main(String[] args) throws FileNotFoundException { + Coffee coffee = new Americano(); + coffee.brewing(); + + Coffee latteCoffee = new Latte(new Americano()); + latteCoffee.brewing(); + + Coffee mochaCoffee = new Mocha(new Latte(new Americano())); + mochaCoffee.brewing(); + + + Coffee whippedCreamCoffee = new WhippedCream(new Mocha(new Latte(new Americano()))); + whippedCreamCoffee.brewing(); + + // 자바 API 속의 데코레이터 패턴 + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("a.out"))); + + /** + * public class FileInputStream extends InputStream { + * public FileInputStream(String name) throws FileNotFoundException { + * this(name != null ? new File(name) : null); + * } + * } + */ + + /*** + * public class InputStreamReader extends Reader { + * public InputStreamReader(InputStream in) { + * super(in); + * sd = StreamDecoder.forInputStreamReader(in, this, + * Charset.defaultCharset()); // ## check lock object + * } + * } + */ + + /** + * BufferedReader extends Reader { + * public BufferedReader(Reader in) { + * this(in, defaultCharBufferSize); + * } + * } + */ + } +} diff --git a/oop-in-spring/practice/design-pattern/decoratorPattern/Latte.java b/oop-in-spring/practice/design-pattern/decoratorPattern/Latte.java new file mode 100644 index 000000000..f5ba6c952 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/decoratorPattern/Latte.java @@ -0,0 +1,14 @@ +package decoratorPattern; + +public class Latte extends Decorator { + + public Latte(Coffee coffee) { + super(coffee); + } + + @Override + public void brewing() { + super.brewing(); + System.out.println("Adding Milk"); + } +} diff --git a/oop-in-spring/practice/design-pattern/decoratorPattern/Mocha.java b/oop-in-spring/practice/design-pattern/decoratorPattern/Mocha.java new file mode 100644 index 000000000..f26fc65e8 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/decoratorPattern/Mocha.java @@ -0,0 +1,14 @@ +package decoratorPattern; + +public class Mocha extends Decorator { + + public Mocha(Coffee coffee) { + super(coffee); + } + + @Override + public void brewing() { + super.brewing(); + System.out.println("Adding Mocha syrup"); + } +} diff --git a/oop-in-spring/practice/design-pattern/decoratorPattern/README.md b/oop-in-spring/practice/design-pattern/decoratorPattern/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/oop-in-spring/practice/design-pattern/decoratorPattern/WhippedCream.java b/oop-in-spring/practice/design-pattern/decoratorPattern/WhippedCream.java new file mode 100644 index 000000000..a9f50bc01 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/decoratorPattern/WhippedCream.java @@ -0,0 +1,14 @@ +package decoratorPattern; + +public class WhippedCream extends Decorator { + + public WhippedCream(Coffee coffee) { + super(coffee); + } + + @Override + public void brewing() { + super.brewing(); + System.out.println("Adding Whipping Cream"); + } +}