From bb3495f63624996374688a31004f64ee7d420cf2 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Thu, 9 Mar 2023 16:44:34 +0900 Subject: [PATCH 1/4] [SOLID] DIP - Worst Case --- oop-in-spring/practice/solid/dip/DipMain.java | 21 +++++++++++++++ oop-in-spring/practice/solid/dip/Doll.java | 12 +++++++++ .../practice/solid/dip/KidWithDoll.java | 27 +++++++++++++++++++ .../practice/solid/dip/KidWithLego.java | 26 ++++++++++++++++++ .../practice/solid/dip/KidWithRobot.java | 27 +++++++++++++++++++ oop-in-spring/practice/solid/dip/Lego.java | 11 ++++++++ oop-in-spring/practice/solid/dip/Robot.java | 11 ++++++++ 7 files changed, 135 insertions(+) create mode 100644 oop-in-spring/practice/solid/dip/DipMain.java create mode 100644 oop-in-spring/practice/solid/dip/Doll.java create mode 100644 oop-in-spring/practice/solid/dip/KidWithDoll.java create mode 100644 oop-in-spring/practice/solid/dip/KidWithLego.java create mode 100644 oop-in-spring/practice/solid/dip/KidWithRobot.java create mode 100644 oop-in-spring/practice/solid/dip/Lego.java create mode 100644 oop-in-spring/practice/solid/dip/Robot.java diff --git a/oop-in-spring/practice/solid/dip/DipMain.java b/oop-in-spring/practice/solid/dip/DipMain.java new file mode 100644 index 000000000..53de4cfb3 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/DipMain.java @@ -0,0 +1,21 @@ +public class DipMain { + public static void main(String[] args) { + + /** DIP 준수하지 않은 경우 **/ + // (1) 아이가 인형을 가지고 놀 때 + KidWithDoll kidWithDoll = new KidWithDoll(3); + kidWithDoll.play(); + + kidWithDoll.grow(); + + // (2) 아이가 로봇을 가지고 놀 때 + KidWithRobot kidWithRobot = new KidWithRobot(kidWithDoll.getAge()); + kidWithRobot.play(); + + kidWithRobot.grow(); + + // (3) 아이가 레고를 가지고 놀 때 + KidWithLego kidWithLego = new KidWithLego(kidWithRobot.getAge()); + kidWithLego.play(); + } +} \ No newline at end of file diff --git a/oop-in-spring/practice/solid/dip/Doll.java b/oop-in-spring/practice/solid/dip/Doll.java new file mode 100644 index 000000000..26c9c1aa6 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/Doll.java @@ -0,0 +1,12 @@ +public class Doll { + + private String name = "doll"; + + public String getName() { + return this.name; + } + + public void talk() { + System.out.println("인형이 말을 합니다."); + } +} diff --git a/oop-in-spring/practice/solid/dip/KidWithDoll.java b/oop-in-spring/practice/solid/dip/KidWithDoll.java new file mode 100644 index 000000000..ec1b162f3 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/KidWithDoll.java @@ -0,0 +1,27 @@ +public class KidWithDoll { + Doll doll; + + private int age; + + public KidWithDoll(int age) { + this.age = age; + this.doll = new Doll(); + } + + public int getAge() { + return this.age; + } + + public void setAge(int age) { + this.age = age; + } + + void grow() { + this.age++; + } + + void play() { + System.out.println("아이가 " + doll.getName() + "을 가지고 놀고 있어요"); + doll.talk(); + } +} diff --git a/oop-in-spring/practice/solid/dip/KidWithLego.java b/oop-in-spring/practice/solid/dip/KidWithLego.java new file mode 100644 index 000000000..91aef415f --- /dev/null +++ b/oop-in-spring/practice/solid/dip/KidWithLego.java @@ -0,0 +1,26 @@ +public class KidWithLego { + Lego lego; + private int age; + + public KidWithLego(int age) { + this.age = age; + this.lego = new Lego(); + } + + public int getAge() { + return this.age; + } + + public void setAge(int age) { + this.age = age; + } + + void grow() { + this.age++; + } + + void play() { + System.out.println("아이가 " + lego.getName() + "을 가지고 놀고 있어요"); + lego.assemble(); + } +} diff --git a/oop-in-spring/practice/solid/dip/KidWithRobot.java b/oop-in-spring/practice/solid/dip/KidWithRobot.java new file mode 100644 index 000000000..2bf93e523 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/KidWithRobot.java @@ -0,0 +1,27 @@ +public class KidWithRobot { + Robot robot; + + private int age; + + public KidWithRobot(int age) { + this.age = age; + this.robot = new Robot(); + } + + public int getAge() { + return this.age; + } + + void grow() { + this.age++; + } + + public void setAge(int age) { + this.age = age; + } + + void play() { + System.out.println("아이가 " + robot.getName() + "을 가지고 놀고 있어요"); + robot.shoot(); + } +} diff --git a/oop-in-spring/practice/solid/dip/Lego.java b/oop-in-spring/practice/solid/dip/Lego.java new file mode 100644 index 000000000..e2fe00bf9 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/Lego.java @@ -0,0 +1,11 @@ +public class Lego { + private String name = "lego"; + + public String getName() { + return this.name; + } + + public void assemble() { + System.out.println("레고가 조립되었어요"); + } +} diff --git a/oop-in-spring/practice/solid/dip/Robot.java b/oop-in-spring/practice/solid/dip/Robot.java new file mode 100644 index 000000000..9d200e6c0 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/Robot.java @@ -0,0 +1,11 @@ +public class Robot { + private String name = "robot"; + + public String getName() { + return this.name; + } + + public void shoot() { + System.out.println("로봇이 총을 쏩니다."); + } +} From dddca427aaf269777981648cef63faea60105d01 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Thu, 9 Mar 2023 17:25:52 +0900 Subject: [PATCH 2/4] [SOLID] DIP - Compliance Case --- .../practice/solid/dip/AbstractToy.java | 13 +++++++++++++ oop-in-spring/practice/solid/dip/DipMain.java | 15 +++++++++++++++ oop-in-spring/practice/solid/dip/Doll.java | 11 +++++++---- oop-in-spring/practice/solid/dip/Kid.java | 17 +++++++++++++++++ oop-in-spring/practice/solid/dip/Lego.java | 11 +++++++---- oop-in-spring/practice/solid/dip/Robot.java | 12 ++++++++---- 6 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 oop-in-spring/practice/solid/dip/AbstractToy.java create mode 100644 oop-in-spring/practice/solid/dip/Kid.java diff --git a/oop-in-spring/practice/solid/dip/AbstractToy.java b/oop-in-spring/practice/solid/dip/AbstractToy.java new file mode 100644 index 000000000..674f53c6d --- /dev/null +++ b/oop-in-spring/practice/solid/dip/AbstractToy.java @@ -0,0 +1,13 @@ +public abstract class AbstractToy { + private String name; + + protected AbstractToy(String name) { + this.name = name; + } + + protected String getName() { + return this.name; + } + + protected abstract void play(); +} diff --git a/oop-in-spring/practice/solid/dip/DipMain.java b/oop-in-spring/practice/solid/dip/DipMain.java index 53de4cfb3..5b62d7084 100644 --- a/oop-in-spring/practice/solid/dip/DipMain.java +++ b/oop-in-spring/practice/solid/dip/DipMain.java @@ -17,5 +17,20 @@ public static void main(String[] args) { // (3) 아이가 레고를 가지고 놀 때 KidWithLego kidWithLego = new KidWithLego(kidWithRobot.getAge()); kidWithLego.play(); + + /** DIP 적용시킨 사례 **/ + Kid kid = new Kid(6); + + // (1) 아이가 인형을 가지고 놀 때 + kid.play(new Doll()); + + kid.grow(); + + // (2) 아이가 로봇을 가지고 놀 때 + kid.play(new Robot()); + kid.grow(); + + // (3) 아이가 레고를 가지고 놀 때 + kid.play(new Lego()); } } \ No newline at end of file diff --git a/oop-in-spring/practice/solid/dip/Doll.java b/oop-in-spring/practice/solid/dip/Doll.java index 26c9c1aa6..b6844d18c 100644 --- a/oop-in-spring/practice/solid/dip/Doll.java +++ b/oop-in-spring/practice/solid/dip/Doll.java @@ -1,9 +1,12 @@ -public class Doll { +public class Doll extends AbstractToy { - private String name = "doll"; + public Doll() { + super("doll"); + } - public String getName() { - return this.name; + @Override + public void play() { + this.talk(); } public void talk() { diff --git a/oop-in-spring/practice/solid/dip/Kid.java b/oop-in-spring/practice/solid/dip/Kid.java new file mode 100644 index 000000000..dfc138c80 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/Kid.java @@ -0,0 +1,17 @@ +public class Kid { + + private int age; + + public Kid(int age) { + this.age = age; + } + + void play(AbstractToy toy) { + System.out.println("아이가 " + toy.getName() + "을 가지고 놀고 있어요"); + toy.play(); + } + + void grow() { + this.age++; + } +} diff --git a/oop-in-spring/practice/solid/dip/Lego.java b/oop-in-spring/practice/solid/dip/Lego.java index e2fe00bf9..04cc6eadf 100644 --- a/oop-in-spring/practice/solid/dip/Lego.java +++ b/oop-in-spring/practice/solid/dip/Lego.java @@ -1,8 +1,11 @@ -public class Lego { - private String name = "lego"; +public class Lego extends AbstractToy { + public Lego() { + super("lego"); + } - public String getName() { - return this.name; + @Override + public void play() { + this.assemble(); } public void assemble() { diff --git a/oop-in-spring/practice/solid/dip/Robot.java b/oop-in-spring/practice/solid/dip/Robot.java index 9d200e6c0..66608f412 100644 --- a/oop-in-spring/practice/solid/dip/Robot.java +++ b/oop-in-spring/practice/solid/dip/Robot.java @@ -1,8 +1,12 @@ -public class Robot { - private String name = "robot"; +public class Robot extends AbstractToy { - public String getName() { - return this.name; + public Robot() { + super("robot"); + } + + @Override + public void play() { + this.shoot(); } public void shoot() { From 8e51ce71335ff0cf192bce2132bd322f0e621ff0 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Sun, 12 Mar 2023 16:24:50 +0900 Subject: [PATCH 3/4] =?UTF-8?q?Java=20=EA=B0=9D=EC=A0=9C=EC=B9=98=ED=96=A5?= =?UTF-8?q?=20=EB=94=94=EC=9E=90=EC=9D=B8=20=ED=8C=A8=ED=84=B4=20=EB=8F=84?= =?UTF-8?q?=EC=84=9C=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RemoteSystemsTempFiles/.project | 12 ++ .../ch1-Student-Transcript-Course/.classpath | 6 + .../ch1-Student-Transcript-Course/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../bin/Course.class | Bin 0 -> 1391 bytes .../bin/Main.class | Bin 0 -> 1803 bytes .../bin/Student.class | Bin 0 -> 1388 bytes .../bin/Transcript.class | Bin 0 -> 1105 bytes .../src/Course.java | 30 ++++ .../src/Main.java | 40 ++++++ .../src/Student.java | 32 +++++ .../src/Transcript.java | 38 +++++ .../.classpath" | 6 + .../.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/CartForSongs.class" | Bin 0 -> 1051 bytes .../bin/DiscountedMode.class" | Bin 0 -> 299 bytes .../bin/Main.class" | Bin 0 -> 956 bytes .../bin/NonDiscounted.class" | Bin 0 -> 344 bytes .../bin/OnSale.class" | Bin 0 -> 334 bytes .../bin/Song.class" | Bin 0 -> 535 bytes .../bin/TodayEvent.class" | Bin 0 -> 346 bytes .../src/CartForSongs.java" | 26 ++++ .../src/DiscountedMode.java" | 5 + .../src/Main.java" | 27 ++++ .../src/NonDiscounted.java" | 10 ++ .../src/OnSale.java" | 10 ++ .../src/Song.java" | 10 ++ .../src/TodayEvent.java" | 10 ++ .../ch2-\353\254\270\354\240\2344/.classpath" | 6 + .../ch2-\353\254\270\354\240\2344/.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/CartForSongs.class" | Bin 0 -> 1274 bytes .../bin/Main.class" | Bin 0 -> 923 bytes .../bin/Song.class" | Bin 0 -> 581 bytes .../src/CartForSongs.java" | 29 ++++ .../src/Main.java" | 27 ++++ .../src/Song.java" | 13 ++ .../ch2-\353\254\270\354\240\2346/.classpath" | 6 + .../ch2-\353\254\270\354\240\2346/.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/Main.class" | Bin 0 -> 739 bytes .../bin/Queue.class" | Bin 0 -> 876 bytes .../src/Main.java" | 15 ++ .../src/Queue.java" | 17 +++ .../ch2-\353\254\270\354\240\2347/.classpath" | 6 + .../ch2-\353\254\270\354\240\2347/.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/Main.class" | Bin 0 -> 812 bytes .../bin/Queue.class" | Bin 0 -> 1007 bytes .../src/Main.java" | 18 +++ .../src/Queue.java" | 17 +++ .../.classpath" | 6 + .../.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/A.class" | Bin 0 -> 557 bytes .../bin/A1.class" | Bin 0 -> 547 bytes .../bin/Main.class" | Bin 0 -> 505 bytes .../src/A.java" | 12 ++ .../src/A1.java" | 10 ++ .../src/Main.java" | 12 ++ java-oop-design-pattern/ch3-DIP/.classpath | 6 + java-oop-design-pattern/ch3-DIP/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ java-oop-design-pattern/ch3-DIP/bin/Kid.class | Bin 0 -> 618 bytes .../ch3-DIP/bin/Lego.class | Bin 0 -> 320 bytes .../ch3-DIP/bin/Main.class | Bin 0 -> 563 bytes .../ch3-DIP/bin/Robot.class | Bin 0 -> 323 bytes java-oop-design-pattern/ch3-DIP/bin/Toy.class | Bin 0 -> 234 bytes java-oop-design-pattern/ch3-DIP/src/Kid.java | 10 ++ java-oop-design-pattern/ch3-DIP/src/Lego.java | 7 + java-oop-design-pattern/ch3-DIP/src/Main.java | 12 ++ .../ch3-DIP/src/Robot.java | 7 + java-oop-design-pattern/ch3-DIP/src/Toy.java | 4 + java-oop-design-pattern/ch3-LSP/.classpath | 6 + java-oop-design-pattern/ch3-LSP/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ java-oop-design-pattern/ch3-LSP/bin/Bag.class | Bin 0 -> 432 bytes .../ch3-LSP/bin/DiscountedBag.class | Bin 0 -> 514 bytes .../ch3-LSP/bin/Main.class | Bin 0 -> 884 bytes java-oop-design-pattern/ch3-LSP/src/Bag.java | 6 + .../ch3-LSP/src/DiscountedBag.java | 12 ++ java-oop-design-pattern/ch3-LSP/src/Main.java | 27 ++++ .../.classpath" | 6 + .../.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/DefaultStrategy.class" | Bin 0 -> 435 bytes .../bin/Main.class" | Bin 0 -> 475 bytes .../bin/PayCalculationStrategy.class" | Bin 0 -> 150 bytes .../bin/PayCalculator.class" | Bin 0 -> 399 bytes .../bin/PayGUI.class" | Bin 0 -> 4260 bytes .../src/DefaultStrategy.java" | 9 ++ .../src/Main.java" | 8 ++ .../src/PayCalculationStrategy.java" | 4 + .../src/PayCalculator.java" | 8 ++ .../src/PayGUI.java" | 133 ++++++++++++++++++ .../.classpath" | 6 + .../ch3-\353\254\270\354\240\23410/.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/CalculatePayMachine.class" | Bin 0 -> 4150 bytes .../bin/Main.class" | Bin 0 -> 433 bytes .../src/CalculatePayMachine.java" | 131 +++++++++++++++++ .../src/Main.java" | 8 ++ .../.classpath" | 6 + .../.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/Ball.class" | Bin 0 -> 1890 bytes .../bin/BallFrame.class" | Bin 0 -> 1138 bytes .../bin/BlueDrawStrategy.class" | Bin 0 -> 491 bytes .../bin/Client.class" | Bin 0 -> 1076 bytes .../bin/DiagonalMoveStrategy.class" | Bin 0 -> 443 bytes .../bin/DirectionStrategy.class" | Bin 0 -> 303 bytes .../bin/DrawStrategy.class" | Bin 0 -> 288 bytes .../bin/Field.class" | Bin 0 -> 1198 bytes .../bin/HorizonalMoveStrategy.class" | Bin 0 -> 445 bytes .../bin/RedDrawStrategy.class" | Bin 0 -> 487 bytes .../bin/VerticalMoveStrategy.class" | Bin 0 -> 442 bytes .../src/Ball.java" | 71 ++++++++++ .../src/BallFrame.java" | 28 ++++ .../src/BlueDrawStrategy.java" | 10 ++ .../src/Client.java" | 21 +++ .../src/DiagonalMoveStrategy.java" | 5 + .../src/DirectionStrategy.java" | 3 + .../src/DrawStrategy.java" | 3 + .../src/Field.java" | 31 ++++ .../src/HorizonalMoveStrategy.java" | 5 + .../src/RedDrawStrategy.java" | 10 ++ .../src/VerticalMoveStrategy.java" | 5 + .../.classpath" | 6 + .../.project" | 17 +++ .../bin/run1.gif" | Bin 0 -> 3711 bytes .../bin/run2.gif" | Bin 0 -> 3757 bytes .../bin/run3.gif" | Bin 0 -> 3677 bytes .../bin/running/Client.class" | Bin 0 -> 413 bytes .../bin/running/ImageService.class" | Bin 0 -> 645 bytes .../bin/running/MovingStrategy.class" | Bin 0 -> 327 bytes .../bin/running/Running$Controller.class" | Bin 0 -> 1657 bytes .../bin/running/Running$Field.class" | Bin 0 -> 1579 bytes .../bin/running/Running.class" | Bin 0 -> 1483 bytes .../bin/running/RunningStrategy.class" | Bin 0 -> 466 bytes .../bin/running/StandingStrategy.class" | Bin 0 -> 470 bytes .../bin/running/WalkingStrategy.class" | Bin 0 -> 466 bytes .../bin/stand.gif" | Bin 0 -> 3704 bytes .../bin/walk1.gif" | Bin 0 -> 3704 bytes .../bin/walk2.gif" | Bin 0 -> 3603 bytes .../src/run1.gif" | Bin 0 -> 3711 bytes .../src/run2.gif" | Bin 0 -> 3757 bytes .../src/run3.gif" | Bin 0 -> 3677 bytes .../src/running/Client.java" | 7 + .../src/running/ImageService.java" | 7 + .../src/running/MovingStrategy.java" | 5 + .../src/running/Running.java" | 92 ++++++++++++ .../src/running/RunningStrategy.java" | 10 ++ .../src/running/StandingStrategy.java" | 10 ++ .../src/running/WalkingStrategy.java" | 10 ++ .../src/stand.gif" | Bin 0 -> 3704 bytes .../src/walk1.gif" | Bin 0 -> 3704 bytes .../src/walk2.gif" | Bin 0 -> 3603 bytes .../.classpath" | 6 + .../.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/Client.class" | Bin 0 -> 642 bytes .../bin/HD108ReceiptPrinter.class" | Bin 0 -> 562 bytes .../bin/Item.class" | Bin 0 -> 552 bytes .../bin/Sale.class" | Bin 0 -> 1404 bytes .../src/Client.java" | 18 +++ .../src/HD108ReceiptPrinter.java" | 8 ++ .../src/Item.java" | 20 +++ .../src/Sale.java" | 25 ++++ .../.classpath" | 6 + .../.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/Client.class" | Bin 0 -> 1217 bytes .../bin/FakePrinter.class" | Bin 0 -> 536 bytes .../bin/HD108ReceiptPrinter.class" | Bin 0 -> 546 bytes .../bin/Item.class" | Bin 0 -> 552 bytes .../bin/ReceiptPrinter.class" | Bin 0 -> 149 bytes .../bin/Sale.class" | Bin 0 -> 1512 bytes .../src/Client.java" | 23 +++ .../src/FakePrinter.java" | 12 ++ .../src/HD108ReceiptPrinter.java" | 9 ++ .../src/Item.java" | 20 +++ .../src/ReceiptPrinter.java" | 4 + .../src/Sale.java" | 30 ++++ .../ch6-printerManager/.classpath | 6 + .../ch6-printerManager/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../ch6-printerManager/bin/Main.class | Bin 0 -> 860 bytes .../ch6-printerManager/bin/Printer.class | Bin 0 -> 1301 bytes .../bin/PrinterManager.class | Bin 0 -> 1174 bytes .../ch6-printerManager/bin/UserThread.class | Bin 0 -> 674 bytes .../ch6-printerManager/src/Main.java | 12 ++ .../ch6-printerManager/src/Printer.java | 26 ++++ .../src/PrinterManager.java | 34 +++++ .../ch6-printerManager/src/UserThread.java | 11 ++ .../.classpath" | 6 + .../.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/Main.class" | Bin 0 -> 491 bytes .../bin/Server.class" | Bin 0 -> 475 bytes .../bin/ServerFactory.class" | Bin 0 -> 360 bytes .../src/Main.java" | 7 + .../src/Server.java" | 8 ++ .../src/ServerFactory.java" | 6 + .../.classpath" | 7 + .../.project" | 17 +++ .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/FakeServer.class" | Bin 0 -> 802 bytes .../bin/Main$1.class" | Bin 0 -> 483 bytes .../bin/Main.class" | Bin 0 -> 671 bytes .../bin/RealServer.class" | Bin 0 -> 500 bytes .../bin/Server.class" | Bin 0 -> 121 bytes .../bin/ServerFactory$1.class" | Bin 0 -> 482 bytes .../bin/ServerFactory.class" | Bin 0 -> 758 bytes .../bin/ServerFactoryTests$1.class" | Bin 0 -> 596 bytes .../bin/ServerFactoryTests.class" | Bin 0 -> 925 bytes .../bin/ServerProvider.class" | Bin 0 -> 142 bytes .../bin/UseServer.class" | Bin 0 -> 637 bytes .../src/FakeServer.java" | 14 ++ .../src/Main.java" | 19 +++ .../src/RealServer.java" | 7 + .../src/Server.java" | 4 + .../src/ServerFactory.java" | 17 +++ .../src/ServerFactoryTests.java" | 18 +++ .../src/ServerProvider.java" | 4 + .../src/UseServer.java" | 13 ++ .../ch7-3-bookRental/.classpath | 6 + .../ch7-3-bookRental/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../ch7-3-bookRental/bin/Book.class | Bin 0 -> 682 bytes .../bin/BookDiscountPricePolicy.class | Bin 0 -> 444 bytes .../ch7-3-bookRental/bin/Client.class | Bin 0 -> 1215 bytes .../ch7-3-bookRental/bin/Member.class | Bin 0 -> 663 bytes .../bin/MemberDiscountPricePolicy.class | Bin 0 -> 450 bytes .../bin/OrdinaryPricePolicy.class | Bin 0 -> 417 bytes .../ch7-3-bookRental/bin/PricePolicy.class | Bin 0 -> 131 bytes .../ch7-3-bookRental/bin/Rental.class | Bin 0 -> 731 bytes .../ch7-3-bookRental/src/Book.java | 25 ++++ .../src/BookDiscountPricePolicy.java | 7 + .../ch7-3-bookRental/src/Client.java | 22 +++ .../ch7-3-bookRental/src/Member.java | 23 +++ .../src/MemberDiscountPricePolicy.java | 7 + .../src/OrdinaryPricePolicy.java | 7 + .../ch7-3-bookRental/src/PricePolicy.java | 5 + .../ch7-3-bookRental/src/Rental.java | 20 +++ .../ch7-light3states/.classpath | 6 + .../ch7-light3states/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../ch7-light3states/bin/Client.class | Bin 0 -> 516 bytes .../ch7-light3states/bin/Light.class | Bin 0 -> 681 bytes .../ch7-light3states/bin/LightState.class | Bin 0 -> 169 bytes .../ch7-light3states/bin/OFF.class | Bin 0 -> 938 bytes .../ch7-light3states/bin/ON.class | Bin 0 -> 955 bytes .../ch7-light3states/bin/SLEEPING.class | Bin 0 -> 971 bytes .../ch7-light3states/src/Client.java | 11 ++ .../ch7-light3states/src/Light.java | 13 ++ .../ch7-light3states/src/LightState.java | 5 + .../ch7-light3states/src/OFF.java | 19 +++ .../ch7-light3states/src/ON.java | 21 +++ .../ch7-light3states/src/SLEEPING.java | 19 +++ .../.classpath" | 6 + .../.project" | 17 +++ .../org.eclipse.core.resources.prefs" | 2 + .../.settings/org.eclipse.jdt.core.prefs" | 11 ++ .../bin/Client.class" | Bin 0 -> 873 bytes .../bin/Drinking.class" | Bin 0 -> 587 bytes .../bin/EnoughMoneyState.class" | Bin 0 -> 1902 bytes .../bin/MoneyBox.class" | Bin 0 -> 673 bytes .../bin/NoEnoughMoneyState.class" | Bin 0 -> 1780 bytes .../bin/NoMoneyState.class" | Bin 0 -> 1650 bytes .../bin/SoldOutState.class" | Bin 0 -> 1310 bytes .../bin/State.class" | Bin 0 -> 169 bytes .../bin/VendingMachine.class" | Bin 0 -> 2057 bytes .../src/Client.java" | 22 +++ .../src/Drinking.java" | 23 +++ .../src/EnoughMoneyState.java" | 39 +++++ .../src/MoneyBox.java" | 24 ++++ .../src/NoEnoughMoneyState.java" | 35 +++++ .../src/NoMoneyState.java" | 32 +++++ .../src/SoldOutState.java" | 26 ++++ .../src/State.java" | 7 + .../src/VendingMachine.java" | 76 ++++++++++ java-oop-design-pattern/ch8_ch14/.classpath | 6 + java-oop-design-pattern/ch8_ch14/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../bin/abstractfactory/after1/Client.class | Bin 0 -> 1387 bytes .../abstractfactory/after1/Direction.class | Bin 0 -> 1025 bytes .../bin/abstractfactory/after1/Door.class | Bin 0 -> 847 bytes .../abstractfactory/after1/DoorStatus.class | Bin 0 -> 1038 bytes .../after1/ElevatorFactory.class | Bin 0 -> 428 bytes .../abstractfactory/after1/HyundaiDoor.class | Bin 0 -> 650 bytes .../after1/HyundaiElevatorFactory.class | Bin 0 -> 674 bytes .../abstractfactory/after1/HyundaiMotor.class | Bin 0 -> 654 bytes .../bin/abstractfactory/after1/LGDoor.class | Bin 0 -> 625 bytes .../after1/LGElevatorFactory.class | Bin 0 -> 649 bytes .../bin/abstractfactory/after1/LGMotor.class | Bin 0 -> 634 bytes .../bin/abstractfactory/after1/Motor.class | Bin 0 -> 1453 bytes .../abstractfactory/after1/MotorStatus.class | Bin 0 -> 1046 bytes .../bin/abstractfactory/after2/Client.class | Bin 0 -> 1485 bytes .../abstractfactory/after2/Direction.class | Bin 0 -> 1025 bytes .../bin/abstractfactory/after2/Door.class | Bin 0 -> 847 bytes .../abstractfactory/after2/DoorStatus.class | Bin 0 -> 1038 bytes .../after2/ElevatorFactory.class | Bin 0 -> 428 bytes .../abstractfactory/after2/HyundaiDoor.class | Bin 0 -> 650 bytes .../after2/HyundaiElevatorFactory.class | Bin 0 -> 674 bytes .../abstractfactory/after2/HyundaiMotor.class | Bin 0 -> 654 bytes .../bin/abstractfactory/after2/LGDoor.class | Bin 0 -> 625 bytes .../after2/LGElevatorFactory.class | Bin 0 -> 649 bytes .../bin/abstractfactory/after2/LGMotor.class | Bin 0 -> 634 bytes .../bin/abstractfactory/after2/Motor.class | Bin 0 -> 1453 bytes .../abstractfactory/after2/MotorStatus.class | Bin 0 -> 1046 bytes .../abstractfactory/after2/SamsungDoor.class | Bin 0 -> 650 bytes .../after2/SamsungElevatorFactory.class | Bin 0 -> 674 bytes .../abstractfactory/after2/SamsungMotor.class | Bin 0 -> 654 bytes .../bin/abstractfactory/after3/Client.class | Bin 0 -> 1634 bytes .../abstractfactory/after3/Direction.class | Bin 0 -> 1025 bytes .../bin/abstractfactory/after3/Door.class | Bin 0 -> 847 bytes .../abstractfactory/after3/DoorStatus.class | Bin 0 -> 1038 bytes .../after3/ElevatorFactory.class | Bin 0 -> 428 bytes .../after3/ElevatorFactoryFactory.class | Bin 0 -> 1440 bytes .../abstractfactory/after3/HyundaiDoor.class | Bin 0 -> 650 bytes .../after3/HyundaiElevatorFactory.class | Bin 0 -> 908 bytes .../abstractfactory/after3/HyundaiMotor.class | Bin 0 -> 654 bytes .../bin/abstractfactory/after3/LGDoor.class | Bin 0 -> 625 bytes .../after3/LGElevatorFactory.class | Bin 0 -> 883 bytes .../bin/abstractfactory/after3/LGMotor.class | Bin 0 -> 634 bytes .../bin/abstractfactory/after3/Motor.class | Bin 0 -> 1453 bytes .../abstractfactory/after3/MotorStatus.class | Bin 0 -> 1046 bytes .../abstractfactory/after3/SamsungDoor.class | Bin 0 -> 650 bytes .../after3/SamsungElevatorFactory.class | Bin 0 -> 908 bytes .../abstractfactory/after3/SamsungMotor.class | Bin 0 -> 654 bytes .../bin/abstractfactory/after3/VendorID.class | Bin 0 -> 1071 bytes .../bin/abstractfactory/before1/Client.class | Bin 0 -> 1338 bytes .../abstractfactory/before1/Direction.class | Bin 0 -> 1031 bytes .../bin/abstractfactory/before1/Door.class | Bin 0 -> 852 bytes .../abstractfactory/before1/DoorFactory.class | Bin 0 -> 1187 bytes .../abstractfactory/before1/DoorStatus.class | Bin 0 -> 1044 bytes .../abstractfactory/before1/HyundaiDoor.class | Bin 0 -> 653 bytes .../before1/HyundaiMotor.class | Bin 0 -> 659 bytes .../bin/abstractfactory/before1/LGDoor.class | Bin 0 -> 628 bytes .../bin/abstractfactory/before1/LGMotor.class | Bin 0 -> 639 bytes .../bin/abstractfactory/before1/Motor.class | Bin 0 -> 1467 bytes .../before1/MotorFactory.class | Bin 0 -> 1197 bytes .../abstractfactory/before1/MotorStatus.class | Bin 0 -> 1052 bytes .../abstractfactory/before1/VendorID.class | Bin 0 -> 1027 bytes .../example/navi/BasicNaviFactory.class | Bin 0 -> 1033 bytes .../example/navi/CheapGPS.class | Bin 0 -> 632 bytes .../abstractfactory/example/navi/Client.class | Bin 0 -> 1916 bytes .../example/navi/ClientBefore.class | Bin 0 -> 1433 bytes .../example/navi/ExpensiveGPS.class | Bin 0 -> 648 bytes .../example/navi/FastPathFinder.class | Bin 0 -> 774 bytes .../abstractfactory/example/navi/GPS.class | Bin 0 -> 366 bytes .../example/navi/HDScreen.class | Bin 0 -> 944 bytes .../example/navi/LargeMap.class | Bin 0 -> 323 bytes .../example/navi/Location.class | Bin 0 -> 307 bytes .../abstractfactory/example/navi/Map.class | Bin 0 -> 292 bytes .../example/navi/NaviFactory.class | Bin 0 -> 572 bytes .../abstractfactory/example/navi/Path.class | Bin 0 -> 295 bytes .../example/navi/PathFinder.class | Bin 0 -> 450 bytes .../example/navi/PremiumNaviFactory.class | Bin 0 -> 1043 bytes .../example/navi/SDScreen.class | Bin 0 -> 944 bytes .../abstractfactory/example/navi/Screen.class | Bin 0 -> 359 bytes .../example/navi/SlowPathFinder.class | Bin 0 -> 774 bytes .../example/navi/SmallMap.class | Bin 0 -> 323 bytes .../navisimulation/BasicNaviFactory.class | Bin 0 -> 1146 bytes .../example/navisimulation/CheapGPS.class | Bin 0 -> 672 bytes .../example/navisimulation/Client.class | Bin 0 -> 1985 bytes .../example/navisimulation/ExpensiveGPS.class | Bin 0 -> 688 bytes .../navisimulation/FastPathFinder.class | Bin 0 -> 844 bytes .../example/navisimulation/GPS.class | Bin 0 -> 396 bytes .../example/navisimulation/GPSSimulator.class | Bin 0 -> 688 bytes .../example/navisimulation/HDScreen.class | Bin 0 -> 994 bytes .../example/navisimulation/LargeMap.class | Bin 0 -> 353 bytes .../example/navisimulation/Location.class | Bin 0 -> 327 bytes .../example/navisimulation/Map.class | Bin 0 -> 312 bytes .../example/navisimulation/NaviFactory.class | Bin 0 -> 635 bytes .../navisimulation/NaviTestFactory.class | Bin 0 -> 1148 bytes .../example/navisimulation/Path.class | Bin 0 -> 315 bytes .../example/navisimulation/PathFinder.class | Bin 0 -> 500 bytes .../navisimulation/PremiumNaviFactory.class | Bin 0 -> 1156 bytes .../example/navisimulation/SDScreen.class | Bin 0 -> 994 bytes .../example/navisimulation/Screen.class | Bin 0 -> 389 bytes .../navisimulation/SlowPathFinder.class | Bin 0 -> 844 bytes .../example/navisimulation/SmallMap.class | Bin 0 -> 353 bytes .../example/navisimulation/TestMap.class | Bin 0 -> 350 bytes .../navisimulation/TestPathFinder.class | Bin 0 -> 844 bytes .../example/navisimulation/TestScreen.class | Bin 0 -> 1002 bytes .../example/power/AveragePowerGyroscope.class | Bin 0 -> 371 bytes .../power/AveragePowerLightSensor.class | Bin 0 -> 379 bytes .../power/AveragePowerMotionSensor.class | Bin 0 -> 383 bytes .../power/AveragePowerSensorFactory.class | Bin 0 -> 972 bytes .../example/power/Gyroscope.class | Bin 0 -> 312 bytes .../example/power/LightSensor.class | Bin 0 -> 318 bytes .../example/power/LowPowerGyroscope.class | Bin 0 -> 359 bytes .../example/power/LowPowerLightSensor.class | Bin 0 -> 367 bytes .../example/power/LowPowerMotionSensor.class | Bin 0 -> 371 bytes .../example/power/LowPowerSensorFactory.class | Bin 0 -> 948 bytes .../example/power/MotionSensor.class | Bin 0 -> 321 bytes .../example/power/SensorFactory.class | Bin 0 -> 550 bytes .../ch8_ch14/bin/command/after1/Alarm.class | Bin 0 -> 495 bytes .../bin/command/after1/AlarmOnCommand.class | Bin 0 -> 554 bytes .../ch8_ch14/bin/command/after1/Button.class | Bin 0 -> 624 bytes .../ch8_ch14/bin/command/after1/Client.class | Bin 0 -> 1053 bytes .../ch8_ch14/bin/command/after1/Command.class | Bin 0 -> 134 bytes .../ch8_ch14/bin/command/after1/Lamp.class | Bin 0 -> 489 bytes .../bin/command/after1/LampOnCommand.class | Bin 0 -> 548 bytes .../ch8_ch14/bin/command/after2/Button.class | Bin 0 -> 624 bytes .../ch8_ch14/bin/command/after2/Client.class | Bin 0 -> 889 bytes .../ch8_ch14/bin/command/after2/Command.class | Bin 0 -> 134 bytes .../ch8_ch14/bin/command/after2/Lamp.class | Bin 0 -> 582 bytes .../bin/command/after2/LampOffCommand.class | Bin 0 -> 552 bytes .../bin/command/after2/LampOnCommand.class | Bin 0 -> 548 bytes .../ch8_ch14/bin/command/before1/Button.class | Bin 0 -> 502 bytes .../ch8_ch14/bin/command/before1/Client.class | Bin 0 -> 635 bytes .../ch8_ch14/bin/command/before1/Lamp.class | Bin 0 -> 491 bytes .../ch8_ch14/bin/command/before2/Alarm.class | Bin 0 -> 497 bytes .../ch8_ch14/bin/command/before2/Button.class | Bin 0 -> 505 bytes .../ch8_ch14/bin/command/before2/Client.class | Bin 0 -> 640 bytes .../ch8_ch14/bin/command/before3/Alarm.class | Bin 0 -> 497 bytes .../ch8_ch14/bin/command/before3/Button.class | Bin 0 -> 1282 bytes .../ch8_ch14/bin/command/before3/Client.class | Bin 0 -> 907 bytes .../ch8_ch14/bin/command/before3/Lamp.class | Bin 0 -> 491 bytes .../ch8_ch14/bin/command/before3/Mode.class | Bin 0 -> 953 bytes .../example/elevatorbutton/Client.class | Bin 0 -> 1844 bytes .../example/elevatorbutton/Command.class | Bin 0 -> 150 bytes .../DestinationSelectionCommand.class | Bin 0 -> 801 bytes .../example/elevatorbutton/Direction.class | Bin 0 -> 1077 bytes .../elevatorbutton/ElevatorButton.class | Bin 0 -> 613 bytes .../elevatorbutton/ElevatorController.class | Bin 0 -> 931 bytes .../elevatorbutton/ElevatorManager.class | Bin 0 -> 1398 bytes .../ElevatorRequestCommand.class | Bin 0 -> 962 bytes .../remotecontroller2/ChannelController.class | Bin 0 -> 787 bytes .../ChannelDownCommand.class | Bin 0 -> 731 bytes .../remotecontroller2/ChannelUpCommand.class | Bin 0 -> 723 bytes .../example/remotecontroller2/Client.class | Bin 0 -> 1651 bytes .../example/remotecontroller2/Command.class | Bin 0 -> 153 bytes .../remotecontroller2/MuteCommand.class | Bin 0 -> 643 bytes .../remotecontroller2/PowerCommand.class | Bin 0 -> 647 bytes .../remotecontroller2/RemoteController.class | Bin 0 -> 1162 bytes .../example/remotecontroller2/TV.class | Bin 0 -> 1180 bytes .../example/twobuttoncontroller/Client2.class | Bin 0 -> 1135 bytes .../example/twobuttoncontroller/Client3.class | Bin 0 -> 1232 bytes .../example/twobuttoncontroller/Command.class | Bin 0 -> 155 bytes .../twobuttoncontroller/MuteCommand.class | Bin 0 -> 655 bytes .../twobuttoncontroller/PowerCommand.class | Bin 0 -> 659 bytes .../example/twobuttoncontroller/TV.class | Bin 0 -> 1227 bytes .../TwoButtonController.class | Bin 0 -> 907 bytes .../twobuttoncontroller/before/Client.class | Bin 0 -> 892 bytes .../twobuttoncontroller/before/TV.class | Bin 0 -> 915 bytes .../before/TwoButtonController.class | Bin 0 -> 773 bytes .../ch8_ch14/bin/composite/after1/Body.class | Bin 0 -> 542 bytes .../bin/composite/after1/Client.class | Bin 0 -> 1467 bytes .../bin/composite/after1/Computer.class | Bin 0 -> 1372 bytes .../bin/composite/after1/ComputerDevice.class | Bin 0 -> 345 bytes .../bin/composite/after1/Keyboard.class | Bin 0 -> 554 bytes .../bin/composite/after1/Monitor.class | Bin 0 -> 551 bytes .../ch8_ch14/bin/composite/after2/Body.class | Bin 0 -> 542 bytes .../bin/composite/after2/Client.class | Bin 0 -> 1578 bytes .../bin/composite/after2/Computer.class | Bin 0 -> 1372 bytes .../bin/composite/after2/ComputerDevice.class | Bin 0 -> 345 bytes .../bin/composite/after2/Keyboard.class | Bin 0 -> 554 bytes .../bin/composite/after2/Monitor.class | Bin 0 -> 551 bytes .../bin/composite/after2/Speaker.class | Bin 0 -> 551 bytes .../ch8_ch14/bin/composite/after3/Body.class | Bin 0 -> 287 bytes .../ch8_ch14/bin/composite/after3/CPU.class | Bin 0 -> 539 bytes .../bin/composite/after3/Client.class | Bin 0 -> 1917 bytes .../composite/after3/CompositeDevice.class | Bin 0 -> 1393 bytes .../bin/composite/after3/Computer.class | Bin 0 -> 299 bytes .../bin/composite/after3/ComputerDevice.class | Bin 0 -> 345 bytes .../bin/composite/after3/HardDisk.class | Bin 0 -> 554 bytes .../bin/composite/after3/Keyboard.class | Bin 0 -> 554 bytes .../bin/composite/after3/MainMemory.class | Bin 0 -> 560 bytes .../bin/composite/after3/Monitor.class | Bin 0 -> 551 bytes .../bin/composite/after3/Speaker.class | Bin 0 -> 551 bytes .../ch8_ch14/bin/composite/before1/Body.class | Bin 0 -> 529 bytes .../bin/composite/before1/Client.class | Bin 0 -> 1581 bytes .../bin/composite/before1/Computer.class | Bin 0 -> 1310 bytes .../bin/composite/before1/Keyboard.class | Bin 0 -> 541 bytes .../bin/composite/before1/Monitor.class | Bin 0 -> 538 bytes .../ch8_ch14/bin/composite/before2/Body.class | Bin 0 -> 529 bytes .../bin/composite/before2/Client.class | Bin 0 -> 1746 bytes .../bin/composite/before2/Computer.class | Bin 0 -> 1613 bytes .../bin/composite/before2/Keyboard.class | Bin 0 -> 541 bytes .../bin/composite/before2/Monitor.class | Bin 0 -> 538 bytes .../bin/composite/before2/Speaker.class | Bin 0 -> 538 bytes .../ch8_ch14/bin/composite/before3/Body.class | Bin 0 -> 529 bytes .../ch8_ch14/bin/composite/before3/CPU.class | Bin 0 -> 270 bytes .../bin/composite/before3/Client.class | Bin 0 -> 1746 bytes .../bin/composite/before3/Computer.class | Bin 0 -> 1625 bytes .../bin/composite/before3/HardDisk.class | Bin 0 -> 285 bytes .../bin/composite/before3/Keyboard.class | Bin 0 -> 541 bytes .../bin/composite/before3/MainMemory.class | Bin 0 -> 291 bytes .../bin/composite/before3/Monitor.class | Bin 0 -> 538 bytes .../bin/composite/before3/Speaker.class | Bin 0 -> 538 bytes .../directory/after/AbstractFile.class | Bin 0 -> 753 bytes .../example/directory/after/Client.class | Bin 0 -> 1055 bytes .../example/directory/after/Directory.class | Bin 0 -> 2001 bytes .../example/directory/after/File.class | Bin 0 -> 1115 bytes .../example/directory/before/Client.class | Bin 0 -> 1031 bytes .../example/directory/before/Directory.class | Bin 0 -> 2271 bytes .../example/directory/before/File.class | Bin 0 -> 1277 bytes .../bin/decorator/after1/Client.class | Bin 0 -> 677 bytes .../bin/decorator/after1/Display.class | Bin 0 -> 295 bytes .../decorator/after1/DisplayDecorator.class | Bin 0 -> 521 bytes .../bin/decorator/after1/LaneDecorator.class | Bin 0 -> 741 bytes .../bin/decorator/after1/RoadDisplay.class | Bin 0 -> 533 bytes .../bin/decorator/after2/Client.class | Bin 0 -> 847 bytes .../bin/decorator/after2/Display.class | Bin 0 -> 295 bytes .../decorator/after2/DisplayDecorator.class | Bin 0 -> 521 bytes .../bin/decorator/after2/LaneDecorator.class | Bin 0 -> 741 bytes .../bin/decorator/after2/RoadDisplay.class | Bin 0 -> 533 bytes .../decorator/after2/TrafficDecorator.class | Bin 0 -> 756 bytes .../bin/decorator/after3/Client.class | Bin 0 -> 963 bytes .../bin/decorator/after3/Client2.class | Bin 0 -> 1076 bytes .../decorator/after3/CrossingDecorator.class | Bin 0 -> 760 bytes .../bin/decorator/after3/Display.class | Bin 0 -> 295 bytes .../decorator/after3/DisplayDecorator.class | Bin 0 -> 521 bytes .../bin/decorator/after3/LaneDecorator.class | Bin 0 -> 741 bytes .../bin/decorator/after3/RoadDisplay.class | Bin 0 -> 533 bytes .../decorator/after3/TrafficDecorator.class | Bin 0 -> 756 bytes .../bin/decorator/before1/Client.class | Bin 0 -> 618 bytes .../bin/decorator/before1/RoadDisplay.class | Bin 0 -> 527 bytes .../before1/RoadDisplayWithLane.class | Bin 0 -> 661 bytes .../bin/decorator/before2/Client.class | Bin 0 -> 582 bytes .../bin/decorator/before2/RoadDisplay.class | Bin 0 -> 527 bytes .../before2/RoadDisplayWithLane.class | Bin 0 -> 575 bytes .../before2/RoadDisplayWithTraffic.class | Bin 0 -> 676 bytes .../bin/decorator/before3/Client.class | Bin 0 -> 590 bytes .../bin/decorator/before3/RoadDisplay.class | Bin 0 -> 527 bytes .../before3/RoadDisplayWithLane.class | Bin 0 -> 661 bytes .../before3/RoadDisplayWithLaneTraffic.class | Bin 0 -> 805 bytes .../before3/RoadDisplayWithTraffic.class | Bin 0 -> 676 bytes .../example/caroption/AirBagDecorator.class | Bin 0 -> 1188 bytes .../example/caroption/BasicCar.class | Bin 0 -> 571 bytes .../example/caroption/CarComponent.class | Bin 0 -> 386 bytes .../caroption/CarOptionDecorator.class | Bin 0 -> 709 bytes .../decorator/example/caroption/Client.class | Bin 0 -> 1499 bytes .../example/caroption/ESCDecorator.class | Bin 0 -> 1194 bytes .../example/caroption/NaviDecorator.class | Bin 0 -> 1181 bytes .../example/caroption/SCCDecorator.class | Bin 0 -> 1196 bytes .../example/email/BasicEMailContent.class | Bin 0 -> 529 bytes .../bin/decorator/example/email/Client.class | Bin 0 -> 1090 bytes .../example/email/ContentDecorator.class | Bin 0 -> 596 bytes .../example/email/EMailContent.class | Bin 0 -> 353 bytes .../example/email/ExternalDecorator.class | Bin 0 -> 1065 bytes .../example/email/SecureDecorator.class | Bin 0 -> 1045 bytes .../email/before/BasicEMailContent.class | Bin 0 -> 523 bytes .../example/email/before/Client.class | Bin 0 -> 1113 bytes .../email/before/ExternalEMailContent.class | Bin 0 -> 987 bytes .../email/before/SecureEMailContent.class | Bin 0 -> 967 bytes .../bin/factorymethod/after1/Client.class | Bin 0 -> 1062 bytes .../bin/factorymethod/after1/Direction.class | Bin 0 -> 1017 bytes .../after1/ElevatorController.class | Bin 0 -> 970 bytes .../after1/ElevatorManager.class | Bin 0 -> 2006 bytes .../after1/ElevatorScheduler.class | Bin 0 -> 238 bytes .../after1/ResponseTimeScheduler.class | Bin 0 -> 674 bytes .../after1/SchedulerFactory.class | Bin 0 -> 1538 bytes .../after1/SchedulingStrategyID.class | Bin 0 -> 1157 bytes .../after1/ThroughputScheduler.class | Bin 0 -> 668 bytes .../bin/factorymethod/after2/Client.class | Bin 0 -> 1062 bytes .../bin/factorymethod/after2/Direction.class | Bin 0 -> 1017 bytes .../after2/ElevatorController.class | Bin 0 -> 970 bytes .../after2/ElevatorManager.class | Bin 0 -> 1862 bytes .../after2/ElevatorScheduler.class | Bin 0 -> 238 bytes .../after2/ResponseTimeScheduler.class | Bin 0 -> 910 bytes .../after2/SchedulerFactory.class | Bin 0 -> 1572 bytes .../after2/SchedulingStrategyID.class | Bin 0 -> 1157 bytes .../after2/ThroughputScheduler.class | Bin 0 -> 904 bytes .../bin/factorymethod/after3/Client.class | Bin 0 -> 1055 bytes .../bin/factorymethod/after3/Direction.class | Bin 0 -> 1017 bytes .../after3/ElevatorController.class | Bin 0 -> 970 bytes .../after3/ElevatorManager.class | Bin 0 -> 1441 bytes ...ElevatorManagerWithDynamicScheduling.class | Bin 0 -> 962 bytes ...torManagerWithResponseTimeScheduling.class | Bin 0 -> 711 bytes ...vatorManagerWithThroughputScheduling.class | Bin 0 -> 703 bytes .../after3/ElevatorScheduler.class | Bin 0 -> 238 bytes .../after3/ResponseTimeScheduler.class | Bin 0 -> 910 bytes .../after3/ThroughputScheduler.class | Bin 0 -> 904 bytes .../bin/factorymethod/before1/Client.class | Bin 0 -> 704 bytes .../bin/factorymethod/before1/Direction.class | Bin 0 -> 1023 bytes .../before1/ElevatorController.class | Bin 0 -> 972 bytes .../before1/ElevatorManager.class | Bin 0 -> 1396 bytes .../before1/ThroughputScheduler.class | Bin 0 -> 628 bytes .../bin/factorymethod/before2/Client.class | Bin 0 -> 704 bytes .../bin/factorymethod/before2/Direction.class | Bin 0 -> 1023 bytes .../before2/ElevatorController.class | Bin 0 -> 972 bytes .../before2/ElevatorManager.class | Bin 0 -> 1719 bytes .../before2/ElevatorScheduler.class | Bin 0 -> 241 bytes .../before2/ResponseTimeScheduler.class | Bin 0 -> 681 bytes .../before2/ThroughputScheduler.class | Bin 0 -> 675 bytes .../factorymethod/example/carmode/Car.class | Bin 0 -> 1878 bytes .../example/carmode/CarState.class | Bin 0 -> 1198 bytes .../example/carmode/CarStateFactory.class | Bin 0 -> 1482 bytes .../example/carmode/CarStateID.class | Bin 0 -> 1087 bytes .../example/carmode/Client.class | Bin 0 -> 728 bytes .../example/carmode/LimpState.class | Bin 0 -> 1691 bytes .../example/carmode/NormalState.class | Bin 0 -> 1739 bytes .../example/carmode/before/Car.class | Bin 0 -> 1765 bytes .../example/carmode/before/CarState.class | Bin 0 -> 1233 bytes .../example/carmode/before/Client.class | Bin 0 -> 756 bytes .../example/carmode/before/LimpState.class | Bin 0 -> 1485 bytes .../example/carmode/before/NormalState.class | Bin 0 -> 1533 bytes .../factorymethod/example/motor/Client.class | Bin 0 -> 1100 bytes .../example/motor/Direction.class | Bin 0 -> 1055 bytes .../example/motor/ElevatorController.class | Bin 0 -> 1589 bytes .../example/motor/HyundaiMotor.class | Bin 0 -> 844 bytes .../factorymethod/example/motor/LGMotor.class | Bin 0 -> 824 bytes .../factorymethod/example/motor/Motor.class | Bin 0 -> 1114 bytes .../example/motor/MotorFactory.class | Bin 0 -> 1267 bytes .../example/motor/MotorStatus.class | Bin 0 -> 1076 bytes .../example/motor/MotorVendorID.class | Bin 0 -> 1086 bytes .../example/motor/before1/Client.class | Bin 0 -> 833 bytes .../example/motor/before1/Direction.class | Bin 0 -> 1103 bytes .../motor/before1/ElevatorController.class | Bin 0 -> 1659 bytes .../example/motor/before1/LGMotor.class | Bin 0 -> 1472 bytes .../example/motor/before1/MotorStatus.class | Bin 0 -> 1124 bytes .../example/motor/before2/Client.class | Bin 0 -> 985 bytes .../example/motor/before2/Direction.class | Bin 0 -> 1103 bytes .../motor/before2/ElevatorController.class | Bin 0 -> 1653 bytes .../example/motor/before2/HyundaiMotor.class | Bin 0 -> 884 bytes .../example/motor/before2/LGMotor.class | Bin 0 -> 864 bytes .../example/motor/before2/Motor.class | Bin 0 -> 1178 bytes .../example/motor/before2/MotorStatus.class | Bin 0 -> 1124 bytes .../ch8_ch14/bin/observer/after1/Client.class | Bin 0 -> 1387 bytes .../bin/observer/after1/DataSheetView.class | Bin 0 -> 1681 bytes .../bin/observer/after1/MinMaxView.class | Bin 0 -> 1538 bytes .../bin/observer/after1/Observer.class | Bin 0 -> 136 bytes .../bin/observer/after1/ScoreRecord.class | Bin 0 -> 880 bytes .../bin/observer/after1/Subject.class | Bin 0 -> 1131 bytes .../ch8_ch14/bin/observer/after2/Client.class | Bin 0 -> 1602 bytes .../bin/observer/after2/DataSheetView.class | Bin 0 -> 1681 bytes .../bin/observer/after2/MinMaxView.class | Bin 0 -> 1538 bytes .../bin/observer/after2/Observer.class | Bin 0 -> 136 bytes .../bin/observer/after2/ScoreRecord.class | Bin 0 -> 880 bytes .../bin/observer/after2/StatisticsView.class | Bin 0 -> 1767 bytes .../bin/observer/after2/Subject.class | Bin 0 -> 1131 bytes .../bin/observer/before1/Client.class | Bin 0 -> 1185 bytes .../bin/observer/before1/DataSheetView.class | Bin 0 -> 1654 bytes .../bin/observer/before1/ScoreRecord.class | Bin 0 -> 1107 bytes .../bin/observer/before2/Client.class | Bin 0 -> 1168 bytes .../bin/observer/before2/MinMaxView.class | Bin 0 -> 1515 bytes .../bin/observer/before2/ScoreRecord.class | Bin 0 -> 1092 bytes .../bin/observer/before3/Client.class | Bin 0 -> 1477 bytes .../bin/observer/before3/DataSheetView.class | Bin 0 -> 1654 bytes .../bin/observer/before3/MainMaxView.class | Bin 0 -> 1514 bytes .../bin/observer/before3/ScoreRecord.class | Bin 0 -> 1671 bytes .../bin/observer/before4/Client.class | Bin 0 -> 1525 bytes .../bin/observer/before4/DataSheetView.class | Bin 0 -> 1654 bytes .../bin/observer/before4/MainMaxView.class | Bin 0 -> 1514 bytes .../bin/observer/before4/ScoreRecord.class | Bin 0 -> 1675 bytes .../observer/example/battery/Battery.class | Bin 0 -> 577 bytes .../example/battery/BatteryLevelDisplay.class | Bin 0 -> 969 bytes .../bin/observer/example/battery/Client.class | Bin 0 -> 932 bytes .../example/battery/LowBatteryWarning.class | Bin 0 -> 1158 bytes .../observer/example/battery/Observer.class | Bin 0 -> 145 bytes .../observer/example/battery/Subject.class | Bin 0 -> 1185 bytes .../example/battery/before/Battery.class | Bin 0 -> 1157 bytes .../battery/before/BatteryLevelDisplay.class | Bin 0 -> 963 bytes .../example/battery/before/Client.class | Bin 0 -> 1155 bytes .../battery/before/LowBatteryWarning.class | Bin 0 -> 1152 bytes .../example/elevatorcontroller/Client.class | Bin 0 -> 1271 bytes .../ControlRoomDisplay.class | Bin 0 -> 1081 bytes .../ElevatorController.class | Bin 0 -> 650 bytes .../elevatorcontroller/ElevatorDisplay.class | Bin 0 -> 1076 bytes .../elevatorcontroller/FloorDisplay.class | Bin 0 -> 1064 bytes .../example/elevatorcontroller/Observer.class | Bin 0 -> 156 bytes .../example/elevatorcontroller/Subject.class | Bin 0 -> 1251 bytes .../elevatorcontroller/VoiceNotice.class | Bin 0 -> 1060 bytes .../bin/templatemethod/after1/Client.class | Bin 0 -> 803 bytes .../bin/templatemethod/after1/Direction.class | Bin 0 -> 1019 bytes .../bin/templatemethod/after1/Door.class | Bin 0 -> 707 bytes .../templatemethod/after1/DoorStatus.class | Bin 0 -> 1032 bytes .../templatemethod/after1/HyundaiMotor.class | Bin 0 -> 563 bytes .../bin/templatemethod/after1/LGMotor.class | Bin 0 -> 548 bytes .../bin/templatemethod/after1/Motor.class | Bin 0 -> 1372 bytes .../templatemethod/after1/MotorStatus.class | Bin 0 -> 1040 bytes .../bin/templatemethod/before1/Client.class | Bin 0 -> 828 bytes .../templatemethod/before1/Direction.class | Bin 0 -> 1025 bytes .../bin/templatemethod/before1/Door.class | Bin 0 -> 712 bytes .../templatemethod/before1/DoorStatus.class | Bin 0 -> 1038 bytes .../templatemethod/before1/HyundaiMotor.class | Bin 0 -> 1473 bytes .../templatemethod/before1/MotorStatus.class | Bin 0 -> 1046 bytes .../bin/templatemethod/before2/Client.class | Bin 0 -> 813 bytes .../templatemethod/before2/Direction.class | Bin 0 -> 1025 bytes .../bin/templatemethod/before2/Door.class | Bin 0 -> 712 bytes .../templatemethod/before2/DoorStatus.class | Bin 0 -> 1038 bytes .../templatemethod/before2/HyundaiMotor.class | Bin 0 -> 1473 bytes .../bin/templatemethod/before2/LGMotor.class | Bin 0 -> 1453 bytes .../templatemethod/before2/MotorStatus.class | Bin 0 -> 1046 bytes .../bin/templatemethod/before3/Client.class | Bin 0 -> 813 bytes .../templatemethod/before3/Direction.class | Bin 0 -> 1025 bytes .../bin/templatemethod/before3/Door.class | Bin 0 -> 712 bytes .../templatemethod/before3/DoorStatus.class | Bin 0 -> 1038 bytes .../templatemethod/before3/HyundaiMotor.class | Bin 0 -> 1283 bytes .../bin/templatemethod/before3/LGMotor.class | Bin 0 -> 1263 bytes .../bin/templatemethod/before3/Motor.class | Bin 0 -> 797 bytes .../templatemethod/before3/MotorStatus.class | Bin 0 -> 1046 bytes .../example/reportgenerator/Client.class | Bin 0 -> 1536 bytes .../ComplexReportGenerator.class | Bin 0 -> 2050 bytes .../example/reportgenerator/Customer.class | Bin 0 -> 866 bytes .../reportgenerator/ReportGenerator.class | Bin 0 -> 2376 bytes .../SimpleReportGenerator.class | Bin 0 -> 1714 bytes .../reportgenerator/before/Client.class | Bin 0 -> 1396 bytes .../reportgenerator/before/Customer.class | Bin 0 -> 880 bytes .../before/SimpleReportGenerator.class | Bin 0 -> 1673 bytes .../src/abstractfactory/after1/Client.java | 20 +++ .../src/abstractfactory/after1/Direction.java | 3 + .../src/abstractfactory/after1/Door.java | 24 ++++ .../abstractfactory/after1/DoorStatus.java | 3 + .../after1/ElevatorFactory.java | 6 + .../abstractfactory/after1/HyundaiDoor.java | 10 ++ .../after1/HyundaiElevatorFactory.java | 10 ++ .../abstractfactory/after1/HyundaiMotor.java | 7 + .../src/abstractfactory/after1/LGDoor.java | 10 ++ .../after1/LGElevatorFactory.java | 10 ++ .../src/abstractfactory/after1/LGMotor.java | 7 + .../src/abstractfactory/after1/Motor.java | 32 +++++ .../abstractfactory/after1/MotorStatus.java | 3 + .../src/abstractfactory/after2/Client.java | 21 +++ .../src/abstractfactory/after2/Direction.java | 3 + .../src/abstractfactory/after2/Door.java | 24 ++++ .../abstractfactory/after2/DoorStatus.java | 3 + .../after2/ElevatorFactory.java | 6 + .../abstractfactory/after2/HyundaiDoor.java | 10 ++ .../after2/HyundaiElevatorFactory.java | 10 ++ .../abstractfactory/after2/HyundaiMotor.java | 7 + .../src/abstractfactory/after2/LGDoor.java | 10 ++ .../after2/LGElevatorFactory.java | 10 ++ .../src/abstractfactory/after2/LGMotor.java | 7 + .../src/abstractfactory/after2/Motor.java | 32 +++++ .../abstractfactory/after2/MotorStatus.java | 3 + .../abstractfactory/after2/SamsungDoor.java | 10 ++ .../after2/SamsungElevatorFactory.java | 10 ++ .../abstractfactory/after2/SamsungMotor.java | 7 + .../src/abstractfactory/after3/Client.java | 24 ++++ .../src/abstractfactory/after3/Direction.java | 3 + .../src/abstractfactory/after3/Door.java | 24 ++++ .../abstractfactory/after3/DoorStatus.java | 3 + .../after3/ElevatorFactory.java | 6 + .../after3/ElevatorFactoryFactory.java | 13 ++ .../abstractfactory/after3/HyundaiDoor.java | 10 ++ .../after3/HyundaiElevatorFactory.java | 19 +++ .../abstractfactory/after3/HyundaiMotor.java | 7 + .../src/abstractfactory/after3/LGDoor.java | 10 ++ .../after3/LGElevatorFactory.java | 18 +++ .../src/abstractfactory/after3/LGMotor.java | 7 + .../src/abstractfactory/after3/Motor.java | 32 +++++ .../abstractfactory/after3/MotorStatus.java | 3 + .../abstractfactory/after3/SamsungDoor.java | 10 ++ .../after3/SamsungElevatorFactory.java | 19 +++ .../abstractfactory/after3/SamsungMotor.java | 7 + .../src/abstractfactory/after3/VendorID.java | 3 + .../src/abstractfactory/before1/Client.java | 19 +++ .../abstractfactory/before1/Direction.java | 3 + .../src/abstractfactory/before1/Door.java | 23 +++ .../abstractfactory/before1/DoorFactory.java | 12 ++ .../abstractfactory/before1/DoorStatus.java | 3 + .../abstractfactory/before1/HyundaiDoor.java | 10 ++ .../abstractfactory/before1/HyundaiMotor.java | 7 + .../src/abstractfactory/before1/LGDoor.java | 10 ++ .../src/abstractfactory/before1/LGMotor.java | 7 + .../src/abstractfactory/before1/Motor.java | 32 +++++ .../abstractfactory/before1/MotorFactory.java | 12 ++ .../abstractfactory/before1/MotorStatus.java | 3 + .../src/abstractfactory/before1/VendorID.java | 3 + .../example/navi/BasicNaviFactory.java | 16 +++ .../example/navi/CheapGPS.java | 8 ++ .../abstractfactory/example/navi/Client.java | 24 ++++ .../example/navi/ClientBefore.java | 17 +++ .../example/navi/ExpensiveGPS.java | 8 ++ .../example/navi/FastPathFinder.java | 8 ++ .../src/abstractfactory/example/navi/GPS.java | 5 + .../example/navi/HDScreen.java | 7 + .../example/navi/LargeMap.java | 4 + .../example/navi/Location.java | 4 + .../src/abstractfactory/example/navi/Map.java | 4 + .../example/navi/NaviFactory.java | 8 ++ .../abstractfactory/example/navi/Path.java | 4 + .../example/navi/PathFinder.java | 5 + .../example/navi/PremiumNaviFactory.java | 16 +++ .../example/navi/SDScreen.java | 7 + .../abstractfactory/example/navi/Screen.java | 5 + .../example/navi/SlowPathFinder.java | 8 ++ .../example/navi/SmallMap.java | 4 + .../navisimulation/BasicNaviFactory.java | 16 +++ .../example/navisimulation/CheapGPS.java | 10 ++ .../example/navisimulation/Client.java | 20 +++ .../example/navisimulation/ExpensiveGPS.java | 10 ++ .../navisimulation/FastPathFinder.java | 9 ++ .../example/navisimulation/GPS.java | 5 + .../example/navisimulation/GPSSimulator.java | 8 ++ .../example/navisimulation/HDScreen.java | 7 + .../example/navisimulation/LargeMap.java | 5 + .../example/navisimulation/Location.java | 5 + .../example/navisimulation/Map.java | 5 + .../example/navisimulation/NaviFactory.java | 8 ++ .../navisimulation/NaviTestFactory.java | 16 +++ .../example/navisimulation/Path.java | 5 + .../example/navisimulation/PathFinder.java | 7 + .../navisimulation/PremiumNaviFactory.java | 16 +++ .../example/navisimulation/SDScreen.java | 7 + .../example/navisimulation/Screen.java | 5 + .../navisimulation/SlowPathFinder.java | 8 ++ .../example/navisimulation/SmallMap.java | 5 + .../example/navisimulation/TestMap.java | 4 + .../navisimulation/TestPathFinder.java | 8 ++ .../example/navisimulation/TestScreen.java | 7 + .../example/power/AveragePowerGyroscope.java | 5 + .../power/AveragePowerLightSensor.java | 5 + .../power/AveragePowerMotionSensor.java | 5 + .../power/AveragePowerSensorFactory.java | 13 ++ .../example/power/Gyroscope.java | 5 + .../example/power/LightSensor.java | 5 + .../example/power/LowPowerGyroscope.java | 5 + .../example/power/LowPowerLightSensor.java | 5 + .../example/power/LowPowerMotionSensor.java | 5 + .../example/power/LowPowerSensorFactory.java | 14 ++ .../example/power/MotionSensor.java | 5 + .../example/power/SensorFactory.java | 7 + .../ch8_ch14/src/command/after1/Alarm.java | 7 + .../src/command/after1/AlarmOnCommand.java | 12 ++ .../ch8_ch14/src/command/after1/Button.java | 14 ++ .../ch8_ch14/src/command/after1/Client.java | 19 +++ .../ch8_ch14/src/command/after1/Command.java | 5 + .../ch8_ch14/src/command/after1/Lamp.java | 7 + .../src/command/after1/LampOnCommand.java | 11 ++ .../ch8_ch14/src/command/after2/Button.java | 14 ++ .../ch8_ch14/src/command/after2/Client.java | 15 ++ .../ch8_ch14/src/command/after2/Command.java | 5 + .../ch8_ch14/src/command/after2/Lamp.java | 10 ++ .../src/command/after2/LampOffCommand.java | 11 ++ .../src/command/after2/LampOnCommand.java | 11 ++ .../ch8_ch14/src/command/before1/Button.java | 11 ++ .../ch8_ch14/src/command/before1/Client.java | 9 ++ .../ch8_ch14/src/command/before1/Lamp.java | 7 + .../ch8_ch14/src/command/before2/Alarm.java | 7 + .../ch8_ch14/src/command/before2/Button.java | 12 ++ .../ch8_ch14/src/command/before2/Client.java | 9 ++ .../ch8_ch14/src/command/before3/Alarm.java | 7 + .../ch8_ch14/src/command/before3/Button.java | 23 +++ .../ch8_ch14/src/command/before3/Client.java | 15 ++ .../ch8_ch14/src/command/before3/Lamp.java | 7 + .../example/elevatorbutton/Client.java | 30 ++++ .../example/elevatorbutton/Command.java | 5 + .../DestinationSelectionCommand.java | 13 ++ .../example/elevatorbutton/Direction.java | 5 + .../elevatorbutton/ElevatorButton.java | 11 ++ .../elevatorbutton/ElevatorController.java | 13 ++ .../elevatorbutton/ElevatorManager.java | 21 +++ .../ElevatorRequestCommand.java | 15 ++ .../remotecontroller2/ChannelController.java | 20 +++ .../remotecontroller2/ChannelDownCommand.java | 11 ++ .../remotecontroller2/ChannelUpCommand.java | 11 ++ .../example/remotecontroller2/Client.java | 23 +++ .../example/remotecontroller2/Command.java | 5 + .../remotecontroller2/MuteCommand.java | 11 ++ .../remotecontroller2/PowerCommand.java | 11 ++ .../remotecontroller2/RemoteController.java | 26 ++++ .../command/example/remotecontroller2/TV.java | 30 ++++ .../example/twobuttoncontroller/Client2.java | 19 +++ .../example/twobuttoncontroller/Client3.java | 20 +++ .../example/twobuttoncontroller/Command.java | 5 + .../twobuttoncontroller/MuteCommand.java | 11 ++ .../twobuttoncontroller/PowerCommand.java | 11 ++ .../example/twobuttoncontroller/TV.java | 32 +++++ .../TwoButtonController.java | 18 +++ .../twobuttoncontroller/before/Client.java | 14 ++ .../twobuttoncontroller/before/TV.java | 21 +++ .../before/TwoButtonController.java | 14 ++ .../ch8_ch14/src/composite/after1/Body.java | 17 +++ .../ch8_ch14/src/composite/after1/Client.java | 20 +++ .../src/composite/after1/Computer.java | 27 ++++ .../src/composite/after1/ComputerDevice.java | 7 + .../src/composite/after1/Keyboard.java | 17 +++ .../src/composite/after1/Monitor.java | 17 +++ .../ch8_ch14/src/composite/after2/Body.java | 17 +++ .../ch8_ch14/src/composite/after2/Client.java | 22 +++ .../src/composite/after2/Computer.java | 27 ++++ .../src/composite/after2/ComputerDevice.java | 7 + .../src/composite/after2/Keyboard.java | 17 +++ .../src/composite/after2/Monitor.java | 17 +++ .../src/composite/after2/Speaker.java | 17 +++ .../ch8_ch14/src/composite/after3/Body.java | 4 + .../ch8_ch14/src/composite/after3/CPU.java | 17 +++ .../ch8_ch14/src/composite/after3/Client.java | 30 ++++ .../src/composite/after3/CompositeDevice.java | 27 ++++ .../src/composite/after3/Computer.java | 4 + .../src/composite/after3/ComputerDevice.java | 7 + .../src/composite/after3/HardDisk.java | 17 +++ .../src/composite/after3/Keyboard.java | 17 +++ .../src/composite/after3/MainMemory.java | 17 +++ .../src/composite/after3/Monitor.java | 17 +++ .../src/composite/after3/Speaker.java | 17 +++ .../ch8_ch14/src/composite/before1/Body.java | 13 ++ .../src/composite/before1/Client.java | 23 +++ .../src/composite/before1/Computer.java | 25 ++++ .../src/composite/before1/Keyboard.java | 17 +++ .../src/composite/before1/Monitor.java | 13 ++ .../ch8_ch14/src/composite/before2/Body.java | 17 +++ .../src/composite/before2/Client.java | 22 +++ .../src/composite/before2/Computer.java | 29 ++++ .../src/composite/before2/Keyboard.java | 17 +++ .../src/composite/before2/Monitor.java | 17 +++ .../src/composite/before2/Speaker.java | 13 ++ .../ch8_ch14/src/composite/before3/Body.java | 20 +++ .../ch8_ch14/src/composite/before3/CPU.java | 5 + .../src/composite/before3/Client.java | 24 ++++ .../src/composite/before3/Computer.java | 39 +++++ .../src/composite/before3/HardDisk.java | 5 + .../src/composite/before3/Keyboard.java | 17 +++ .../src/composite/before3/MainMemory.java | 5 + .../src/composite/before3/Monitor.java | 17 +++ .../src/composite/before3/Speaker.java | 17 +++ .../example/directory/after/AbstractFile.java | 14 ++ .../example/directory/after/Client.java | 21 +++ .../example/directory/after/Directory.java | 28 ++++ .../example/directory/after/File.java | 16 +++ .../example/directory/before/Client.java | 21 +++ .../example/directory/before/Directory.java | 44 ++++++ .../example/directory/before/File.java | 22 +++ .../ch8_ch14/src/decorator/after1/Client.java | 11 ++ .../src/decorator/after1/Display.java | 5 + .../decorator/after1/DisplayDecorator.java | 11 ++ .../src/decorator/after1/LaneDecorator.java | 14 ++ .../src/decorator/after1/RoadDisplay.java | 7 + .../ch8_ch14/src/decorator/after2/Client.java | 17 +++ .../src/decorator/after2/Display.java | 5 + .../decorator/after2/DisplayDecorator.java | 12 ++ .../src/decorator/after2/LaneDecorator.java | 17 +++ .../src/decorator/after2/RoadDisplay.java | 9 ++ .../decorator/after2/TrafficDecorator.java | 14 ++ .../ch8_ch14/src/decorator/after3/Client.java | 17 +++ .../src/decorator/after3/Client2.java | 17 +++ .../decorator/after3/CrossingDecorator.java | 14 ++ .../src/decorator/after3/Display.java | 5 + .../decorator/after3/DisplayDecorator.java | 12 ++ .../src/decorator/after3/LaneDecorator.java | 17 +++ .../src/decorator/after3/RoadDisplay.java | 9 ++ .../decorator/after3/TrafficDecorator.java | 15 ++ .../src/decorator/before1/Client.java | 11 ++ .../src/decorator/before1/RoadDisplay.java | 7 + .../before1/RoadDisplayWithLane.java | 11 ++ .../src/decorator/before2/Client.java | 8 ++ .../src/decorator/before2/RoadDisplay.java | 9 ++ .../before2/RoadDisplayWithLane.java | 10 ++ .../before2/RoadDisplayWithTraffic.java | 11 ++ .../src/decorator/before3/Client.java | 9 ++ .../src/decorator/before3/RoadDisplay.java | 9 ++ .../before3/RoadDisplayWithLane.java | 12 ++ .../before3/RoadDisplayWithLaneTraffic.java | 16 +++ .../before3/RoadDisplayWithTraffic.java | 11 ++ .../example/caroption/AirBagDecorator.java | 22 +++ .../decorator/example/caroption/BasicCar.java | 14 ++ .../example/caroption/CarComponent.java | 6 + .../example/caroption/CarOptionDecorator.java | 14 ++ .../decorator/example/caroption/Client.java | 42 ++++++ .../example/caroption/ESCDecorator.java | 21 +++ .../example/caroption/NaviDecorator.java | 21 +++ .../example/caroption/SCCDecorator.java | 21 +++ .../example/email/BasicEMailContent.java | 9 ++ .../src/decorator/example/email/Client.java | 17 +++ .../example/email/ContentDecorator.java | 11 ++ .../decorator/example/email/EMailContent.java | 5 + .../example/email/ExternalDecorator.java | 15 ++ .../example/email/SecureDecorator.java | 15 ++ .../email/before/BasicEMailContent.java | 9 ++ .../example/email/before/Client.java | 14 ++ .../email/before/ExternalEMailContent.java | 15 ++ .../email/before/SecureEMailContent.java | 15 ++ .../src/factorymethod/after1/Client.java | 14 ++ .../src/factorymethod/after1/Direction.java | 5 + .../after1/ElevatorController.java | 15 ++ .../factorymethod/after1/ElevatorManager.java | 32 +++++ .../after1/ElevatorScheduler.java | 7 + .../after1/ResponseTimeScheduler.java | 8 ++ .../after1/SchedulerFactory.java | 23 +++ .../after1/SchedulingStrategyID.java | 3 + .../after1/ThroughputScheduler.java | 12 ++ .../src/factorymethod/after2/Client.java | 14 ++ .../src/factorymethod/after2/Direction.java | 5 + .../after2/ElevatorController.java | 15 ++ .../factorymethod/after2/ElevatorManager.java | 25 ++++ .../after2/ElevatorScheduler.java | 5 + .../after2/ResponseTimeScheduler.java | 14 ++ .../after2/SchedulerFactory.java | 23 +++ .../after2/SchedulingStrategyID.java | 3 + .../after2/ThroughputScheduler.java | 14 ++ .../src/factorymethod/after3/Client.java | 14 ++ .../src/factorymethod/after3/Direction.java | 5 + .../after3/ElevatorController.java | 15 ++ .../factorymethod/after3/ElevatorManager.java | 22 +++ .../ElevatorManagerWithDynamicScheduling.java | 18 +++ ...atorManagerWithResponseTimeScheduling.java | 11 ++ ...evatorManagerWithThroughputScheduling.java | 12 ++ .../after3/ElevatorScheduler.java | 5 + .../after3/ResponseTimeScheduler.java | 14 ++ .../after3/ThroughputScheduler.java | 14 ++ .../src/factorymethod/before1/Client.java | 8 ++ .../src/factorymethod/before1/Direction.java | 5 + .../before1/ElevatorController.java | 15 ++ .../before1/ElevatorManager.java | 21 +++ .../before1/ThroughputScheduler.java | 7 + .../src/factorymethod/before2/Client.java | 9 ++ .../src/factorymethod/before2/Direction.java | 5 + .../before2/ElevatorController.java | 15 ++ .../before2/ElevatorManager.java | 30 ++++ .../before2/ElevatorScheduler.java | 5 + .../before2/ResponseTimeScheduler.java | 7 + .../before2/ThroughputScheduler.java | 8 ++ .../factorymethod/example/carmode/Car.java | 48 +++++++ .../example/carmode/CarState.java | 23 +++ .../example/carmode/CarStateFactory.java | 12 ++ .../example/carmode/CarStateID.java | 5 + .../factorymethod/example/carmode/Client.java | 26 ++++ .../example/carmode/LimpState.java | 27 ++++ .../example/carmode/NormalState.java | 30 ++++ .../example/carmode/before/Car.java | 44 ++++++ .../example/carmode/before/CarState.java | 23 +++ .../example/carmode/before/Client.java | 26 ++++ .../example/carmode/before/LimpState.java | 20 +++ .../example/carmode/before/NormalState.java | 23 +++ .../factorymethod/example/motor/Client.java | 15 ++ .../example/motor/Direction.java | 3 + .../example/motor/ElevatorController.java | 28 ++++ .../example/motor/HyundaiMotor.java | 7 + .../factorymethod/example/motor/LGMotor.java | 7 + .../factorymethod/example/motor/Motor.java | 24 ++++ .../example/motor/MotorFactory.java | 13 ++ .../example/motor/MotorStatus.java | 3 + .../example/motor/MotorVendorID.java | 3 + .../example/motor/before1/Client.java | 11 ++ .../example/motor/before1/Direction.java | 3 + .../motor/before1/ElevatorController.java | 28 ++++ .../example/motor/before1/LGMotor.java | 23 +++ .../example/motor/before1/MotorStatus.java | 3 + .../example/motor/before2/Client.java | 16 +++ .../example/motor/before2/Direction.java | 3 + .../motor/before2/ElevatorController.java | 28 ++++ .../example/motor/before2/HyundaiMotor.java | 7 + .../example/motor/before2/LGMotor.java | 7 + .../example/motor/before2/Motor.java | 24 ++++ .../example/motor/before2/MotorStatus.java | 3 + .../ch8_ch14/src/observer/after1/Client.java | 21 +++ .../src/observer/after1/DataSheetView.java | 24 ++++ .../src/observer/after1/MinMaxView.java | 22 +++ .../src/observer/after1/Observer.java | 5 + .../src/observer/after1/ScoreRecord.java | 16 +++ .../ch8_ch14/src/observer/after1/Subject.java | 18 +++ .../ch8_ch14/src/observer/after2/Client.java | 29 ++++ .../src/observer/after2/DataSheetView.java | 24 ++++ .../src/observer/after2/MinMaxView.java | 22 +++ .../src/observer/after2/Observer.java | 5 + .../src/observer/after2/ScoreRecord.java | 18 +++ .../src/observer/after2/StatisticsView.java | 24 ++++ .../ch8_ch14/src/observer/after2/Subject.java | 18 +++ .../ch8_ch14/src/observer/before1/Client.java | 16 +++ .../src/observer/before1/DataSheetView.java | 24 ++++ .../src/observer/before1/ScoreRecord.java | 21 +++ .../ch8_ch14/src/observer/before2/Client.java | 16 +++ .../src/observer/before2/MinMaxView.java | 22 +++ .../src/observer/before2/ScoreRecord.java | 21 +++ .../ch8_ch14/src/observer/before3/Client.java | 20 +++ .../src/observer/before3/DataSheetView.java | 24 ++++ .../src/observer/before3/MainMaxView.java | 22 +++ .../src/observer/before3/ScoreRecord.java | 27 ++++ .../ch8_ch14/src/observer/before4/Client.java | 26 ++++ .../src/observer/before4/DataSheetView.java | 24 ++++ .../src/observer/before4/MainMaxView.java | 22 +++ .../src/observer/before4/ScoreRecord.java | 30 ++++ .../src/observer/example/battery/Battery.java | 10 ++ .../example/battery/BatteryLevelDisplay.java | 12 ++ .../src/observer/example/battery/Client.java | 17 +++ .../example/battery/LowBatteryWarning.java | 14 ++ .../observer/example/battery/Observer.java | 5 + .../src/observer/example/battery/Subject.java | 18 +++ .../example/battery/before/Battery.java | 21 +++ .../battery/before/BatteryLevelDisplay.java | 12 ++ .../example/battery/before/Client.java | 17 +++ .../battery/before/LowBatteryWarning.java | 14 ++ .../example/elevatorcontroller/Client.java | 20 +++ .../ControlRoomDisplay.java | 12 ++ .../ElevatorController.java | 12 ++ .../elevatorcontroller/ElevatorDisplay.java | 12 ++ .../elevatorcontroller/FloorDisplay.java | 12 ++ .../example/elevatorcontroller/Observer.java | 5 + .../example/elevatorcontroller/Subject.java | 18 +++ .../elevatorcontroller/VoiceNotice.java | 13 ++ .../src/templatemethod/after1/Client.java | 9 ++ .../src/templatemethod/after1/Direction.java | 3 + .../src/templatemethod/after1/Door.java | 17 +++ .../src/templatemethod/after1/DoorStatus.java | 3 + .../templatemethod/after1/HyundaiMotor.java | 10 ++ .../src/templatemethod/after1/LGMotor.java | 10 ++ .../src/templatemethod/after1/Motor.java | 30 ++++ .../templatemethod/after1/MotorStatus.java | 3 + .../src/templatemethod/before1/Client.java | 9 ++ .../src/templatemethod/before1/Direction.java | 3 + .../src/templatemethod/before1/Door.java | 17 +++ .../templatemethod/before1/DoorStatus.java | 3 + .../templatemethod/before1/HyundaiMotor.java | 32 +++++ .../templatemethod/before1/MotorStatus.java | 3 + .../src/templatemethod/before2/Client.java | 9 ++ .../src/templatemethod/before2/Direction.java | 3 + .../src/templatemethod/before2/Door.java | 17 +++ .../templatemethod/before2/DoorStatus.java | 3 + .../templatemethod/before2/HyundaiMotor.java | 32 +++++ .../src/templatemethod/before2/LGMotor.java | 32 +++++ .../templatemethod/before2/MotorStatus.java | 3 + .../src/templatemethod/before3/Client.java | 9 ++ .../src/templatemethod/before3/Direction.java | 3 + .../src/templatemethod/before3/Door.java | 17 +++ .../templatemethod/before3/DoorStatus.java | 3 + .../templatemethod/before3/HyundaiMotor.java | 22 +++ .../src/templatemethod/before3/LGMotor.java | 22 +++ .../src/templatemethod/before3/Motor.java | 17 +++ .../templatemethod/before3/MotorStatus.java | 3 + .../example/reportgenerator/Client.java | 23 +++ .../ComplexReportGenerator.java | 23 +++ .../example/reportgenerator/Customer.java | 23 +++ .../reportgenerator/ReportGenerator.java | 32 +++++ .../SimpleReportGenerator.java | 18 +++ .../reportgenerator/before/Client.java | 20 +++ .../reportgenerator/before/Customer.java | 23 +++ .../before/SimpleReportGenerator.java | 16 +++ 1124 files changed, 8453 insertions(+) create mode 100644 java-oop-design-pattern/RemoteSystemsTempFiles/.project create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/.classpath create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/.project create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/.settings/org.eclipse.jdt.core.prefs create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Course.class create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Main.class create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Student.class create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Transcript.class create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/src/Course.java create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/src/Main.java create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/src/Student.java create mode 100644 java-oop-design-pattern/ch1-Student-Transcript-Course/src/Transcript.java create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.classpath" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.project" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/CartForSongs.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/DiscountedMode.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/NonDiscounted.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/OnSale.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/Song.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/TodayEvent.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/CartForSongs.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/DiscountedMode.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/Main.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/NonDiscounted.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/OnSale.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/Song.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/TodayEvent.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.classpath" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.project" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/CartForSongs.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/Song.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/CartForSongs.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/Main.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/Song.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.classpath" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.project" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2346/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2346/bin/Queue.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2346/src/Main.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2346/src/Queue.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.classpath" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.project" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2347/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2347/bin/Queue.class" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2347/src/Main.java" create mode 100644 "java-oop-design-pattern/ch2-\353\254\270\354\240\2347/src/Queue.java" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.classpath" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.project" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/A.class" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/A1.class" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/A.java" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/A1.java" create mode 100644 "java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/Main.java" create mode 100644 java-oop-design-pattern/ch3-DIP/.classpath create mode 100644 java-oop-design-pattern/ch3-DIP/.project create mode 100644 java-oop-design-pattern/ch3-DIP/.settings/org.eclipse.jdt.core.prefs create mode 100644 java-oop-design-pattern/ch3-DIP/bin/Kid.class create mode 100644 java-oop-design-pattern/ch3-DIP/bin/Lego.class create mode 100644 java-oop-design-pattern/ch3-DIP/bin/Main.class create mode 100644 java-oop-design-pattern/ch3-DIP/bin/Robot.class create mode 100644 java-oop-design-pattern/ch3-DIP/bin/Toy.class create mode 100644 java-oop-design-pattern/ch3-DIP/src/Kid.java create mode 100644 java-oop-design-pattern/ch3-DIP/src/Lego.java create mode 100644 java-oop-design-pattern/ch3-DIP/src/Main.java create mode 100644 java-oop-design-pattern/ch3-DIP/src/Robot.java create mode 100644 java-oop-design-pattern/ch3-DIP/src/Toy.java create mode 100644 java-oop-design-pattern/ch3-LSP/.classpath create mode 100644 java-oop-design-pattern/ch3-LSP/.project create mode 100644 java-oop-design-pattern/ch3-LSP/.settings/org.eclipse.jdt.core.prefs create mode 100644 java-oop-design-pattern/ch3-LSP/bin/Bag.class create mode 100644 java-oop-design-pattern/ch3-LSP/bin/DiscountedBag.class create mode 100644 java-oop-design-pattern/ch3-LSP/bin/Main.class create mode 100644 java-oop-design-pattern/ch3-LSP/src/Bag.java create mode 100644 java-oop-design-pattern/ch3-LSP/src/DiscountedBag.java create mode 100644 java-oop-design-pattern/ch3-LSP/src/Main.java create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.classpath" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.project" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/DefaultStrategy.class" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayCalculationStrategy.class" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayCalculator.class" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayGUI.class" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/DefaultStrategy.java" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/Main.java" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayCalculationStrategy.java" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayCalculator.java" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayGUI.java" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.classpath" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.project" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410/bin/CalculatePayMachine.class" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410/src/CalculatePayMachine.java" create mode 100644 "java-oop-design-pattern/ch3-\353\254\270\354\240\23410/src/Main.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.classpath" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.project" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Ball.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/BallFrame.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/BlueDrawStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Client.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DiagonalMoveStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DirectionStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DrawStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Field.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/HorizonalMoveStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/RedDrawStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/VerticalMoveStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Ball.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/BallFrame.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/BlueDrawStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Client.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DiagonalMoveStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DirectionStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DrawStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Field.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/HorizonalMoveStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/RedDrawStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/VerticalMoveStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/.classpath" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/.project" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run1.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run2.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run3.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Client.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/ImageService.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/MovingStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running$Controller.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running$Field.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/RunningStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/StandingStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/WalkingStrategy.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/stand.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/walk1.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/walk2.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run1.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run2.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run3.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/Client.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/ImageService.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/MovingStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/Running.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/RunningStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/StandingStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/WalkingStrategy.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/stand.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/walk1.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/walk2.gif" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.classpath" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.project" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Client.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/HD108ReceiptPrinter.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Item.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Sale.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Client.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/HD108ReceiptPrinter.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Item.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Sale.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.classpath" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.project" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Client.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/FakePrinter.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/HD108ReceiptPrinter.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Item.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/ReceiptPrinter.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Sale.class" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Client.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/FakePrinter.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/HD108ReceiptPrinter.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Item.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/ReceiptPrinter.java" create mode 100644 "java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Sale.java" create mode 100644 java-oop-design-pattern/ch6-printerManager/.classpath create mode 100644 java-oop-design-pattern/ch6-printerManager/.project create mode 100644 java-oop-design-pattern/ch6-printerManager/.settings/org.eclipse.jdt.core.prefs create mode 100644 java-oop-design-pattern/ch6-printerManager/bin/Main.class create mode 100644 java-oop-design-pattern/ch6-printerManager/bin/Printer.class create mode 100644 java-oop-design-pattern/ch6-printerManager/bin/PrinterManager.class create mode 100644 java-oop-design-pattern/ch6-printerManager/bin/UserThread.class create mode 100644 java-oop-design-pattern/ch6-printerManager/src/Main.java create mode 100644 java-oop-design-pattern/ch6-printerManager/src/Printer.java create mode 100644 java-oop-design-pattern/ch6-printerManager/src/PrinterManager.java create mode 100644 java-oop-design-pattern/ch6-printerManager/src/UserThread.java create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.classpath" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.project" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/Server.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/ServerFactory.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/Main.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/Server.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/ServerFactory.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.classpath" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.project" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/FakeServer.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Main$1.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Main.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/RealServer.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Server.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactory$1.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactory.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactoryTests$1.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactoryTests.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerProvider.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/UseServer.class" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/FakeServer.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/Main.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/RealServer.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/Server.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerFactory.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerFactoryTests.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerProvider.java" create mode 100644 "java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/UseServer.java" create mode 100644 java-oop-design-pattern/ch7-3-bookRental/.classpath create mode 100644 java-oop-design-pattern/ch7-3-bookRental/.project create mode 100644 java-oop-design-pattern/ch7-3-bookRental/.settings/org.eclipse.jdt.core.prefs create mode 100644 java-oop-design-pattern/ch7-3-bookRental/bin/Book.class create mode 100644 java-oop-design-pattern/ch7-3-bookRental/bin/BookDiscountPricePolicy.class create mode 100644 java-oop-design-pattern/ch7-3-bookRental/bin/Client.class create mode 100644 java-oop-design-pattern/ch7-3-bookRental/bin/Member.class create mode 100644 java-oop-design-pattern/ch7-3-bookRental/bin/MemberDiscountPricePolicy.class create mode 100644 java-oop-design-pattern/ch7-3-bookRental/bin/OrdinaryPricePolicy.class create mode 100644 java-oop-design-pattern/ch7-3-bookRental/bin/PricePolicy.class create mode 100644 java-oop-design-pattern/ch7-3-bookRental/bin/Rental.class create mode 100644 java-oop-design-pattern/ch7-3-bookRental/src/Book.java create mode 100644 java-oop-design-pattern/ch7-3-bookRental/src/BookDiscountPricePolicy.java create mode 100644 java-oop-design-pattern/ch7-3-bookRental/src/Client.java create mode 100644 java-oop-design-pattern/ch7-3-bookRental/src/Member.java create mode 100644 java-oop-design-pattern/ch7-3-bookRental/src/MemberDiscountPricePolicy.java create mode 100644 java-oop-design-pattern/ch7-3-bookRental/src/OrdinaryPricePolicy.java create mode 100644 java-oop-design-pattern/ch7-3-bookRental/src/PricePolicy.java create mode 100644 java-oop-design-pattern/ch7-3-bookRental/src/Rental.java create mode 100644 java-oop-design-pattern/ch7-light3states/.classpath create mode 100644 java-oop-design-pattern/ch7-light3states/.project create mode 100644 java-oop-design-pattern/ch7-light3states/.settings/org.eclipse.jdt.core.prefs create mode 100644 java-oop-design-pattern/ch7-light3states/bin/Client.class create mode 100644 java-oop-design-pattern/ch7-light3states/bin/Light.class create mode 100644 java-oop-design-pattern/ch7-light3states/bin/LightState.class create mode 100644 java-oop-design-pattern/ch7-light3states/bin/OFF.class create mode 100644 java-oop-design-pattern/ch7-light3states/bin/ON.class create mode 100644 java-oop-design-pattern/ch7-light3states/bin/SLEEPING.class create mode 100644 java-oop-design-pattern/ch7-light3states/src/Client.java create mode 100644 java-oop-design-pattern/ch7-light3states/src/Light.java create mode 100644 java-oop-design-pattern/ch7-light3states/src/LightState.java create mode 100644 java-oop-design-pattern/ch7-light3states/src/OFF.java create mode 100644 java-oop-design-pattern/ch7-light3states/src/ON.java create mode 100644 java-oop-design-pattern/ch7-light3states/src/SLEEPING.java create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.classpath" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.project" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.settings/org.eclipse.core.resources.prefs" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.settings/org.eclipse.jdt.core.prefs" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/Client.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/Drinking.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/EnoughMoneyState.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/MoneyBox.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/NoEnoughMoneyState.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/NoMoneyState.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/SoldOutState.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/State.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/VendingMachine.class" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/Client.java" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/Drinking.java" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/EnoughMoneyState.java" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/MoneyBox.java" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/NoEnoughMoneyState.java" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/NoMoneyState.java" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/SoldOutState.java" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/State.java" create mode 100644 "java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/VendingMachine.java" create mode 100644 java-oop-design-pattern/ch8_ch14/.classpath create mode 100644 java-oop-design-pattern/ch8_ch14/.project create mode 100644 java-oop-design-pattern/ch8_ch14/.settings/org.eclipse.jdt.core.prefs create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Door.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/DoorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/ElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Motor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Door.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/DoorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/ElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Motor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Door.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/DoorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/ElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/ElevatorFactoryFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Motor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungElevatorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/VendorID.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Door.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/DoorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/DoorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/HyundaiDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/LGDoor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Motor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/MotorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/VendorID.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/BasicNaviFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/CheapGPS.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/ClientBefore.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/ExpensiveGPS.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/FastPathFinder.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/GPS.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/HDScreen.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/LargeMap.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Location.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Map.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/NaviFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Path.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/PathFinder.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/PremiumNaviFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SDScreen.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Screen.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SlowPathFinder.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SmallMap.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/BasicNaviFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/CheapGPS.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/ExpensiveGPS.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/FastPathFinder.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/GPS.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/GPSSimulator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/HDScreen.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/LargeMap.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Location.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Map.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/NaviFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/NaviTestFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Path.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/PathFinder.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/PremiumNaviFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SDScreen.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Screen.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SlowPathFinder.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SmallMap.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestMap.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestPathFinder.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestScreen.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerGyroscope.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerLightSensor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerMotionSensor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerSensorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/Gyroscope.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LightSensor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerGyroscope.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerLightSensor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerMotionSensor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerSensorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/MotionSensor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/SensorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after1/Alarm.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after1/AlarmOnCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after1/Button.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after1/Command.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after1/Lamp.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after1/LampOnCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after2/Button.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after2/Command.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after2/Lamp.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after2/LampOffCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/after2/LampOnCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before1/Button.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before1/Lamp.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before2/Alarm.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before2/Button.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before3/Alarm.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before3/Button.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before3/Lamp.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/before3/Mode.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Command.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/DestinationSelectionCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorButton.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorManager.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorRequestCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelDownCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelUpCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/Command.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/MuteCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/PowerCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/RemoteController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/TV.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Client2.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Client3.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Command.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/MuteCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/PowerCommand.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/TV.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/TwoButtonController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/TV.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/TwoButtonController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after1/Body.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after1/Computer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after1/ComputerDevice.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after1/Keyboard.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after1/Monitor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after2/Body.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after2/Computer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after2/ComputerDevice.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after2/Keyboard.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after2/Monitor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after2/Speaker.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/Body.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/CPU.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/CompositeDevice.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/Computer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/ComputerDevice.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/HardDisk.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/Keyboard.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/MainMemory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/Monitor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/after3/Speaker.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before1/Body.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before1/Computer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before1/Keyboard.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before1/Monitor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before2/Body.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before2/Computer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before2/Keyboard.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before2/Monitor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before2/Speaker.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/Body.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/CPU.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/Computer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/HardDisk.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/Keyboard.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/MainMemory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/Monitor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/before3/Speaker.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/AbstractFile.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/Directory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/File.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/Directory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/File.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after1/Display.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after1/DisplayDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after1/LaneDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after1/RoadDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after2/Display.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after2/DisplayDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after2/LaneDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after2/RoadDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after2/TrafficDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Client2.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after3/CrossingDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Display.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after3/DisplayDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after3/LaneDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after3/RoadDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/after3/TrafficDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before1/RoadDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before1/RoadDisplayWithLane.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplayWithLane.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplayWithTraffic.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithLane.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithLaneTraffic.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithTraffic.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/AirBagDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/BasicCar.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/CarComponent.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/CarOptionDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/ESCDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/NaviDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/SCCDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/BasicEMailContent.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/ContentDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/EMailContent.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/ExternalDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/SecureDecorator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/BasicEMailContent.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/ExternalEMailContent.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/SecureEMailContent.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorManager.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ResponseTimeScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/SchedulerFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/SchedulingStrategyID.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ThroughputScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorManager.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ResponseTimeScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/SchedulerFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/SchedulingStrategyID.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ThroughputScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManager.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithDynamicScheduling.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithThroughputScheduling.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ResponseTimeScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ThroughputScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ElevatorManager.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ThroughputScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorManager.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ResponseTimeScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ThroughputScheduler.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/Car.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarState.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarStateFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarStateID.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/LimpState.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/NormalState.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/Car.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/CarState.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/LimpState.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/NormalState.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Motor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorFactory.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorVendorID.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Motor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after1/DataSheetView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after1/MinMaxView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after1/Observer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after1/ScoreRecord.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after1/Subject.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after2/DataSheetView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after2/MinMaxView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after2/Observer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after2/ScoreRecord.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after2/StatisticsView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/after2/Subject.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before1/DataSheetView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before1/ScoreRecord.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before2/MinMaxView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before2/ScoreRecord.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before3/DataSheetView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before3/MainMaxView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before3/ScoreRecord.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before4/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before4/DataSheetView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before4/MainMaxView.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/before4/ScoreRecord.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Battery.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/BatteryLevelDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/LowBatteryWarning.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Observer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Subject.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/Battery.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/BatteryLevelDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/LowBatteryWarning.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ControlRoomDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ElevatorController.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ElevatorDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/FloorDisplay.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Observer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Subject.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/VoiceNotice.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Door.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/DoorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Motor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Door.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/DoorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Door.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/DoorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Direction.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Door.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/DoorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/HyundaiMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/LGMotor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Motor.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/MotorStatus.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/ComplexReportGenerator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/Customer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/ReportGenerator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/SimpleReportGenerator.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/Client.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/Customer.class create mode 100644 java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/SimpleReportGenerator.class create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Door.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/DoorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/ElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Motor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Door.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/DoorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/ElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Motor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Door.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/DoorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/ElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/ElevatorFactoryFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Motor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungElevatorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/VendorID.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Door.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/DoorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/DoorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/HyundaiDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/LGDoor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Motor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/MotorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/VendorID.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/BasicNaviFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/CheapGPS.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/ClientBefore.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/ExpensiveGPS.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/FastPathFinder.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/GPS.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/HDScreen.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/LargeMap.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Location.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Map.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/NaviFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Path.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/PathFinder.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/PremiumNaviFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SDScreen.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Screen.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SlowPathFinder.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SmallMap.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/BasicNaviFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/CheapGPS.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/ExpensiveGPS.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/FastPathFinder.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/GPS.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/GPSSimulator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/HDScreen.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/LargeMap.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Location.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Map.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/NaviFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/NaviTestFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Path.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/PathFinder.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/PremiumNaviFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SDScreen.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Screen.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SlowPathFinder.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SmallMap.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestMap.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestPathFinder.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestScreen.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerGyroscope.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerLightSensor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerMotionSensor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerSensorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/Gyroscope.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LightSensor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerGyroscope.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerLightSensor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerMotionSensor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerSensorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/MotionSensor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/SensorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after1/Alarm.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after1/AlarmOnCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after1/Button.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after1/Command.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after1/Lamp.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after1/LampOnCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after2/Button.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after2/Command.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after2/Lamp.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after2/LampOffCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/after2/LampOnCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before1/Button.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before1/Lamp.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before2/Alarm.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before2/Button.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before3/Alarm.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before3/Button.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/before3/Lamp.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Command.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/DestinationSelectionCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorButton.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorManager.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorRequestCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelDownCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelUpCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/Command.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/MuteCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/PowerCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/RemoteController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/TV.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Client2.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Client3.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Command.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/MuteCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/PowerCommand.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/TV.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/TwoButtonController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/TV.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/TwoButtonController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after1/Body.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after1/Computer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after1/ComputerDevice.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after1/Keyboard.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after1/Monitor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after2/Body.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after2/Computer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after2/ComputerDevice.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after2/Keyboard.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after2/Monitor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after2/Speaker.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/Body.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/CPU.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/CompositeDevice.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/Computer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/ComputerDevice.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/HardDisk.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/Keyboard.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/MainMemory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/Monitor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/after3/Speaker.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before1/Body.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before1/Computer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before1/Keyboard.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before1/Monitor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before2/Body.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before2/Computer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before2/Keyboard.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before2/Monitor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before2/Speaker.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/Body.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/CPU.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/Computer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/HardDisk.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/Keyboard.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/MainMemory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/Monitor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/before3/Speaker.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/AbstractFile.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/Directory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/File.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/Directory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/File.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after1/Display.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after1/DisplayDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after1/LaneDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after1/RoadDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after2/Display.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after2/DisplayDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after2/LaneDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after2/RoadDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after2/TrafficDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client2.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after3/CrossingDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after3/Display.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after3/DisplayDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after3/LaneDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after3/RoadDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/after3/TrafficDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplayWithLane.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithLane.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithTraffic.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLane.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLaneTraffic.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithTraffic.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/AirBagDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/BasicCar.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarComponent.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarOptionDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/ESCDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/NaviDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/SCCDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/BasicEMailContent.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ContentDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/EMailContent.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ExternalDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/SecureDecorator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/BasicEMailContent.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/ExternalEMailContent.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/SecureEMailContent.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorManager.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ResponseTimeScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulerFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulingStrategyID.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ThroughputScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorManager.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ResponseTimeScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulerFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulingStrategyID.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ThroughputScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManager.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithDynamicScheduling.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithThroughputScheduling.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ResponseTimeScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ThroughputScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorManager.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ThroughputScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorManager.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ResponseTimeScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ThroughputScheduler.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Car.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarState.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateID.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/LimpState.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/NormalState.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Car.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/CarState.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/LimpState.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/NormalState.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Motor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorFactory.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorVendorID.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Motor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after1/DataSheetView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after1/MinMaxView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after1/Observer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after1/ScoreRecord.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after1/Subject.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after2/DataSheetView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after2/MinMaxView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after2/Observer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after2/ScoreRecord.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after2/StatisticsView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/after2/Subject.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before1/DataSheetView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before1/ScoreRecord.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before2/MinMaxView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before2/ScoreRecord.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before3/DataSheetView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before3/MainMaxView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before3/ScoreRecord.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before4/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before4/DataSheetView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before4/MainMaxView.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/before4/ScoreRecord.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Battery.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/BatteryLevelDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/LowBatteryWarning.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Observer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Subject.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Battery.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/BatteryLevelDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/LowBatteryWarning.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ControlRoomDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorController.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/FloorDisplay.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Observer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Subject.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/VoiceNotice.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Door.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/DoorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Motor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Door.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/DoorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Door.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/DoorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Direction.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Door.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/DoorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/HyundaiMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/LGMotor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Motor.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/MotorStatus.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ComplexReportGenerator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Customer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ReportGenerator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/SimpleReportGenerator.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Client.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Customer.java create mode 100644 java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/SimpleReportGenerator.java diff --git a/java-oop-design-pattern/RemoteSystemsTempFiles/.project b/java-oop-design-pattern/RemoteSystemsTempFiles/.project new file mode 100644 index 000000000..5447a64fa --- /dev/null +++ b/java-oop-design-pattern/RemoteSystemsTempFiles/.project @@ -0,0 +1,12 @@ + + + RemoteSystemsTempFiles + + + + + + + org.eclipse.rse.ui.remoteSystemsTempNature + + diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/.classpath b/java-oop-design-pattern/ch1-Student-Transcript-Course/.classpath new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ b/java-oop-design-pattern/ch1-Student-Transcript-Course/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/.project b/java-oop-design-pattern/ch1-Student-Transcript-Course/.project new file mode 100644 index 000000000..f1a637689 --- /dev/null +++ b/java-oop-design-pattern/ch1-Student-Transcript-Course/.project @@ -0,0 +1,17 @@ + + + ch1-Student-Transcript-Course + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/.settings/org.eclipse.jdt.core.prefs b/java-oop-design-pattern/ch1-Student-Transcript-Course/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/java-oop-design-pattern/ch1-Student-Transcript-Course/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Course.class b/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Course.class new file mode 100644 index 0000000000000000000000000000000000000000..ba14f20684f130fc5ea8a7bae83ecac9894fc9ee GIT binary patch literal 1391 zcmZWoS#J_y6g?l%0>iY>vbfSstt@S^)*Y3HdS+J-A|Mdk)n03bmey_- zo^J2zbxR;(nOeJBH;sL(D==BMGkTWMD%2S7m_>nb)o8Xgt7qy0Gba*C<*fliah2(T zwzkJi7s_r{wM?VkWNfr#v<+)jAenK1yy0w(#p|7huE39|iU?u?{!F$O2H{kMp#+iW zv+&HQAdaX^I;CO+qXN;g(bg-yy=~px(zaXnG@ZKEs%fSnZPyvFb_|jZl^uyV-Wsd1eGsbghNTz@fwC0q%jK&6K#(2uHE z##Oml{S8lMFpuYuia}f>>7jNC5AcSHo47^ykPf-Ae}72X^p1)mN)%;B>sD-huABmf zx&r|MhCO-0b9?>CsDsavtjfps`*y#-L;_=_VX50Lt3m!9VDB+Ed603pIGPY~b?Jt?OcXK{`eVeBS?;OCKcTdXlhwor1P zkjfuo>iG~?u_NQGihA&r0iJ?6Tp*6XMOXUPtxPyd{#a(;Q7#FpQdmJK7?)S;jj|a?`dOBHaq~K(& X)Ax`u6~5ny2jzEZlF>)>`LOX1%EBX6 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Main.class b/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..368ff7f08bc9456f82f2d1869d60038dd3c9703f GIT binary patch literal 1803 zcmah}OKcle6g}flW;~v>VG^fx)3j;&bDC1;M}Rnlws9L$oHXDN8p3blOx;QCv6*=W zg%wCh?7Bc=hmb%*Aa<~DBqAZi3LzmRBqY|bVZj!bg!5+XHc=xXjo-cR-QRiV-sd0x z{pMQ$;}9w$3StYE*zvCR_;}h${ZA`;V47roJzjtmNgt>C^tpB zrs6pD*;>Q%Z4D*zyD!zl%a^0x1k-GL=b2-_n+rxobS zp5^)_O?gE%XZoMWa;p@lV92n+BI8Zx}**vROZbiH6;Sb|o4TjVW41dl3+Tpf|N ztbq|}(`cLXtPL8+!q9OI6Lgy$)-Xw#r+k9)%CO{N%0Ld&1XZ?0Sd|3#WQIak8p5e$ zSJ=XumrGy}J0b+C?ZWwqL1zw(hi&m90avx^k+UmQGMJ%bfsh~TUiTyYXJQomH zm(VJ%L{&7fj2B3i@4U^VoX~k$?nMK)Br!>rYxTvKgx#R0<(0`&_W@H!Uj0!8iTkaT z2kb+{AD0XBYwhML=-dc~qct0}3x*nn2jjsJj|dqpWVB!x)lx8etZqKsAq9%V-@F`x zaO&yTyZ<3=)!UEh_(KV%+t6lMxc>lidp@PTvnZ_6-36;2yiFBroS`DYmF(+|e836$ zMlZ=0;1ozJ|0;k8H9mN*DtB2*g))9&8`@WaS?4OvKnzK)M(9A<$z1}6aF{0yj=W0` zdG^l^x>ikd8$E?UJ3?(C(9+ZvchI+L_HX0lR4h;jq#EDB;OcNXwv97W9ibkVx+?XH z=|I=^oF~#9=J_UuC@wZ}DXp2Ka;KT&a;Jti)qG6u5}_?&KF-~66HiX*(aGfJNPmr| z(t0Y{#O!zIYhu2Mh4+$5Dw)=sc>a^!Khp6gR;H5CNu%YQOc{Z5R}-t!*-%nOn(@+E zvK515YZJ$~YSa_x;d+9+4Uw-2vU8by70B2v&g}+F+(kD$dTk+vchHOXaRm2p6dxju zkI;`#8T|!LVu$hvoW{>MgI{qLe^UO9b3sS$F(+BaOIV}S@fTjkE9^-Re#fiSB8>eF zuThH<$4_`27LiWid#qE76H^lbyG+&j Qzn&@rXI|Q4fe8Hn0NuNM>Hq)$ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Student.class b/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Student.class new file mode 100644 index 0000000000000000000000000000000000000000..cfe7348d956ca0cf33818e8e1c886b56f274c14b GIT binary patch literal 1388 zcmZuwZBr6q6g>~13(J})h*oN9WxS|l_6}KT*))Un0i&sJE9~GJg0n15{gwVeUu!0H zs+sC@f23d0%XxMeShIoI<$3P8=bn4+<;U;OUjeM(k%EALQnouaqiHJ$3B-2wS9-3Y zH|x14+q*{97KqxG-fUMbbKhrjEJI-C1fWpd>M`V3 z2@f^(Jt93Sr&!sx%x0aj!GhT|?Nx!XluP6frz=ceZ`BMHK@4k%A|?<_r7IDTPD2E$ zf<(6qpGFmN3`@|sh5-x;3>VF&QR?h%8`hS--Eh>js(PcMTc$jFmmzz{WYdwN=Me=C z>9tzFA2OxS)v?+J%O_Il6Q)wh z^nb1kMK_B+OCc!@X=DV#rfpa{hb53ami5@X&quLWG!?Vlz##v60e-lKJSom8%rkeFzeBu>LgRCYr>8^*_#Vp~;Z!Dj zfRW4>#GfBw>;TCRPU-}oqf7(SLQIS>F@aM!&6}i~j59dP6KR|xg5;B!@=B}`BTJ~6 zk4R<@G5xI1t2&VwvqpS;YL8FF9L|$R-~uiZ>ozm*NdLyORJH60E=vAGT-tnx*QV6oGX@@Y5FdK@onK;HNdjj+PoudfZV#Y1vNeXk@ z^Nz1EdR@RBikPDORmu$FF7eV57j=)aUDSQvtudw{@C$K8eiud=UB?4HZn~Yx2;XWi8Ob3G|!ROK$t218s z06vuCe@;^9V7y4q?w;L$zun~bpP#<~oZ{4gCSYF1Zj^X&_%St57HC|#pWVUKjV6P4 zr--3avi3d_*k1QEElbtXM-p)UagZR=NPt^=F&z+9kIFx=KET`|oM8LYO z%oR?8G-nZ5v%8D2xG-Mb^e}m|*p!h3=_|FYE&JbXWwbpDHJBWfB3W*e5(TTRQtXY~ zu3Xc=!kVnAvPuOBIOGTNg4dxOtiIezUuxliMJ4_bWoUB2v^2RTb+W%YsmRk{riFFB z@6h|iJXyEj`+<7z_!^tNZ+yO^**m#Ln@*d~?pGzS&v#piSJ|j02g3$ITNK=*WQX^i zOpZW@^eC)wgt8=%#>NkEl(!%7ly?=`^$QJ+1z-yqY)}l8RtdSFz#}|nM6%y5Zm$+M z3yYt?&Wq34N~4G_hwd)tGgWk()H_O{m1QmF(bd$F`WPn#Al+4v-9nJ3#UTAvkPbl( Z{sSVvrv!Oc2-05#IVuEs&K+oY@fU+Kr>_72 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Course.java b/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Course.java new file mode 100644 index 000000000..0015c0305 --- /dev/null +++ b/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Course.java @@ -0,0 +1,30 @@ +import java.util.Iterator; +import java.util.Vector; + + +public class Course { + private Vector transcripts; + private String name; + + public Course(String name) { + this.name = name; + transcripts = new Vector(); + } + public void addTranscript(Transcript transcript) { + transcripts.add(transcript); + } + public String getName() { + return name; + } + + public Vector getStudents() { + Vector students = new Vector(); + Iterator itor = transcripts.iterator(); + + while (itor.hasNext()) { + Transcript tr = itor.next(); + students.add(tr.getStudent()); + } + return students; + } +} diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Main.java b/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Main.java new file mode 100644 index 000000000..77a0e3033 --- /dev/null +++ b/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Main.java @@ -0,0 +1,40 @@ +import java.util.Vector; + + +public class Main { + + + public static void main(String[] args) { + Student s1 = new Student("ManSup"); + Student s2 = new Student("GilDong"); + Student s3 = new Student("GilSeo"); + Course se = new Course("Software Engineering"); + Course designPattern = new Course("Design Pattern"); + Transcript t1 = new Transcript(s1, se); + Transcript t2 = new Transcript(s1, designPattern); + Transcript t3 = new Transcript(s2, designPattern); + Transcript t4 = new Transcript(s1, designPattern); + + t1.setDate("2012"); + t1.setGrade("B0"); + t3.setDate("2013"); + t3.setGrade("C+"); + t2.setDate("2012"); + t2.setGrade("D+"); + t4.setDate("2013"); + t4.setGrade("A+"); + + Vector courses; + + courses = s1.getCourses(); + for (int i=0; i students; + + students = designPattern.getStudents(); + for (int i=0; i transcripts; + private String name; + + public Student(String name) { + this.name = name; + transcripts = new Vector(); + } + public void addTranscript(Transcript transcript) { + transcripts.add(transcript); + } + public Vector getCourses() { + Vector courses = new Vector(); + Iterator itor = transcripts.iterator(); + + while (itor.hasNext()) { + Transcript tr = itor.next(); + courses.add(tr.getCourse()); + } + return courses; + } + public String getName() { + // TODO Auto-generated method stub + return this.name; + } +} diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Transcript.java b/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Transcript.java new file mode 100644 index 000000000..4968cc322 --- /dev/null +++ b/java-oop-design-pattern/ch1-Student-Transcript-Course/src/Transcript.java @@ -0,0 +1,38 @@ + +public class Transcript { + private Student student; + private Course course; + + private String date; + private String grade; + public Transcript(Student student, Course course) { + this.student = student; + this.student.addTranscript(this); + this.course = course; + this.course.addTranscript(this); + } + + public Student getStudent() { + return student; + } + + public Course getCourse() { + return course; + } + + public void setDate(String date) { + this.date = date; + } + + public String getDate() { + return date; + } + + public void setGrade(String grade) { + this.grade = grade; + } + + public String getGrade() { + return grade; + } +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.classpath" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.project" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.project" new file mode 100644 index 000000000..50d491895 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.project" @@ -0,0 +1,17 @@ + + + ch2-문제4-답 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/CartForSongs.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/CartForSongs.class" new file mode 100644 index 0000000000000000000000000000000000000000..c32b87c76e706e68e820ce036827b9e52f824187 GIT binary patch literal 1051 zcmZuv+fEZv6kVqsI&_$paw|mvQB>L@R7Jc{LLv}?Nkx+qjJ}-?lQLL4WO{1kSNs8= zj4@G&ni!w`5x>IAI@2N4qz|3W?7hxfYp;EN{`vYHz!FwX#02aO8K^BksQS%%%Y-42 zIh3zusUe&7(v#Yu>nH)kAxL1X61LjPYm^=afjq8wEmamsR=s*ts&?QCO!dO7Ry2Ki zjo8Gh*YwnyKs;aABlCv8?^=i>Wg`j8#Gt@P4;2e(q>>OAw$X=#z+lB|x;yPxH8AZX_kD_4Xa(|zj&v$qWdpfrJHkR>#_axup>K;@(wyJ(RaNI3VuWP7# zBa1pbro~BkHwAxOGXG7!#n8_xwP5i%z{+~~4P=U^u#4Z2etwF~XAFG|(Ib4OL!JZ- zo*g99C~J1eo52{e{1O;PF5-JnTpw%m>Fwet44q(N=N+;OUoa)`1G6i}+=Ow0YtA-H zd4acof6aX$+<=yv4owcwrcHyqr4-B|gBiXTh|tnSVo4uK$5_9C1&Ui7c@ZU=&C%#h z+#>Eak=kmfx5VBZRxHGRBNaC>Jwx&QzG literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/DiscountedMode.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/DiscountedMode.class" new file mode 100644 index 0000000000000000000000000000000000000000..8e9bab943c301f485ddf7fba6ce1782132f14180 GIT binary patch literal 299 zcmY*UyKcfj5S#^riNhm-FG!bA;DVAU4T#DCDIof@Igvw-Etzxviz-rzd_X=b%AA3M zW_EXWG&}qI_x%H4jJ}VWpgS{%Brh|ox3BqD`|t#Jd-bWpRAswx8Siys1A#GwQ?6kd* zZ_3humu7-sm6t`L=f-&sE{apwk;~~lfLeY8)Yvf%(dQJh3TtEdh1RiJ2Sm4a(pzHt RBw+2pJ>Er+Eb~>0`+ragf2Kcyca zafv^`A7y-QA(=$e^xS*TIrllwdCvXy`^QfJ8`##75zzLf7wFIgawqakmV6nsN(aX$ zu9FD#Z+U^2R0aBq3rEb|37f8oJ{T6V=oc8Sd4XH+w2$5BP#*iPz-TRWq<4l|t>@i`du54En@~VXr9+Ngjb2`3E+`}-DKGPgFL)CXptYcHh26IxaZh}~Nf~V~N zRN?y6R4eYLlaf)3is%0$us|kWQ^QD`P^WceSRfN`3J6DFsP?xE9GKY%JCWn=d1}Ol zn&PS=gISOy9}|$_j!%MC=c&Y1aLq1WV&GdEHfdE@rQV{ot`fKo@?>BL!}Rd7$Pu!i zzOP;6K3wueEp?ISX8ZyZ*RK8Le_ZvIE~c1urkf?B%AzB?<-1QN!jF?TSCm!YHScBc<_`x~ Bx^e&j literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/NonDiscounted.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/NonDiscounted.class" new file mode 100644 index 0000000000000000000000000000000000000000..d10429395bcf517fed34f48e45f5ad1939fdb84b GIT binary patch literal 344 zcmY*UyKVw85F8%|7mhc7kS-t;ij+ZVf~bHZMD*scz=)is!;S0b6+7SYQ+SH^&y-Q4$KC-h?_Am2ATKX9@6o_Xg z&k{A#e&vaT#cM#iJjAUbo; VFQcyh;ninnbm0vColUQ5{Q#QKJyQSx literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/OnSale.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/OnSale.class" new file mode 100644 index 0000000000000000000000000000000000000000..0c291cdc41091822fb57209de3fd8d0e08082405 GIT binary patch literal 334 zcmYk1!A` z$T6z{syJ$*22Y?Jnnd5`n}yCE)FLL)3DZc$bCnsF{}iQNnXN!QEO%WJeAM=^>|R-d z+%WM*?@#VL3k0(?&muiFZfK+A`fIgQI0Mc608rtL&!GCu28@ES)_X(!wP*)a*LKzh jwOJY%kD2kmXj2{BFNOiKi<6ha|Hu0OSozC#3fJj3PhU9% literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/Song.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/Song.class" new file mode 100644 index 0000000000000000000000000000000000000000..0e75e7e9801594665b0a6600b543f84678c9cea5 GIT binary patch literal 535 zcmZ8d%TB^j6r9^a3$+3w5Z}hc1z;izcWQ`<#8rJn4Es`=T7)(!#osa}J`xvxfFEU? zTdJZ>bMAS}nVEY(KHuH}9AI0AB9Q5Zfu|!QP#W6zc57q@UhA?ybe)*PaX4@}u{!?5 z38z8q4$j#*63~wQz>nJkYQ51T@RV%>Di%!W$O#lJKX5OmYn%2w#uqn;i4 zvQC?s_|~70&5|xit54imDhMps|BE(yd9ZIH3r!&Bx$#xxJA~3gM?2Z&rT7_G#k!6) zfx=(YCN@x|G46d2uI-rXMmL;Bj(g@ymw9PqU%mu(sHT!pK#`KnROY-LW1dxur{I}w zzQTB9qQGR-lBR-1=H?850*b8okXT}r%Wa|+iEi#aqx`#VB;9NxC>d%qRLUUPr4=b$ kK{e$%Of^dt)c7}_P=3M6o%g`~c~7}HPo*DEn+a;`3j=RdeE>8s{pq3fAiEJ+M cart = new ArrayList(); + public double calculateTotalPrice() { + + double total = 0.0; + Iterator itr = cart.iterator(); + + while (itr.hasNext()) { + Song s = itr.next(); + total = total+s.getPrice(); + + } + return total; + } + + public void add(Song s) { + cart.add(s); + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/DiscountedMode.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/DiscountedMode.java" new file mode 100644 index 000000000..3d2c7f98b --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/DiscountedMode.java" @@ -0,0 +1,5 @@ + +public abstract class DiscountedMode { + public abstract double getDiscountRate(); + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/Main.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/Main.java" new file mode 100644 index 000000000..9c70a80e7 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/Main.java" @@ -0,0 +1,27 @@ + +public class Main { + + /** + * @param args + */ + public static void main(String[] args) { + Song s1 = new Song(); + s1.setMode(new NonDiscounted()); + Song s2 = new Song(); + s2.setMode(new NonDiscounted()); + Song s3 = new Song(); + s3.setMode(new OnSale()); + Song s4 = new Song(); + s4.setMode(new TodayEvent()); + + CartForSongs c = new CartForSongs(); + c.add(s1); + c.add(s2); + c.add(s3); + c.add(s4); + + System.out.println(c.calculateTotalPrice()); + + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/NonDiscounted.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/NonDiscounted.java" new file mode 100644 index 000000000..f317abc75 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/NonDiscounted.java" @@ -0,0 +1,10 @@ + +public class NonDiscounted extends DiscountedMode { + + @Override + public double getDiscountRate() { + // TODO Auto-generated method stub + return 0.0; + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/OnSale.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/OnSale.java" new file mode 100644 index 000000000..a01dea37c --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/OnSale.java" @@ -0,0 +1,10 @@ + +public class OnSale extends DiscountedMode { + + @Override + public double getDiscountRate() { + // TODO Auto-generated method stub + return 0.1; + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/Song.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/Song.java" new file mode 100644 index 000000000..30d67a274 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/Song.java" @@ -0,0 +1,10 @@ + +public class Song { + private DiscountedMode mode; + public void setMode(DiscountedMode mode) { + this.mode = mode; + } + public double getPrice() { + return 10.0-(10.0*this.mode.getDiscountRate()); + } +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/TodayEvent.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/TodayEvent.java" new file mode 100644 index 000000000..090499b48 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/TodayEvent.java" @@ -0,0 +1,10 @@ + +public class TodayEvent extends DiscountedMode { + + @Override + public double getDiscountRate() { + // TODO Auto-generated method stub + return 0.3; + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.classpath" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.project" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.project" new file mode 100644 index 000000000..a8bc541d4 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.project" @@ -0,0 +1,17 @@ + + + ch2-문제4 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/CartForSongs.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/CartForSongs.class" new file mode 100644 index 0000000000000000000000000000000000000000..6706c159844e3ff68ec1e646309d97a63e8f10e6 GIT binary patch literal 1274 zcmZuw+fEZv6kVs34h%!NV?|LBg|^(hMGZv|xd>Xoqy!`JxQZ16F#&5%25Qj{3cgpW7>EnB zKb0@#L|J;JiM6e#j;#dZHbDYC`EaYM-15Y15XhapTTwZI=7L-Dq^bsvK>u-=sk}~~ znrhztru4Ag0NTRhF0-Y8bkq~IhyPmUJeYWKU z>vF5i%AI-NmgNl@xO!a+#?=$IB9P42%Os61LhWiJHPD{@1S|Um$w!~i{t+GTLv$CP$uLg>ah`2srf$ZpFmF40(94y;38bQY zLRV;H%ug<5KcHg|Cs*HMb8H{|0^cw=89y1{!^O_b9!6dxHLO>cyKyaiZ3F2sMMwZXudUl=toIPjA`3$|z} r@`HzCya7|YF|vo{hlkFZ;Z7e3p9<;pM#vf+o(W5HxNx5tV#xmk$0iDh literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/Main.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/Main.class" new file mode 100644 index 0000000000000000000000000000000000000000..10e19901661c50f5948e4019bfeb9b91ca81389c GIT binary patch literal 923 zcmZuvYflqF6g^Y6YGCih`DBni7-LB*3_2!8VdO9_Ftis24KH@WUXZwL zbzZV?7xx78*iCjxOQ2Z34K0WJe0e`;N#D(3Lclx-+w$z~sT(9Z9tv1>86`Vmq#le- zOu|rR%EA*oW#h8l7BI?9l_og@GkC7!*$uf`XK~_oEtE0K8)1*i6)(7WVdXvBO4yt$ zyH$leZ(#w80tM>i^n97P2Vo+8mN{&KLN`oQu&m<+Yf^b`f>>C=D*OJXaDB?Cl^f~j z$f!e+3%6)0kcpR-{%I2`T2Y25nRrb=I0D1X>oV|<%vRWo9Cyc4ziOzDTT)~&1(M|a z02%H$1++S&3caAu&YdIoJx!amDy>TI&{`J-^h1mc3}b{R>hfPg4$>e0!sw@S4$*wR z&`0qy+FiIF?Jef*tK6n$YxxIhJjt7nHnVnizK_Rtb|JNkskJq_ADFhYea!W-bj7bm z4nU4e@i9>%(+M)1CdWCRtTMleG1QUAI~1^waePD(UpRdo*lAz23+`CMdW!WGFR{VS jO89_R++~Q?z-#UXh__C>4QNE1K^0q+P~Z*kWl;MMPg$}v literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/Song.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/Song.class" new file mode 100644 index 0000000000000000000000000000000000000000..77ef8ce9e6dffb0e4426ca58a3c046be27f9f618 GIT binary patch literal 581 zcmZWl%TB^j6r5Z7fKo*fh_8)_3myq9Txy7k#1%dg4Es`>dI_{iDgKt4XiQxA0e+Nm zZfSr>7w2_n=FI8O@7FhgGaOsc1oS}^1{QRIow57ub|!8ZbnZrD-%I#7jUIi0a)0$S zNMacV=K|)13}w<4$kiJ|Lazw5kwejeg}gwiFGK%!J{|e-gFBj}GLh#_hHflXpAGfo zNzSO&S3W3f&HUsh-CC`0u5Anp5ZH5Iz!b;_esUj6kJ>cRGcQkh7(XuOOHa!Y@@`E{};QAirghyQ|M;v1LYOlPNzn?P$|?Fs7yhrD=TVo1=UQeO^h<4S5SLl hUiXn-^Pw+&?BgKgu8w#|`Sl;UxJEXX cart = new ArrayList(); + public double calculateTotalPrice() { + + double total = 0.0; + Iterator itr = cart.iterator(); + + while (itr.hasNext()) { + Song s = itr.next(); + + if (s.getDiscountMode().equals("OnSale")) total = total+(s.getPrice()-0.1*s.getPrice()); + else if (s.getDiscountMode().equals("TodayEvent")) total = total+(s.getPrice()-0.3*s.getPrice()); + else total = total+s.getPrice(); + + } + return total; + } + + public void add(Song s) { + cart.add(s); + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/Main.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/Main.java" new file mode 100644 index 000000000..09567e778 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/Main.java" @@ -0,0 +1,27 @@ + +public class Main { + + /** + * @param args + */ + public static void main(String[] args) { + Song s1 = new Song(); + s1.setMode("NonDiscounted"); + Song s2 = new Song(); + s2.setMode("NonDiscounted"); + Song s3 = new Song(); + s3.setMode("OnSale"); + Song s4 = new Song(); + s4.setMode("TodayEvent"); + + CartForSongs c = new CartForSongs(); + c.add(s1); + c.add(s2); + c.add(s3); + c.add(s4); + + System.out.println(c.calculateTotalPrice()); + + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/Song.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/Song.java" new file mode 100644 index 000000000..ce3615c09 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/Song.java" @@ -0,0 +1,13 @@ + +public class Song { + private String mode; + public void setMode(String mode) { + this.mode = mode; + } + public double getPrice() { + return 10.0; + } + public String getDiscountMode() { + return this.mode; + } +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.classpath" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.project" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.project" new file mode 100644 index 000000000..05075965f --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.project" @@ -0,0 +1,17 @@ + + + ch2-문제6 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/bin/Main.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/bin/Main.class" new file mode 100644 index 0000000000000000000000000000000000000000..29f7824cd2596c68baf7e990eae81b740f175920 GIT binary patch literal 739 zcmZuvT~8B16g|@qcDJs!wssW|5d>^0P?5(HUQB#izfw{nJWbn48Pe|JcGrX_eiJ@G zqKQAiA7wn#1*8etWbWLrbI(0HfBydb4PXb`7BT|44^jsfass6j`CT@LG8i;Jbx%|; z7MR)9fsXeCvbB1LweP~dDj*BTMIJK(MPCQ%V>0ThXkT`RN}%kAJvr>iNE`n;n2V3~ zm}tJ4)gsP_R=}$r`Tu9O<46aCR=s24u|WPyq7u$3!Lji~z|z5(%(hL$bMX|<1Z>&w zPs#+UwL3^D`&RwX#@ub^TN}@BogD`+@Y2HK)Yk2@ajZrzmaxo?!-N7-1A;?Mot+GC`;uY6$HdLLim&QsF*h`>)Gjz zwDW1n?w$3oh1_FXp&cesPrcXX*EmM~Ekl?aazQ=R6{|GuOZdM{d$HWYWkMZ-V^IMsNNBZTOdS literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/bin/Queue.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/bin/Queue.class" new file mode 100644 index 0000000000000000000000000000000000000000..ea67354c8e2cc7ce3e9fa14a701f77b9dcc92c76 GIT binary patch literal 876 zcma)3%TC)s6g}fS48{c#(zKMel($W#X3<>}MM6ldtX5S}7VMm4NCzA{GB#5Gsf%_) zr7rpbd=%;#J5fWZDmHUp=bm%#o!h%#zX80*feAyP^f{HOG*J|&UHI32BTZD$@Kksy z2cEi01j;QHs-!JYaNMpy@i-bt3k59ND4{H{La_Xpj(Rda^?QL7sCrS~54wJ=bUaBG zlP~H@!1OY~ra=8Z>g#xltmKf^X(x$QIBd2FUhoHltWn^p<7I;eemHD=>Rrfw(sa)R z7CUMf`bipdf+c6#?4DU*kBvGi+%`HtmocZ1fgH(@+f^TuQEl2yrdW=mYdO)bIqtvk zmg7!4wAyPMo7mu~#!(P(u(6bv8G$Zt+t|sA%nDeYD2@B_MCrp>8S0&0PoUY#_y6!v zv7M*pzG~)R*rHN_-wYJ#@t^pbjE-mpZRzkQ7Jkqvz~ZaR8oI>S&H=Pf7%kt+tS}N- zMFj?`^bM?Kv|V}zh#-g=Ih@M_IxcuqF0@VBNF^4dCU0xz(^zFh0& k+zK~%^_}2ZDeI9dy!kKf);#U_502`K+CIA2c literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/src/Main.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/src/Main.java" new file mode 100644 index 000000000..3405d1a28 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/src/Main.java" @@ -0,0 +1,15 @@ +import java.util.LinkedList; + + +public class Main { + + public static void main(String[] args) { + Queue q = new Queue(); + q.addQueue("insang1"); + q.addQueue("insang2"); + q.addQueue("insang3"); + System.out.println(q); + + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/src/Queue.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/src/Queue.java" new file mode 100644 index 000000000..564e894d4 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/src/Queue.java" @@ -0,0 +1,17 @@ +import java.util.LinkedList; + + +public class Queue extends LinkedList { + + public boolean addQueue(String element) { + return this.offer(element); + } + public String removeQueue() { + return this.poll(); + } + + public String peekQueue() { + return this.peek(); + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.classpath" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.project" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.project" new file mode 100644 index 000000000..83a42daab --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.project" @@ -0,0 +1,17 @@ + + + ch2-문제7 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/bin/Main.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/bin/Main.class" new file mode 100644 index 0000000000000000000000000000000000000000..0f739d870ad87a1c35aa5c3d3182a0d9bf16fbc6 GIT binary patch literal 812 zcmZuv%Wl&^6g`tiZ3ja_(imtdukvsbXlTP@k*XUcR^g?fAYe5~M!_X-@&9U@H&1d~X zH3$XP_C4PV4+OGqt;f5MrbAUg7M6`X)&zbKqc6G(EaSrDN zOgS9J*95BW38X}QyY|M!#_HvsiHobGW#JO87`UA3x_dMa)x^eCTw}-6hz3*>SZ~^V zPIVzQDmiIu5!Y?pz)b;brquhTigma4uM7ijnkDYDfI4m)Xb4nd3(^cW?qG*%XPR_O zt5W@~oT8I57}43ve~c6m9|+Njwb67ZJ(;7~pXqESSN2axUosrFHW} zfIC_+O`=EqM?i)<{syiFvnHcp%-4@$evXd|T=g-K!zr$Ia)I$QGYe->WJN#zM6e8F z;~Pq^kNKGz<;nupSB>(8By8&N1zU{;wtwK(0yRyMg{Igb3Ai&!QY5%T_$`9hIW0}= eB+yiNmzjxe>|&3^EoNF$Qn|;SzwEjjM40 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/bin/Queue.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/bin/Queue.class" new file mode 100644 index 0000000000000000000000000000000000000000..8f49fc5091ab929b052fffbea070192463b1a033 GIT binary patch literal 1007 zcma)4%Wl(95Iy5Kwd1;Zkp?J_7Rtj;X|rHQqHI8{ED%amsogorZE)+@!L=*#Pb@%! zRsx9+;G+<8?F14M2{zZ6GiT13M}GYL`W?ViG&LxM{F_81LW4>upSl-r(|3bW^L77J z3}OPkBh;M~Ph!t+I$m%lhK_e0w+Mx%swVPSBb2xc@hTbjMbvZqKD$?)aNzofZsf^$ z3aas2@0_4H>4e-seUbHkGGkUU%0jogI~=BkgiR|OZf-Lz`^jS44MPeLYh^b%AvRCm9%brz8w?`%(W0&_h34NcBF%jY{ z6_Ck>iM=ezD8cB4Ni+~IJ-I9+WgW;>6ZYHLg`O=tc9tRB<1^&=-$PL3E%>W(q(Fzt zzxj;(t~1hO7V)>-xPsaEhT_o`%3o0V#8?j3_${V7D%a&v;TBL(}@B^~?%mm0Cl literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/src/Main.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/src/Main.java" new file mode 100644 index 000000000..cdcd86634 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/src/Main.java" @@ -0,0 +1,18 @@ + + + +public class Main { + + /** + * @param args + */ + public static void main(String[] args) { + Queue q = new Queue(); + q.addQueue("insang1"); + q.addQueue("insang2"); + q.addQueue("insang3"); + System.out.println(q.peekQueue()); + + } + +} diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/src/Queue.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/src/Queue.java" new file mode 100644 index 000000000..17c33fcb3 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/src/Queue.java" @@ -0,0 +1,17 @@ +import java.util.LinkedList; + + +public class Queue { + private LinkedList q = new LinkedList(); + public boolean addQueue(String element) { + return q.offer(element); + } + public String removeQueue() { + return q.poll(); + } + + public String peekQueue() { + return q.peek(); + } + +} diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.classpath" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.project" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.project" new file mode 100644 index 000000000..f2ed7d2cb --- /dev/null +++ "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.project" @@ -0,0 +1,17 @@ + + + ch2-체크포인트 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/A.class" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/A.class" new file mode 100644 index 0000000000000000000000000000000000000000..6d58f1d9a1064c906f02c4571d52e4a0858c19e7 GIT binary patch literal 557 zcmZutTT22#6#hdmf?htk##rLG3aO2LqQMyfPPeT zW)-{OJe1UTwJy2s7Y1FDL((`Y$jWjYA z*8aFQpT=5_lE@;*V1L2`U_BTu*JJteR6ksr#g*5unnmM1zcmm#fqg=u9@hVz2u{KWe{i;%jvfNC?<`Q>lV{0YTSuJjEeM`CCI literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/A1.class" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/A1.class" new file mode 100644 index 0000000000000000000000000000000000000000..1a78ba70daf404b93d2db9cc3b30012df0eeddea GIT binary patch literal 547 zcmZut+e!ja6kXffT(UIH?B3Xu1tmidK}IknK_C$*zMpi^iE$=ojzOPQ4+TB+0ew`o z&nOn;dD!>0*4g{(`{NV9DGoHG2r0+bkRgym$X$4WCoc)<`eBcdxe5oai8PEnvd9q% zZ7*WX{cC6wA>U-&%{c`Bb3Gjim`3~xJjlieV^kp_w=X;>u`AHI~g(B#^xEd@s5c zh?OgCYVU%cYaoWSi3E}Y8OQV8$H}X4F|# ziGr9opCa`>rwv9$E9n}exeyT7S*5Xo3_I%amQdwnal}Cu*%J3xd!LZeaQX*rc2EZZ literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/A.java" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/A.java" new file mode 100644 index 000000000..a42edec04 --- /dev/null +++ "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/A.java" @@ -0,0 +1,12 @@ + +public class A { + + public static void doIt() { + System.out.println("DoIt: A class method"); + } + + public void doThat() { + System.out.println("DoThat: A class method"); + } + +} diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/A1.java" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/A1.java" new file mode 100644 index 000000000..0038b2f3e --- /dev/null +++ "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/A1.java" @@ -0,0 +1,10 @@ + +public class A1 extends A { + + public static void doIt() { + System.out.println("DoIt: A1 class method"); + } + public void doThat() { + System.out.println("DoThat: A1 class method"); + } +} diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/Main.java" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/Main.java" new file mode 100644 index 000000000..d0f75029d --- /dev/null +++ "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/src/Main.java" @@ -0,0 +1,12 @@ + +public class Main { + + public static void main(String[] args) { + A a1 = new A1(); + A1 a2 = new A1(); + a1.doIt(); + a1.doThat(); + a2.doIt(); + } + +} diff --git a/java-oop-design-pattern/ch3-DIP/.classpath b/java-oop-design-pattern/ch3-DIP/.classpath new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ b/java-oop-design-pattern/ch3-DIP/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/java-oop-design-pattern/ch3-DIP/.project b/java-oop-design-pattern/ch3-DIP/.project new file mode 100644 index 000000000..ab8591062 --- /dev/null +++ b/java-oop-design-pattern/ch3-DIP/.project @@ -0,0 +1,17 @@ + + + ch3-DIP + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/java-oop-design-pattern/ch3-DIP/.settings/org.eclipse.jdt.core.prefs b/java-oop-design-pattern/ch3-DIP/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/java-oop-design-pattern/ch3-DIP/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java-oop-design-pattern/ch3-DIP/bin/Kid.class b/java-oop-design-pattern/ch3-DIP/bin/Kid.class new file mode 100644 index 0000000000000000000000000000000000000000..3f969d3609f39bf141dcd92aedecf5850b49d6da GIT binary patch literal 618 zcmZut$xZ@65Pdx?1LFvafct_gVB#FS3Grg$MWQAUJP*);Cc_LF8WTQCqnLQ`1NS!Q&&%`R$$dxxF%b7~B zhVZOgU%0X=eQx(k%I1cNO>B{*^avGhn<1SqOz6SZ6O_0+*wv9E6aPq=*uy@9-dF05 zO9S(NCDeJ0syFnT{8Fex#Aw$OrG^|W7ozhsXlg^sLX^|}D8{L>=wU literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch3-DIP/bin/Lego.class b/java-oop-design-pattern/ch3-DIP/bin/Lego.class new file mode 100644 index 0000000000000000000000000000000000000000..77bea87923aec8abc3572e96a604ad7ef1168803 GIT binary patch literal 320 zcmYjLF;2rk5S+E0*fD{C;RAFD61boYqCuiM(IiTL2`6*N_$1>X@hhm1D0l#mLd+%z zXl8bHXIAt1_5K0i9ET|)L1J7LQY3iF-wrf+rbZltb=Vn*II#vXr7Fon?w!0Ld)=IKqMp^dLmX}mXxUSTIq8F|IDq;8ko*EhcRICpVBt;s^Lq z#<^hP#?6`YoH^%weSdrcI6~fpArPxb<(r5JI1lnwmfF&9l`iTJULz71KUThqP6Wns z`5JpqgQjO=3|10xj0;S=%J-_Br@9wj%X-@rn014OY}aI{bo`r)Mfd83Y_8TSljn&j zkj~w?f0|cOsQgwrUo$Zy5WfuSL1e>$WnzvauGb1|q;$Bzea=PmiJVI$m9DNOv95PbJhx@{Mn(4|lVOYdr2df?5WG7+oEI>nLna<|f`Z)Kz6v^F z!#h*@R!g6ApfA8CxD&q$81(oXT9Z+UD2VYwABp#2*{0QH-8w;=95oOp8CjUZG&6em zjU6#!b^zzL&({u+BF69xG&hu?9A*k z`}w}!0A}dBFbL+pyt}Xn{Y>0Mn2X{VZj(%=HNjb^Le)!N8jWLuwJHzNhly4PHXK3_ zsX}h9=R{U}k>rvvh{{ytv8a^Rf77Z@>O!z1u9_44U3slixmNnXV{fXPts%IF9|JQl j!(nt;g^dR6$rIj#4Ff)-j`iGT>@>5@++{`RHA(OT0k0`^ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch3-DIP/src/Kid.java b/java-oop-design-pattern/ch3-DIP/src/Kid.java new file mode 100644 index 000000000..8d6c3695c --- /dev/null +++ b/java-oop-design-pattern/ch3-DIP/src/Kid.java @@ -0,0 +1,10 @@ + +public class Kid { + + private Toy toy; + public void setToy(Toy toy) {this.toy=toy;} + public void playWith() { + System.out.println(toy.toString()); + } + +} diff --git a/java-oop-design-pattern/ch3-DIP/src/Lego.java b/java-oop-design-pattern/ch3-DIP/src/Lego.java new file mode 100644 index 000000000..df929395b --- /dev/null +++ b/java-oop-design-pattern/ch3-DIP/src/Lego.java @@ -0,0 +1,7 @@ + +public class Lego extends Toy { + public String toString() { + return "Lego"; + } + +} diff --git a/java-oop-design-pattern/ch3-DIP/src/Main.java b/java-oop-design-pattern/ch3-DIP/src/Main.java new file mode 100644 index 000000000..56140557c --- /dev/null +++ b/java-oop-design-pattern/ch3-DIP/src/Main.java @@ -0,0 +1,12 @@ + +public class Main { + + public static void main(String[] args) { + Toy t = new Robot(); + Toy t1 = new Lego(); + Kid k = new Kid(); + k.setToy(t); + k.playWith(); + } + +} diff --git a/java-oop-design-pattern/ch3-DIP/src/Robot.java b/java-oop-design-pattern/ch3-DIP/src/Robot.java new file mode 100644 index 000000000..805f3c273 --- /dev/null +++ b/java-oop-design-pattern/ch3-DIP/src/Robot.java @@ -0,0 +1,7 @@ + +public class Robot extends Toy { + public String toString() { + return "Robot"; + } + +} diff --git a/java-oop-design-pattern/ch3-DIP/src/Toy.java b/java-oop-design-pattern/ch3-DIP/src/Toy.java new file mode 100644 index 000000000..24b67e610 --- /dev/null +++ b/java-oop-design-pattern/ch3-DIP/src/Toy.java @@ -0,0 +1,4 @@ + +abstract public class Toy { + +} diff --git a/java-oop-design-pattern/ch3-LSP/.classpath b/java-oop-design-pattern/ch3-LSP/.classpath new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ b/java-oop-design-pattern/ch3-LSP/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/java-oop-design-pattern/ch3-LSP/.project b/java-oop-design-pattern/ch3-LSP/.project new file mode 100644 index 000000000..a9e7aa520 --- /dev/null +++ b/java-oop-design-pattern/ch3-LSP/.project @@ -0,0 +1,17 @@ + + + ch3-LSP + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/java-oop-design-pattern/ch3-LSP/.settings/org.eclipse.jdt.core.prefs b/java-oop-design-pattern/ch3-LSP/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/java-oop-design-pattern/ch3-LSP/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java-oop-design-pattern/ch3-LSP/bin/Bag.class b/java-oop-design-pattern/ch3-LSP/bin/Bag.class new file mode 100644 index 0000000000000000000000000000000000000000..14a11bc7ec300a4abd6756b66a9d17ef9af84e1f GIT binary patch literal 432 zcmZut%}T>S7@RLZOXz6@n)*~;1V!-R1Nczl zY*SRk%lA7o-|T*TzP$t3$94cm;GU>a08g+wRu3x4)MS)g497Yx1^#_uQZ104pmt;? zraUI0-5ChH)BHv^;9@C4fKbrvn~6T3-3@hdt%ey{aX(L0Hc*AJ{bJ~qw`NM^KF=Ns z!l^DVt0P{!*BR6ySdZYN#@*<9$D6d!xXNcms?Us74=J!`En}A)moE}HmdMIwO;e0@ zb_ugE``uSGo>(}D7;E#PgJsrH1;7fL?D!X0W3=Q0q8*Fw?z|xW%l78%R)tuwt+KUY ak8WUdq4Q(n8Sx_pf1B|CHPM=*w!Q#JxH!WA literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch3-LSP/bin/DiscountedBag.class b/java-oop-design-pattern/ch3-LSP/bin/DiscountedBag.class new file mode 100644 index 0000000000000000000000000000000000000000..fc38b7187ff84c620273fb619d8e6397ab27d003 GIT binary patch literal 514 zcmZ9I%}&Bl5QWdQr9drIQSk>iu7oah;ZnmwiH3w2qo(`PHd;k$O7Ruk`7S0J5*I#z z4`n>J5QuK(@6LQ@=6?TtegQbdP7#`*(uqewG9G48c;ep{VF+{vf@(N_xbm||ARU2u z91r8H&7Nk<6BwsS7+KJFM^2!jb+9<#jl-O{Y#sSGjv)l5N_=b%&tP2WH(+BAatm|Z)2GLoZ z@327fwEcVk*~c!SI{!hSDKaCSF^`}vGdrLc`hq)w^~OMhO>5>w4Hd@rv;kE(%mm9= zp;g0e!W7(e_dZZtOk1Q7nF}gHJi?l- WLacnPDb$%m9c*GNhi((2q45hIxlHW< literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch3-LSP/bin/Main.class b/java-oop-design-pattern/ch3-LSP/bin/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..e454a3f40c41f470fde66b411e5ac483de7b60b9 GIT binary patch literal 884 zcmZuwU2hUW6g{&nEW0k20;S+L)mmsvu^(zJjV5hlLPBd342jX0EOfJO1G{EfG`{HX z(0`#1G}^=$-~3U=Gi;UAxDWTvy>sTwx%bZg{PpcSfOTwZPz2O{%k?y<0_kJxjaBPe zo>P0$Ikvl@Kw{hV-0-15tXydmyXzm>24c`n#E}q~YPz0%Fzk2i;HlN=*#eoS-?e&e zD{y6emQ=%6?tpAfc~_l0eR_d>`FV44XDbX`ᯎm4*Sj^!9gL)VZKNbR|Uu0Qlb z`)HicLXQDI4ke;sqKHcZ$$=dn25y%k)N-TJ)^P>bG+aGbSnJ&&wEHHm;|A~WhpcfX z(%||vp7uh@u&sVwGS8W~iCbiL{xY)<4Fk7P*03Ou9jiZo(nLk7(Oyfko@XG7f;4l9 zM_)h6?~{ybChlOBg;DgRHmQ7X+-NIs*s$z>`Xiupcre~%BiKr%vnI{DoW+Fb&)$ZB z(ej5u*M98E>F9C*D^fK|U<3FL0EH_~lU8F?qZjn?#St8sr^qs%IXLrM>QW{@!t57ZUK*h^!u)dNWo9|bR3&1O zadiZ4&KK2aAyY*)%2jh9dgWi}MD`BHD8(l!kBltVXa)7( D$w;Z* literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch3-LSP/src/Bag.java b/java-oop-design-pattern/ch3-LSP/src/Bag.java new file mode 100644 index 000000000..f78c266a6 --- /dev/null +++ b/java-oop-design-pattern/ch3-LSP/src/Bag.java @@ -0,0 +1,6 @@ + +public class Bag { + private int price; + public void setPrice(int price) {this.price=price;} + public int getPrice() { return price; } +} diff --git a/java-oop-design-pattern/ch3-LSP/src/DiscountedBag.java b/java-oop-design-pattern/ch3-LSP/src/DiscountedBag.java new file mode 100644 index 000000000..dfba30b4a --- /dev/null +++ b/java-oop-design-pattern/ch3-LSP/src/DiscountedBag.java @@ -0,0 +1,12 @@ + +public class DiscountedBag extends Bag { + private double discountedRate; + public void setDiscounted(double discountedRate) { + this.discountedRate=discountedRate; + } + + public void setPrice(int price) { + super.setPrice(price-(int)(discountedRate*price)); + } + +} diff --git a/java-oop-design-pattern/ch3-LSP/src/Main.java b/java-oop-design-pattern/ch3-LSP/src/Main.java new file mode 100644 index 000000000..4f2c6c4d5 --- /dev/null +++ b/java-oop-design-pattern/ch3-LSP/src/Main.java @@ -0,0 +1,27 @@ + +public class Main { + + public static void main(String[] args) { + + Bag b1= new Bag(); + Bag b2= new Bag(); + + DiscountedBag b3=new DiscountedBag(); + DiscountedBag b4=new DiscountedBag(); + + b1.setPrice(50000); + System.out.println(b1.getPrice()); + b2.setPrice(b1.getPrice()); + System.out.println(b2.getPrice()); + + b3.setPrice(50000); + System.out.println(b3.getPrice()); + b4.setPrice(b3.getPrice()); + System.out.println(b4.getPrice()); + + b3.setDiscounted(0.1); + b3.setPrice(50000); + System.out.println(b3.getPrice()); + } + +} diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.classpath" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.project" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.project" new file mode 100644 index 000000000..c17b408bd --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.project" @@ -0,0 +1,17 @@ + + + ch3-문제10-답 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/DefaultStrategy.class" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/DefaultStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..50ed27e1a733a896a69f2590d50a0bbb0ad0ed2e GIT binary patch literal 435 zcmZ8dO;5r=5Pe%pD;4BJ#DgC61|H<#QR4+;XhPHk!`Y>-uvprpZZZ5PFP=<1_yhb= z#@7ND4m&e%X5O3G`ThI;0dRps7nVTvM!m>1G((d}qb5riwm@wr7qT15XwtnO&s1Ps zI0CH)x$Ma>NJD9K9Bmi^&Xta|xfUq2J0k(R7e6Zx1?-mLVuv#ZI#PG(e5{g3IS!RT zV-N>29LYpyc%8J(RKE$-2U{y$a>7IzP8TS)eZS)il-}dywI8Pm34*v1FH~amT&;87 zkhMVF>TFtbOYl7V9!|l9`HH-TMbA}fOGI6IL0>%kg7=x1%d}3Ov`}GOUNvA3RU%#t wb=r*Fr)YuRt9eJ$TJ?DP^g(2iu~Bexg_Bj+T7ms&U_V#&&}5XYbdWP!|25oFWdHyG literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/Main.class" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/Main.class" new file mode 100644 index 0000000000000000000000000000000000000000..4fcdd6ac55978073dff7092fdfc5079ed7291e83 GIT binary patch literal 475 zcmZvYO;5r=5Qg6=h0=;rLGjzf8+ed|M~oMYA4&a4P!i&4sVgoiZBn-;{47r-lK2Ds zQN~%&aPcy;v-8aR&hFRu$0vYe>^ras_O(#41DoIv#hYkGA|5nv`$HLOLg7TkN}m#P z^+uQ3cJd@Wc}3S199YG#cM!cIM4ye*sx>m*qk%5!C2;+kcT%ziik{{a6PVDX7x&e7qj z$(cCk4<{(T&)ObG(>CZ5$I=|&yv&u06_okL3}3=#2Jolwds9?;6Rb_J9xQacSwGJc Yg_%}u&SMi>JZE&avBQzD%e95QA4IKKH~;_u literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayCalculationStrategy.class" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayCalculationStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..8e26856f29a4772ad5cc4c4cd4ec4a99b619925f GIT binary patch literal 150 zcmX^0Z`VEs1_omWPId++Mh3Bf#7gJHoaEA+#FEVXyx@|e#FEtXN_GYoMh1bb#Ii*F zoW#6zegCAa)Z`LI2DbFn5}*!7238GEPfbro2Cm@z(xT*4x6GVWMh0o@hUtOKVPj-q ZWMBr`%)r11G@F%y4a8z#2a-$-9016HB|`uJ literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayCalculator.class" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayCalculator.class" new file mode 100644 index 0000000000000000000000000000000000000000..dac34045f24114437857c6cde86a729fced9226f GIT binary patch literal 399 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 KZ}1%t{{CNtxCrk6 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/DefaultStrategy.java" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/DefaultStrategy.java" new file mode 100644 index 000000000..a80406be2 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/DefaultStrategy.java" @@ -0,0 +1,9 @@ + +public class DefaultStrategy implements PayCalculationStrategy { + + @Override + public int getPay(int workHours, int overtimeHours) { + return 10*workHours+15*overtimeHours; + } + +} diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/Main.java" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/Main.java" new file mode 100644 index 000000000..57c9710fe --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/Main.java" @@ -0,0 +1,8 @@ + +public class Main { + + public static void main(String[] ar) { + PayGUI m= new PayGUI(new DefaultStrategy()); + } + +} diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayCalculationStrategy.java" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayCalculationStrategy.java" new file mode 100644 index 000000000..cfab9f557 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayCalculationStrategy.java" @@ -0,0 +1,4 @@ + +public interface PayCalculationStrategy { + public int getPay(int workHours, int overtimeHours); +} diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayCalculator.java" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayCalculator.java" new file mode 100644 index 000000000..37ab80216 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayCalculator.java" @@ -0,0 +1,8 @@ + +public class PayCalculator { + + public int getPay(int workHours, int overtimeHours) { + return 10*workHours+15*overtimeHours; + } + +} diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayGUI.java" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayGUI.java" new file mode 100644 index 000000000..28b3db7c8 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/src/PayGUI.java" @@ -0,0 +1,133 @@ + +import java.awt.*; +import java.awt.event.*; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JTextField; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +class PayGUI extends Frame +implements ActionListener, DocumentListener { + private PayCalculationStrategy pc; + private JLabel workingHoursLabel = new JLabel("Working Hours = ", Label.RIGHT); + private JLabel overTimeHoursLabel = new JLabel("Overtime Hours = ", Label.RIGHT); + private JLabel payAmountLabel = new JLabel("Pay Amount = ", Label.RIGHT); + private JTextField tfWorkingHours = new JTextField(); + private JTextField tfOvertimeHours = new JTextField(); + private JTextField tfResult = new JTextField(); + private JButton calcButton = new JButton("Calculate"); + private JButton resetButton = new JButton("Reset"); + private JButton end = new JButton("Stop"); + public PayGUI(PayCalculationStrategy pc) { + super("Payment Calculation"); + this.pc =pc; + this.init(); + this.start(); + this.setSize(500, 250); + this.setVisible(true); + + } + public void init() { + this.setLayout(new GridLayout(5, 1)); + Panel p = new Panel(new BorderLayout()); + p.add("West", workingHoursLabel); + p.add("Center", tfWorkingHours); + this.add(p); + Panel p1 = new Panel(new BorderLayout()); + p1.add("West", overTimeHoursLabel); + p1.add("Center", tfOvertimeHours); + this.add(p1); + Panel p2 = new Panel(new FlowLayout(FlowLayout.CENTER)); + p2.add(calcButton); + this.add(p2); + Panel p3 = new Panel(new BorderLayout()); + p3.add("West", payAmountLabel); + p3.add("Center", tfResult); + this.add(p3); + Panel p4 = new Panel(new FlowLayout(FlowLayout.RIGHT)); + p4.add(resetButton); + p4.add(end); + this.add(p4); + } + public void start() { + calcButton.addActionListener(this); + resetButton.addActionListener(this); + tfWorkingHours.getDocument().addDocumentListener( this ); + tfOvertimeHours.getDocument().addDocumentListener( this ); + end.addActionListener(this); + calcButton.setEnabled(false); + resetButton.setEnabled(false); + } + + public boolean isDataEntered() + { + + + if (tfWorkingHours.getText().trim().length() == 0 ||tfOvertimeHours.getText().trim().length() == 0 ) + return false; + + return true; + } + + @Override + public void insertUpdate(DocumentEvent e) + { + checkData(); + } + + @Override + public void removeUpdate(DocumentEvent e) + { + checkData(); + } + + @Override + public void changedUpdate(DocumentEvent e) { checkData();} + + private void checkData() + { + calcButton.setEnabled( isDataEntered() ); + } + + public void actionPerformed(ActionEvent e) { + if(e.getSource() == end){ + System.exit(0); + } + + if(e.getSource() == resetButton) { + tfWorkingHours.setText(""); + tfOvertimeHours.setText(""); + tfWorkingHours.requestFocus(); + tfResult.setText(""); + resetButton.setEnabled(false); + return; + } + + if(e.getSource() == calcButton) { + int x = 0; + try { + x = Integer.parseInt(tfWorkingHours.getText().trim()); + } catch(NumberFormatException ee) { + tfWorkingHours.setText(""); + tfWorkingHours.requestFocus(); + + return; + } + int y = 0; + try { + y = Integer.parseInt(tfOvertimeHours.getText().trim()); + } catch(NumberFormatException ee) { + tfOvertimeHours.setText(""); + tfOvertimeHours.requestFocus(); + return; + } + + int payAmount= this.pc.getPay(x, y); + + tfResult.setText(String.valueOf(payAmount)); + resetButton.setEnabled(true); + } + } +} + diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.classpath" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.project" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.project" new file mode 100644 index 000000000..57022b47a --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.project" @@ -0,0 +1,17 @@ + + + ch3-문제10 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/bin/CalculatePayMachine.class" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/bin/CalculatePayMachine.class" new file mode 100644 index 0000000000000000000000000000000000000000..da95d7c19373de744c6a4e18a68f3265ecdf34da GIT binary patch literal 4150 zcma)8>0eam6@Kn4-f_Hwj6y{*A|Vk5l(-QEp+N-2f)Ftf%*JK7z?Ip&bBD#IO`0xA zOqbMji)rnyO={EHhQY+fw&`xubnmzJkLa&o+7C^ibMLIbU{n1u?{?njJ?A;wz4@Ql zZUESWzo_siSl_KjBk8Da8$4oZh0(+bzA89^>9B1zYla#+(ti zTe>2)nTYqBDcgt}mWqIaIuTiDNzI$_=@wV&a3Ye9Q9LK7pkh8@%~IfKB5kGm^$8=Y zU_*cL&124PyMj<+&ah6JF{4^x|hrBsnH@x1shAzP8th#uW3XliCAt= z4HDDNVJZmNQzwj6I%+EjMo7n@v~4Hi3MxxM+-)MPv5b^q=cK$wd{V)xgJ#^cI~8~v z8b=iPx)YN|0M#Uzyo&X;Iikr}5MFH7P>C8o(%`((64goAux*i+_Qnwvx6$@@G7>;7 z>C4($TkDWg+ff_D7Ssvg?Fy<^0PJfVSq%kuXjqM40NaU?;~ISBP97&{}nWy(6c>9c3dlmt@Vowm!@D$Fecv?YqaW<3)X?O-7r|Hxzcdt-Px4XLK&{wXxj)ME~Ne!RMg>+9` z0+nuEYo-qCw%#M2ku@vWDY51`4WGehnH#i5@|!g}Ye`A53gYv4Ud0zkwG&`Pg-pW* z0r0V^#YF6j8oq>!41=fSh|G#j3;_acb3$Ncg53KGG|Pyw)#Tn>8<}A}HYVM*#Oq5Mp2eq` z`MT5eh74;eVa0^6t+xn{f@&}0dn&%GU{gK=T`##|=E!Nditkf(ay`th7@^vwY!6PH zHX?R=5U(JkVyTqvMRwqrhGi!Kj0MvU;8g_>FJ9O1L+LY8;lzuwcSFOEgeV$)Ce2ju zO+?bEAbx_Ms(6DLQ1D|PgMwv6!_V+@Hp--Kr3~)fqHXnwlYgnnyt5MYpr)31@JGf5*ZV%0Dac?+gaQ zz6|cY>S%l)e>>U4L48;8GhhQ-dmXL2i+k;C>AmdF_tL6|*^*~@x=DD@9tgYrk@i_OIgJ->KBtSirZ82Qql*I`pyYh|oS`8B_gDp_%Y2 zsL$Z^Xj3T8>28^Zn=(j_mWmEEJE9G8-t36(bwryBqNy=Hk|yl&9YpHLU|}@8qi~#i zw9QxTbFg^z^eE@@ZmR=UO@eX{r^e_HL2L6@`zg^Sc+RZHL9X_TY=O-Y`X2mpTZ`LJ zgRR)kDBF!~>_v4rg4=Nd^>_$(Ac8xQ;_0Jkz!PZ1d4zEhO?U~-tQtG;22=V?wBWDw z#ow^YVY$;~GRtxeWfpOkJRf0(zMnG>5od{bmQj74Uqv6_%txsje2_DVLw+f_e!J^ zI0E;O>MqjUUGzqM_Kh#|+y_sspnnBl<*y`X2S*P_e|Q;RE0_^bQiYw?po^PQHd8cU(s0@nR$axa#c`%)C(NWmL8KWGe^DGfK7k)&*;3 z)|GFW8E=*2)=J+s{KD0!i|NcD^)UCwnRhoa&o8>CIJ&_TXAJ`$AQKO=>OI1$HqJcN znTHb$

U95{F@+2Qze{Nt9ViM7bN||2S+Uk%mQ7o49G##W_63)dg0|7nqk9nUOCt z1DEg^Ugzhi`0pq?4jIiy)D1?|o8()te~Y)M>m)1h@9=x-IL|8l2kv=^?C$x9xfOrp to(~e(%}~qtz0GX%s!&wC%*a%6v*K+QZeMoC-3tASl}N##c*lc3{};%<=ve>& literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/bin/Main.class" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/bin/Main.class" new file mode 100644 index 0000000000000000000000000000000000000000..e83d8976b653af50a857d0d12298dac68b7325ae GIT binary patch literal 433 zcmZut%T5A85UgGv`w(RnK|Oi{4|4E`F)<{b7B#_;7*Dh71coe2vMeTkmM0QT`~W}7 zSOX?pxO7i-S66k<&+q3qfGeE2a0KOnGMS6AAe^c<)lF44?mom*ofLxVwaH9zBPg{y zBXaxmR~?`PzlI8`f_h{!eZQQ=I)74ess%^UJW=UL<;LRwV!4=@1=S+!)uYagSx^6+3L1TtCd*V6`cb_PR5GDafDpdGQ91iNMg=kxG@~7(G!2IHWuE9e zW7qWUCYRP6=iqt#5WwM!XEC}&U1njfT&&=ItlI&jZCmOdV{JoV-Y4>LfI2I7_?8UE l*1ixvulOrlfneRJz@wBEX>EvT;F!pxK$A7=eM0Qu^bdI7Pyhe` literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/src/CalculatePayMachine.java" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/src/CalculatePayMachine.java" new file mode 100644 index 000000000..9039b64b8 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/src/CalculatePayMachine.java" @@ -0,0 +1,131 @@ + +import java.awt.*; +import java.awt.event.*; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JTextField; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +class CalculatePayMachine extends Frame +implements ActionListener, DocumentListener { + private JLabel workingHoursLabel = new JLabel("Working Hours = ", Label.RIGHT); + private JLabel overTimeHoursLabel = new JLabel("Overtime Hours = ", Label.RIGHT); + private JLabel payAmountLabel = new JLabel("Pay Amount = ", Label.RIGHT); + private JTextField tfWorkingHours = new JTextField(); + private JTextField tfOvertimeHours = new JTextField(); + private JTextField tfResult = new JTextField(); + private JButton calcButton = new JButton("Calculate"); + private JButton resetButton = new JButton("Reset"); + private JButton end = new JButton("Stop"); + public CalculatePayMachine() { + super("Payment Calculation"); + this.init(); + this.start(); + this.setSize(500, 250); + this.setVisible(true); + } + public void init() { + this.setLayout(new GridLayout(5, 1)); + Panel p = new Panel(new BorderLayout()); + p.add("West", workingHoursLabel); + p.add("Center", tfWorkingHours); + this.add(p); + Panel p1 = new Panel(new BorderLayout()); + p1.add("West", overTimeHoursLabel); + p1.add("Center", tfOvertimeHours); + this.add(p1); + Panel p2 = new Panel(new FlowLayout(FlowLayout.CENTER)); + p2.add(calcButton); + this.add(p2); + Panel p3 = new Panel(new BorderLayout()); + p3.add("West", payAmountLabel); + p3.add("Center", tfResult); + this.add(p3); + Panel p4 = new Panel(new FlowLayout(FlowLayout.RIGHT)); + p4.add(resetButton); + p4.add(end); + this.add(p4); + } + public void start() { + calcButton.addActionListener(this); + resetButton.addActionListener(this); + tfWorkingHours.getDocument().addDocumentListener( this ); + tfOvertimeHours.getDocument().addDocumentListener( this ); + end.addActionListener(this); + calcButton.setEnabled(false); + resetButton.setEnabled(false); + } + + public boolean isDataEntered() + { + + + if (tfWorkingHours.getText().trim().length() == 0 ||tfOvertimeHours.getText().trim().length() == 0 ) + return false; + + return true; + } + + @Override + public void insertUpdate(DocumentEvent e) + { + checkData(); + } + + @Override + public void removeUpdate(DocumentEvent e) + { + checkData(); + } + + @Override + public void changedUpdate(DocumentEvent e) { checkData();} + + private void checkData() + { + calcButton.setEnabled( isDataEntered() ); + } + + public void actionPerformed(ActionEvent e) { + if(e.getSource() == end){ + System.exit(0); + } + + if(e.getSource() == resetButton) { + tfWorkingHours.setText(""); + tfOvertimeHours.setText(""); + tfWorkingHours.requestFocus(); + tfResult.setText(""); + resetButton.setEnabled(false); + return; + } + + if(e.getSource() == calcButton) { + int x = 0; + try { + x = Integer.parseInt(tfWorkingHours.getText().trim()); + } catch(NumberFormatException ee) { + tfWorkingHours.setText(""); + tfWorkingHours.requestFocus(); + + return; + } + int y = 0; + try { + y = Integer.parseInt(tfOvertimeHours.getText().trim()); + } catch(NumberFormatException ee) { + tfOvertimeHours.setText(""); + tfOvertimeHours.requestFocus(); + return; + } + + int payAmount= 0; + payAmount = 10*x+15*y;; + + tfResult.setText(String.valueOf(payAmount)); + resetButton.setEnabled(true); + } + } +} + diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/src/Main.java" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/src/Main.java" new file mode 100644 index 000000000..24b98cf37 --- /dev/null +++ "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/src/Main.java" @@ -0,0 +1,8 @@ + +public class Main { + + public static void main(String[] ar) { + CalculatePayMachine m= new CalculatePayMachine(); + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.classpath" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.project" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.project" new file mode 100644 index 000000000..2fbee946c --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.project" @@ -0,0 +1,17 @@ + + + ch5-문제4-Balls + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Ball.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Ball.class" new file mode 100644 index 0000000000000000000000000000000000000000..0fcea0b68a7dfd6c125a8a2899fad37720a90a3f GIT binary patch literal 1890 zcmZ`(%W@M}5Iv*!V=QdT*ce#|Cj_JcBZwgeY@V_bM1=FOOBGl#NK>*BA*seAVW*01 z7WsvwvPu=3ERw2-q_W5d;wZ3`90DQKdf{d%O03*?vKX%xkk&j>Q1ZM*>!Bwv6_rcSGOmfn;P_nZ9X3d zrK;OLo9E$rx81c_bX8StK6i>G@$e|J)#|jITa3w9Duo)mD0LfF0zoY6IF6GVg84!% z4h<_hl8DIeln&k9oz{_Zckk$!K}5r`YO7=I^q)Po>^<{o+tM&!?bgk9&9qx$d(M!v z-#Xy!RUwpRgqoJ~g}RIEiSdYC9av7KGf>PhHbzrbO&0Q#jkqOV)R9(96Tl0d&le_R zH7pS74IVWt=BKdhB45#Q46|%cGJWJ~m}8R9vFXNN(=ms6wjz^BU=uf^*kVimP#xDn z;^TRj1V#R{?ttXqMJbAV#D1el9k(SXX!ko|sz^SkWLWogRPcaPJZM{1kN4&u6lzga zIjpfzm9*@B&#@Zi!@AWIX;G`Yj#>Zeq1p3Bli2O{?Yi}0ONJMh`CJqTta9?A+&GpI zMub+BRsb>Dai5)_k3vyrl!;m?4Yg7%Y9*IyB}Z!I)VL;zc^r%UU82=QNZq$={Du=o zW{8ZjGDOxef{%yD4YB%*N`05Vi!2D#WQZD!Q;{hS>jbYjL+@!91n=Q2EwETAPE$K6 zFTnjd9c9?&3KGcr8cU8EOUeUOwI$_Is>aUa0zJa!E!qL;#5h01+89};1(Foze1)z> zH)@0$krzb_4Mkk?u>2&g{mdjkNoS_^c^U6}$^R>4eX@`|3n{#%5D|?Oaupv;!`hg{ zxjb$o337!XSEqt( zk3jzBuw^JOj7Jn9%UOLQ;-`_Nk)t7N=6fXM>^m%pHM{U+PW$Iaq{a6GbVF80l*BYQ zH0Oq9Rp`DOn)5<)49zW|{5w8+`TE=H%h%tKj2;F!!pAH}-oRNtEs(Go++e9&{JV)V q{~a}Phmj@5ZsTiQ^ELOvW9T9CQp`S=j?JWF_oIX)`VPGTeDWVnlOE0h literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/BallFrame.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/BallFrame.class" new file mode 100644 index 0000000000000000000000000000000000000000..2cb9c0efa1ab78dabcbbaa1f73e678909efd2c84 GIT binary patch literal 1138 zcmZ8f+foxj5IvI%i_3x#ML_U^H^QPs0dIge0!T1`k{AnpaUg@NF1yt3M$~6NfM4** zXR9<+X%!#f$N0pHFY1|vQp#-AWO};$^y$<6{nytW0K<4wojb3u+nj(ec zNTY$4K`VhqbiqW^U)!SHe86sD3`eE+pC8A^^9ZeNu0U^%0qYo}oG}#OJ{KgyCbDpeF$RpQ#tnx3E!=2LrAa9gKT8*yxbOq~DC68h zqOv*9nK_TI?~hLaXE?NB3Cf*lqOTG)?WKuI_1&|LyukZg5iFgDqcFV?gU4+Sgwy8Pf4uWFC@2Dth zH~U4bp=zTdSbb1Ws->oBs~bmg;$a;%5&|yH{r&&lwu=pH+1Mn)D0$e%j=&k~G-C^@ zjYUd!Q$R2;osAc`y?Bxg^mS;isVy#iYKGzn{0M&uSd91yTANvmUg!(Q?{HqSwo7Z; zAYqx-n*r!onDIuGXbt(2Vivt~@`~~s>c4z9tJ_35nMQqvn`@APUF=asuur~)gC87z BT{8dx literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Client.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Client.class" new file mode 100644 index 0000000000000000000000000000000000000000..f80e80857b7608722d45afd204bcf9bfe03075f5 GIT binary patch literal 1076 zcmZuv+fEZv6kVscfuTsbD;5MrY#E_a5L61vC1{gE6KR?>Jebomse{AR3WUj>|M~(cU$e zUHRlVUB_@kG!aD-qclc|o=6aAr{0NxFLjl-7fsi*XxZO28i;8~kzTfB^>hp4ica&I z`{w3JRUH$Gxh~MGtXgs9wy9$ZGs>?U0y@oA1aGIC(yj6dI{)K0eJnGLtafxjKv?`Z z6|L)@tUOwkkNwBhkfH2)ZP%@sE0&somd1;Yt4G8Thb71{6zEeE!(9+f(D<=Lq8Ws^ z0=<#XdMOx7=S!j3X1)||$D8~|=PS44u6Xu*hNV$B1sB1$W68=zv5F4x4(;hF-EI)#_lQ9o%FlJ;4jiBEx1ij9?D) W^zb(0Is)IJYq%rg&A@;k08Jy%MgxOz(DU8q|H)z literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DirectionStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DirectionStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..e0f6aaee24b78b332cd60a5db3292881bde596b1 GIT binary patch literal 303 zcmZWkyKVw85S%>@E*vDhBziia;EI%>6a-P7l7fidcUZ*8oF&Jcl+U7yl!6c7qoS;V zj>0p$o_)-o|9(#Zp3#jE5IPHGW$u(IR?Z41x8D&$LVG7lk!VqDllN@L1%%p670SI3 zD#Ov55Wbp?j8Q?oi7IM@R;mj5cGzdqeuzvs37T>t<8 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DrawStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DrawStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..424df897f78ffa0c0d87c6c582ed351daacff5a1 GIT binary patch literal 288 zcmYjMJ#WH541ErPlr-h*A9SM(WMBk!pjD>`1`xXwPV~?htzy*BOi)LI(9U$JX8Vs^*(K*j5qeowuvxLyzP>g?_pWz@R(5-HEc@2tfza${ zQ#NMoPsEFAZwvLN{j%=u{LtGAA0cMs4Iq$AObA9&rNSg!AAI5N^CHKBUWUZIVDdj8 Q`~d%N3+;>65e(4%1M?y|3;+NC literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Field.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Field.class" new file mode 100644 index 0000000000000000000000000000000000000000..1b88b9f4df4eeb7973d73cb16d4e6fcaaf5672ee GIT binary patch literal 1198 zcmYjRTTc@~7(LSk7S;vYQc(f%u5D54{f2igT3iHC8;$W{C?l+{yUlhh`tA?#FPNC{ zY@*d@;t%l2-(rkUMm)3Ig4^tL=DVHqo%yog|9<%f;3O7Iqy##rUF9vA=n%+0l`rJW zQhn9+mrFDA(pR2|u9m&zNm>^gzAqO&C6KPG(3M_Ag>^UZ@0TY9#Ed}iMBvvW=|>gm zHB={o^dpF~C_S$(U_NrLb2l!~bo zvfpuib-VF=QHA%C=CV#uWp9!lve}lgBU*8F15T_M8|bV_*N+4S|Eqo@l(iMNT4!Mk z`*G030fEd0c-w8`5c1?$^^^=3RFzfCe3_3Ny+d+vbP5)+rvedn=)mOEw(LQs}y;RE>P|GlhzYIf2p5$g&@)Fl^K!wKVmzs%jC(ku!BS zXoOWY?dn;z;u|}vbFhb048EO6VF)I=x$ohKreN{qgmJI^edy^3Niud}H%}}RgHS6{+1rA6M>+<5 zQ)7ma5x+9xO%wZ!OKUhXR{Vh6$cZKjO_VkcC)?Ju>0CP3#D&)>F`{kX-md@9lniJ} zL+Ij~CSZoYEa?p39Cwo>p{eaoKsTsO;Sw&BQXkIX3a*m)HAe9>@dp`EpyN6VB%(Z~ zQ;U)*HZhUI^k>{$TmS8>t^Z_zmY^56TPzY`cF;OZ`v|LVkI`*LvOo)6BXu*wF_}ou JJkKfI`3I}D=pO(8 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/HorizonalMoveStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/HorizonalMoveStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..67fd1ef119cb699cef6c4fdd878ad34e05336a59 GIT binary patch literal 445 zcmZutyH3ME5S;ZRPK+TBNCN5T5|E&v3_=JH!jhp0N`EmYIOO=Gi(?7?iUuSKK7fxx ztnDD06t{ajJ2Sg?-#?#U08TLQU=g}E+Nf8ZisV-3a*`R5$;THD4xxRejEpm-(?6I{ zJ5{O5&ItB!G$lBf`a$}z(Fow8MrcMVm3PbeOqzQ!OC+Ha=~yIFVN_ACKqq@r3qn6y zJAKT?bKZu~7)BQ&Nyek8k2bbFbhuR@0d~+O1PhskX)aAJ683Y4VOXv;V+t=@i3$Eh zFHJ13Rk6@u?aZTRkqhjDU&g-!SbXCbarC%4=1iR3gAdf-%C^t3XoJrN$Dkr`-Yl^# rG#M$x=WJ!OZ)^zCYBtBh|huoBnm!&k3x){ zNI;s|x4Sd5yYK7!;}gIM_DvXq@{RT{V>Rt1u}bvavx&UG`CAbbPlHjAoC$Jnt1rlR zBVXIdq2!=|B0aodq^~EB10CP0L8t{aFB+<_ui_xh=f!+-AB+W6Z((GImOfVylw9vZ zg<+@FFQJOMiJD;LK|QIqnkMaT6h^Uw23EOAtbIYn``_%?Si^>ibvmX-4mPnRu*N#c z#DcoJD9J7wkjy)0(*<@fn#4nW6{NQ`7S=sZXW{@{g8v8@eDNEICbKr9FcuEqVZCH+ zo0zsi!4lD#5g3=5@j{e|srZ~`2BUTKipm?Bzj`~Xn`Bv;M{~xTdr*OG?9fH9OTB@; EA4SVsdjJ3c literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/VerticalMoveStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/VerticalMoveStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..dcde0e8c20eb235abc9a9dcb8668fd303ed7e61b GIT binary patch literal 442 zcmZutO;5r=6r61fg<9o9MDgYgB+-LMj4^6VNU9f1?+b2pO=**5Y2wfFqKOB8fIrGO zEf_Bx_Pu@cX6C)!@1M^v0B1P#;RtkMWvrgbV7$&D)S(xi4tf>8O>v9bWyKC&pzvgKsVYn zd_>?gLC( znwh%Q#Xh}FBTrsrE^!3Di(dmcyzxDZKC4q^!CX21K<%w;2aH7GVmoLM pDa4nwbeL;Hw;8;n`L7R3+$GB^J-RF2+Jg#ou}>F)1L__0egUp_Qmp_0 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Ball.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Ball.java" new file mode 100644 index 000000000..f63d8c9c1 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Ball.java" @@ -0,0 +1,71 @@ +import java.awt.Color; + +public class Ball extends Thread { + public static final int SIZE = 20; + public static final int INTERVAL = 10; + private int x, y; + private int xInterval, yInterval; + private DirectionStrategy directionStrategy; + private DrawStrategy drawStrategy; + private Color color; + + public Ball(int x, int y) { + this.x = x; + this.y = y; + this.xInterval = this.yInterval = 0; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + public void setInvervals(int xInterval, int yInterval) { + this.xInterval = xInterval; + this.yInterval = yInterval; + } + + public void setColor(Color color) { + this.color = color; + } + + public Color getColor() { + return this.color; + } + + public void setDirectionStrategy(DirectionStrategy directionStrategy) { + this.directionStrategy = directionStrategy; + } + + public void setDrawStrategy(DrawStrategy drawStrategy) { + this.drawStrategy = drawStrategy; + } + + public void draw() { + drawStrategy.draw(this); + } + + public void move() { + directionStrategy.move(this); + } + + public void run() { + while (true) { + x += xInterval; + y += yInterval; + + if ((x < 0 && xInterval < 0) || x + Ball.SIZE > BallFrame.WIDTH - 15 && xInterval > 0) { + xInterval = -xInterval; + } + if ((y < 0 && yInterval < 0) || y + Ball.SIZE > BallFrame.HEIGHT - 40 && yInterval > 0) { + yInterval = -yInterval; + } + try { + Thread.sleep(30); + } catch (InterruptedException e) {} + } + } +} \ No newline at end of file diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/BallFrame.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/BallFrame.java" new file mode 100644 index 000000000..dd45f3ace --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/BallFrame.java" @@ -0,0 +1,28 @@ +import java.awt.BorderLayout; +import javax.swing.JFrame; + +public class BallFrame extends JFrame { + private static final long serialVersionUID = 1L; + public static final int WIDTH = 500; + public static final int HEIGHT = 400; + private Field field; + public BallFrame(Ball[] balls) { + super("Balls"); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + + for (int i = 0; i < balls.length; i++) { + balls[i].draw(); + balls[i].move(); + } + + field = new Field(balls); + Thread th = new Thread(field); + th.start(); + + add(field, BorderLayout.CENTER); + + setSize(WIDTH, HEIGHT); + setVisible(true); + } +} \ No newline at end of file diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/BlueDrawStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/BlueDrawStrategy.java" new file mode 100644 index 000000000..c30c67189 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/BlueDrawStrategy.java" @@ -0,0 +1,10 @@ +import java.awt.Color; + +public class BlueDrawStrategy extends DrawStrategy { + + @Override + public void draw(Ball ball) { + ball.setColor(Color.blue); + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Client.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Client.java" new file mode 100644 index 000000000..6afc91e9e --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Client.java" @@ -0,0 +1,21 @@ +public class Client { + private static final int INIT_LOCATION[] = {50, 100, 150}; + public static void main(String[] args) { + Ball balls[] = new Ball[3]; + for (int i = 0; i < balls.length; i++) { + balls[i] = new Ball(INIT_LOCATION[i], INIT_LOCATION[i]); + balls[i].start(); + } + + balls[0].setDirectionStrategy(new HorizonalMoveStrategy()); + balls[0].setDrawStrategy(new BlueDrawStrategy()); + + balls[1].setDirectionStrategy(new VerticalMoveStrategy()); + balls[1].setDrawStrategy(new BlueDrawStrategy()); + + balls[2].setDirectionStrategy(new DiagonalMoveStrategy()); + balls[2].setDrawStrategy(new RedDrawStrategy()); + + new BallFrame(balls); + } +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DiagonalMoveStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DiagonalMoveStrategy.java" new file mode 100644 index 000000000..64ff76d04 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DiagonalMoveStrategy.java" @@ -0,0 +1,5 @@ +public class DiagonalMoveStrategy extends DirectionStrategy { + public void move(Ball ball) { + ball.setInvervals(Ball.INTERVAL, Ball.INTERVAL); + } +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DirectionStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DirectionStrategy.java" new file mode 100644 index 000000000..049c12f92 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DirectionStrategy.java" @@ -0,0 +1,3 @@ +abstract public class DirectionStrategy { + abstract public void move(Ball ball); +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DrawStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DrawStrategy.java" new file mode 100644 index 000000000..17f3afb7d --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/DrawStrategy.java" @@ -0,0 +1,3 @@ +abstract public class DrawStrategy { + abstract public void draw(Ball ball); +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Field.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Field.java" new file mode 100644 index 000000000..585bca3a3 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/Field.java" @@ -0,0 +1,31 @@ +import java.awt.FlowLayout; +import java.awt.Graphics; + +import javax.swing.JPanel; + +public class Field extends JPanel implements Runnable { + private static final long serialVersionUID = 1L; + private Ball[] balls; + public Field(Ball[] balls) { + this.balls = balls; + setLayout(new FlowLayout()); + + } + + public void paint(Graphics g) { + g.clearRect(0, 0, BallFrame.WIDTH, BallFrame.HEIGHT); + for (int i = 0; i < balls.length; i++) { + g.setColor(balls[i].getColor()); + g.fillOval(balls[i].getX(), balls[i].getY(), Ball.SIZE, Ball.SIZE); + } + } + + public void run() { + while (true) { + repaint(); + try { + Thread.sleep(30); + } catch (InterruptedException e) {} + } + } +} \ No newline at end of file diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/HorizonalMoveStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/HorizonalMoveStrategy.java" new file mode 100644 index 000000000..67fa86571 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/HorizonalMoveStrategy.java" @@ -0,0 +1,5 @@ +public class HorizonalMoveStrategy extends DirectionStrategy{ + public void move(Ball ball){ + ball.setInvervals(Ball.INTERVAL, 0); + } +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/RedDrawStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/RedDrawStrategy.java" new file mode 100644 index 000000000..ac1806271 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/RedDrawStrategy.java" @@ -0,0 +1,10 @@ +import java.awt.Color; + +public class RedDrawStrategy extends DrawStrategy { + + @Override + public void draw(Ball ball) { + ball.setColor(Color.red); + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/VerticalMoveStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/VerticalMoveStrategy.java" new file mode 100644 index 000000000..5218b3411 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/src/VerticalMoveStrategy.java" @@ -0,0 +1,5 @@ +public class VerticalMoveStrategy extends DirectionStrategy { + public void move(Ball ball) { + ball.setInvervals(0, Ball.INTERVAL); + } +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/.classpath" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/.classpath" new file mode 100644 index 000000000..fb5011632 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/.project" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/.project" new file mode 100644 index 000000000..ee1316907 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/.project" @@ -0,0 +1,17 @@ + + + ch5-문제5-running + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run1.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run1.gif" new file mode 100644 index 0000000000000000000000000000000000000000..fec8a011dd804c5228e74026b359bb0e15464a5e GIT binary patch literal 3711 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 Cx5F_2 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run2.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run2.gif" new file mode 100644 index 0000000000000000000000000000000000000000..1f445e7d13076e444308dfd7aa5e9a41ad0759f1 GIT binary patch literal 3757 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 S^PHnYZ_@eiiDCfYum1s-?zYtc literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Client.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Client.class" new file mode 100644 index 0000000000000000000000000000000000000000..ee49e0f04baaf4b399946e722b96bb7f4b8069fc GIT binary patch literal 413 zcmZutO-sW-6r4@du1RYfTdikrtp{@uPZci(PeH*-E}k}Vsaw(w#KiyQsi5Ew@JERg zqg27mn|&WM^WMIHyu1N8#i4{F&@U=$ja`QG%xGImxB|gSJ*hBLtX?N8ot6Tfb7M_; zA<&vkV*z)b-)kQ&cs;by5g0_q>Z@v<=;Br-nHCsEd8)El6{gO=i*ET~9%&H$b)8Xh zt&9~IPwt|v`=Ttk+H4w2?9tX|2}x`?YA%u0(Mo2tv_CL@2JNaja9*6k@91B`yR(KfsR? z?@ZzoH*;U-+;i`pxA*5)01a&BkYOlCgD{j~r+(by9pQ=SPWmDTlVPmO?|41nR6A{V zg&#Axw=oYd39Z2=yeDoMN*B#}<;m4O(#(! zA z<_nyb;f{EZ7|SNU>$Oa`Oo>V^NldE5l-J6-GhWLg?-6qkM9yG=-VrTqLfvI8UY#Bb(@V3kSBt1 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/MovingStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/MovingStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..8c6eea602b47f32c9708688c52dcdef9c1752fb1 GIT binary patch literal 327 zcmZutu}T9$6r6XtIN(?giVUsxcHjuXvjBFHmr-h6l_XqOAs{)k)%|unp#`Z(n1s7LWB77VF)9pU3PnRH(>uz z{p>jwJaUf5FMjbic|6|P-Mk3G$3YdcQMIVf&L z<6Omc0?)N=y&p&?Xh^%QE|G}-69RAP=ssVv6gUEt)&IP9sT~Ba zQx-6frTwC_$&9IoCkBHbTK-%~V61wsA|4yO+j3gLJ%Ner1vJ+X7^t}WY6t@FSQy2a zi6qh%#&K03nawo}Tobt5EqK{>kE`;P+YU@jA#L*94GT9hBQWHvAc6$0Wy2!E9!0U5 zbmW2Z$~xn0oUz;5sKylL1XA_57bY@zUlaL&Es4|Fl0wu2k6mCQO*&`6!f*=n0>)0% zA07VC!rMArWH=UAhi_RJ!LZJJ+rmfqm>rY*`{(7G?IZtx0`t|n?mHGf#b@jiQwZey z4prR4m##x+lyki{^nwB-)s~~y+J}3}+m?H_qSdNyla7(}4cBpSKX+z*jCugjG2RE^fw1Ilxj`*#;9a~8AZnCuLo=_J$!5$~~^vxV*b|3W3o5qseMJq;-lqjKG*6PhOZ=aLffVOM{1PN!@<%&| zbNV+NX;@%%RNu{TO|RfGPfT$2CkA)|aP#wTFquEamHZi|c26;Vg6o`ScE{g6#d~j% zjTYR&MIl-&go{%C7osOvE9=zC0?uw z7HFI@Wv}2dp5h7WRR3Gf6smBrMhrY9_;hg>UvLz-#~e{fXKYQ9vCa7t-2VfaT0!%8 zjR_8uXIN%&PkzP9PgvAIp$n`N*bITI8YsQSSaf2Gz%~I*ItfjBmK_H+_}pYyw{U|L zbJ)fmJYxwBB433hXCfjoNm3%-Ak7q3utQZ6+y`ow{2Lhqne-$hyNo38HNFWEdMhkG F@h@%fmgWEe literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running$Field.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running$Field.class" new file mode 100644 index 0000000000000000000000000000000000000000..422d46185ba68956ab73d1e9ce223a3373ff48cb GIT binary patch literal 1579 zcmZuxU3U{z6x}yTJLxdBA^pNq3u4uLKvRmK5I}7pnwl1DAzD%NCb^`8)0wQ936yvL zh);cXElF8)$q(?!Kcu+tBrTBsVk+$sc5_43kP=_<#-VBcPFWPg*aJ4zrGDBqS&P5FWCx%Vr#1jLfS zaLIFnP`Y7FIvq7YVEq#Uai{JGj8)&lsLHx>iUNb-h8@h#3!JPTqNf+H+pZnneDt>(!iV*^f-jBCDzAxUCN#$-Wl)tOH-$v!xcabINvUonZO zVGfAD*s&cpP7)Q0+N+z1GP3$swXlp8+GV?~T#9?)xZ)i_>W3utGVWUV7OTuY^m;UO zyJwGVDfTByoHtR!_XfV>B)*|~Z^KuzX<;2d2n+;{Qffh6CDcv8e*^5X0Osgxe)$i^gbk{)S(Z6QGq z;94&K9HY4%jOTW7YJCS&U7Y6Y8NR;%9OrU>;@mD~*V7;EAk#%Yrw!>s7Z?ACVqWHb z3WL07iJZe2@_M*X;B;NZ9IkN1A|{dWDL&&<&_3B`@sc|ew3Qik^aZYU@kKR$V;l2( zu)8R)r@!98Qhs`&i*LHP)1xtlwHLU*jl{}tF)^Kg_5168wqO6nsPja;iU-s~Gn=6% zz(t(E0&~B_)yrJJLM{s^MZTbham}F5?gTmhgolhYOuwJ;3ssU_Pf_E4F=C)DHVnp( U@!z05h9(rB`e+aw%14O(4|p4R1ONa4 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running.class" new file mode 100644 index 0000000000000000000000000000000000000000..246b6af8ad8774a414f1059c2c028e62edceb5f8 GIT binary patch literal 1483 zcmZ`&*-{ft7(E>l630;?$|A%aH5rhgxcrKH6b%MZgHhC*CTYo7!;CdEarvK0t0Yuu zl@H*Z@8Y%P>B#^o&=Au7^|zh#EkAyL{SIInuhK{e?DJc$Yr8AOC!I5mq(JtKd?!B? zgZEl7H|xt)CD0cr-(kSuzMi%@k^B9At_O$W=0HbmcHGj8X01 zzY79~Ozg!zgSR6lj^Y>{0~Ov;uVu>#OO6+)g|~{ZSucXgmv!_LOdO?^@5AD4&u=Kd zB0qYq(7R6{toJL+?7h`o)0;4fj?bLajm#$nh3~Lto9JXu`nmG|mc)Y>%?l0|Qf-(B|h&nAnrSMV7my+)()%^nWHU;|dEe8|-n3jCCi_M1Rr`OAT`FH@-L&qui4r(< z26Z(%u$LXGlld3Asx_xMn5Wxb+Qp zm$cP7?p4OynEM>Tndk4t2-*OFX9;PLe?z2n5NAl|GIE@#Lzu@AJmdbp;s!Qx0uILT zkiLT*;8?&TN=?##j3*F%8C0uviP@7`<+$UZV42P&rU`ic^?CJ6pwb^xK@D|6%U6k<=J7)6Td{~Fq2s54h~`2o({C=V>_I&dj{I`Z zR)`6q5z6c;7NKNaZ#cU1AH`C5k>JD}heJ&oXrpVRLvYJ6g<&T3QU%h1iyoo9;Ron@8I8_*#lbUU1;1YVkJtL~_6ybE8&RBPkN^Mx literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/StandingStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/StandingStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..206535638c46e4093a51c72129271dc899e894ef GIT binary patch literal 470 zcmZutO;5r=6r2ZzN<~qiNW6Ii5A@&>czx^KfoVl zd|Rm!;$>#v&YQRM_Verg1Hc9PHY$X^UL}c2LNCZfvfx9IX_3irZNnn;O7$+yw=_ci zQY9+8B2)*%DZ#o<7t%o$jV5ZS6I#AXDdxSZ+2f zw26q#z|KG82u_f$^jzL36Wra+G%^8j240>&5~%Qrmu9rN@|cOacK(LFmqK*O1*>t^r( literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/WalkingStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/WalkingStrategy.class" new file mode 100644 index 0000000000000000000000000000000000000000..2f3b3eb24bf55f57b1c1d52e7f20b614113073a6 GIT binary patch literal 466 zcmZut!A`s0X=#H4{-2^@nT|PQn_I8;AyFwx?0+#mJ6Ms8lF;;%KtxlKDqa6vn%SLtBpmqV zI~yTJ1Ur=3#ax7v``W$!jejq4F^mK!=BONMWTSzWg(kr(#}tN%Omh`T7arP##&We^ zA&tdc&ujfNjo?g@MH!pw#MlFL4 m+l=n2fq923!Y=BJ+B{&^eda6no|z5&d95|C`RnZzUEOc_p=Ce- literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/stand.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/stand.gif" new file mode 100644 index 0000000000000000000000000000000000000000..d804370395a89ff3dbfd3a0ff9f85600116491cb GIT binary patch literal 3704 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 Cx5F_2 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run2.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run2.gif" new file mode 100644 index 0000000000000000000000000000000000000000..1f445e7d13076e444308dfd7aa5e9a41ad0759f1 GIT binary patch literal 3757 zcmchV`9IT-1IOQ+VRFoEa%Mh4a+atR2@|=RvWieS%7=s);l0hVgSqW+Y_>#EsT3<| zb1t6_CAlhxbvBugBy0dU<%dJ2-|dLkc0&z`v15BpVwW3kwTk zv3PQF^8NewqoboEBO`-@g98HtFJ8P5iA24QmfuOy;ozLgDw6rudG}PAC z@_0Nhms?$3&0?|Wbb4`daZynbjYiAM%cD}MBoYY(!HkRy91fS5n3#}|5EmC09UUDR z85t1~apugKu&}UGr%nY22L}cQVlbG1fB=7ge?LDzUteDzA0IC-FAon72L}gxdwV-O zJ6l^@8yg#IYilbjD@#jDQ&UqD6B85)Wn^SzXlSUfudl1CtD~cXL?X4cv@|p{)YQ~e zRaI3~RFsvK5eS5ml9HmLqP)EPrcImRaJY<&jI^{g3pZ-$0P zM#tX1dq4i+IW$K`7s{ZR=x8hm(_u$Z0(tOkyeq8Z;02;PrtLy7Ufoj41);OupJ4Ns#ch9t zGRD-%R!4W?BTVECZUH=EtUpmZN}Vwp*49#;ss1tW3EIQvrfM~mgB?L_@t$C!=)Oq# zh(rbHOvGmdiNMLyrq`U8h%N3?LWJI+^A!F1>!z1Va6h6zNe3r4&EknTDoU^*S3pV6 z^T~8oRkQMdQhbOjzzRZ=XE^lIruT@m5k!Ch^7AP6xTitYy64y1w^UL1$# zFnvw`Q@685`-^xJrJN$gex*KP>Ml+K@$%H!hgX5OJB1${RRCmG<0pM)hxp};XPa3yLhrV{I< zV0x)zjHl=X+vf^^JKm?sIb#NX?$zsl1~!}#x@W&j5V~s`@6(hA&^3r)3$&$XPUsBE zzKJF2f&nd`O17!htYe(L^~Do-!PeU90BJpb*$e3AK*O{{#+c`bVB@beRYd?PEKmXZ z4S%~D%?Nyz0I=<{>p`GtVV}C1O}ZaYdegJ^ z1Dl`SKuGC5WB0qu%%2vx|8f<%%Lob}fHf$i9ST8^oC)(*n|G2qFh?j^0^#7LuNlC$ ziiAvOXeL%*=<-%}{~FoPaB9!^zE>^nYBE>S#^u@aQUQ;?%%allVCbc4tw*|lh$%f| zvWulNof*r|FRlY2D(fx}Eryj0TBX3b^45Yu2q$SRMNc!_!!14UX5vqWV68QwWBTRT zymgMQ>H^+z$LG`WKvboZzAPx>s~8ZZfRA6p9J=1w=%-FpjQ?R2v|@!BOZ7UyoVzHk zQW1!5=p7w>gT9<{BVk!tXT%&=a2@+ma&A$y8Mxo$nPzdgz=z0seF$4nqw%-C2US`c zYo<^I0VC(Q+`jw=R}MjXN1pUSHi=9sGvRiGTEd@;jHOpH-Su#5)lG~jkSgD#pA62@p--9 zi^r^f@O?wut)d5>K>h0nrtsK<| zZqsekwJVs$p!D-r%P?SH*n}^XI_>x4kisqq;B%3CMDuGGrbYFVR`};HCwcK#cZ_u0 zF3A2`*58-6J!$q1<5{C+Y2tvNeT>aUDEBCEC z6Kec=^kU1yHuQ_s-=5aNf=JX7?#(4EH6%QyZjaVox0D{#tF`}ru+vW|!F;7s>>Y_3 zy!|;8@>b!k*gf>o+F{8B`vbc8xsLk^M{}b6?y3xei|RM=&)m;UJP!$V=C&qc?6fV)8|X4ETXYqC*G^l`LCxe8+3bc z)Vw^7LanKXXI}tov9#X1*8JF$zM~GW%5E8U_F!l-UMHa?N=$*{hBRouO`vp?%*4@Y`q{9uBs$#76J@1Bd=dBfCKuj=J?8t2cR zf2#V58Jk##%J=s1T6@L2B(vA$odTwgrQN81uo3a?^RaZ~UD;El(RHKAQfq z3lIl|YMmbHFp-gVl~jD$jM_8O5p=&^I_&eHkIv}zH#4|x->BzKpU`Hv+u!4-hs9^E zzqw<-YYQuw8p$5(Qb^p%zp)YPML+&7hmoB4#Yr*tLB+d<3%ed~oPgt{_G&;4T5+DN zc|f;K{r%At>zJ_%x%*G5YtUEQ2lC@jR~UWT{C&mCt~$2x7-4b?JtD+E6^hma_Py0DI1T~ThSp273ZNdj*`|B_zXCkT`6`kaJ!AGmg9LrXFUTB3zSl!Ez6>7rXZ*>{4F`ckW)J~_-w^e)IIaS9s zjt9>a_NRTQ*uE-x9QSB6o4#jUEpGL?FLQy2Xc^ZTk56*_^ChWnZ^)^AxVDgxrHQ$< z$~}l*6{ufJwFXYl{Mo-kmMVYT*l+*zoBn#n)9RIbL%rYP+3RVokG?(X?fs57_?@c2 zUhQW0&W%_9PO)IGJxlIgsxjC|(#`xn7}xvbHak5jhQ0pIqjy=}=hu8o>hIUPBo3?Z zmlqoh-i#;zULO$t;k_7NU)U@b}Cs_0yS>8C=6mhLk8uWh*EP2gf2ndAK5J z21JlR>QzvU;VT=7*BTD8Yr*%?&u;vn_D&?LThGL^{g_9nH-lx2l9SCjD-K|T+0m`X19EfzMqW@Iz8Ei#xgy9(GR>_M zWaEZ6p?h=F>o;LMa_}kH2|*+QkWCWHQCdlr{Uq9ILN1a#Y`vU-Y-AC^EUg1YVpLRlN0D@fK#G z@wH4#T!w`i!Sq_9)kx~DCuvYzi6gnhYNTYJT&&#_!p8K=ou9mrx%0JW!v#^Z3ND1RGve1vr(Bm^Q*64*Z zj9?s&fhFpXy;oguOiOI9aWF1e9k%Ek4}mcBNtN*7n= ztrQKBlar9uFR(f9uSJb8FHLI41h-c8I#)WjR39*7ERthA#nrrH^m#soiDiDHS4*{2 zuE=nH9A*2UOIP_WFv{ODqZD~ojN;~V2=f>@3gxERWwl@DRLq$kE$rG^b|15bYsS?* s&NWHpnzFd&54aYiT+3fv>&-md-Mk&gdG@KBcn&Py?gzXNNI0K+S}V(TU%RNS{^@sTvb(7 zQBhG|US3jCQdn46P*9Maot>4Hm64G_B9VwhA|8(iK@g2bqfn@bh=}m;@ZjL!fPer$ zKfk+o@A~@sdU<)>zJ1%n!^6eJ1&KsnyLQdV$?59Vt5>dEaddRNbm@|kd|DS9i~wUUpyqz~Io^;gNU$ydNDK z|1dE*HU06^%;zs(XXoY@7MD27-@gA?S^c@TzOlLW@Al5_-ml;L2Y} zl+tl$*Ogh`<rqVxGzNeQUaK0eT|Pz-)_LURUZ_AIauN=O>WP1Z zAnQZFv?T-`P74ey=b@w>Q%gFBCi)t$QaXcoo+nric<+EUaMDCB&ev zmVlVDecxhnaijQqvCvzVK%py~utYD&t($?}xr+k|TsU@|ip)TBq=ef&UJTlaDY*QQ zXzp1qbvX(L$+AWEFW2A%K`$8#v{7fQsRLf8S}zdkgU}D$>U_dL1Fo=nPrDwl?LsVw zzC=g7g{sIp-L6lX8p*1d%cW->8WHPf#h#^y zi`+~_wW2zwD-M}L%`5@%)J&X^Ir9CEiE_^n_}G_all&>1Wh1L$CMyEimBBo8?M}+3 zcrK}*sVn4mLxGmroa0huzmet+Dx5h?hh|mDH9qCmykQ;%7uC3n8pyXW4~-ugl7|2| zi!1?*sP0>;Ep=QG1HiU;ODmvm-Ar1_Ai=VN)qr#ykWrgpT2> zISkcgv#91giEbUL79R!9?-8!5F8uY`?4Oo)DgMg1&myHFyw_fRUsjJZg4%7C$h}hf zgNu1HEwGWh)P>%98}=KxCGp$hrS62-VJ0uQn$IMULFkctG0L*uw$=%xrx7~{54k;- zaYB3$={H?TavfuQ>YGm};9q2_A^@^mB@SbGfv-Qj5Z#{)RAT37pZ`$EOg9#Klc5N# z+OXq_4gmp=d#9$x?c!rINi%+M_l3PMK^Mp%mWo$ zp9RwhexQWaBS;yub0`-17QKpj$+FlgIqkV&6bm z@qp5DShfCMU&aFn{qLpS>oT3zBe8bJMMfo4n*gvjWoph9u#+{W@Bw~qTPp250H^zi zu6M$yN|RbKB8(68DBeC6EynLKC2#jkhWtza6kYXZNa>B4W4R#g+IEIxw%l_ydOThO%a!h|i{ReqH(Y3F@ z`p%pD7o+2eS~V4AVQ+GvHsde0yKMg|UN%fYYP{yRve|&B8wMpIYZUSiA3f)kc73$G zS8V=*eAo}Yb6aK1o6Uy>E{NMRX z`Mzg^#3Vlar8d>!PGPvb71rCR_^Y7*#gv)Stpz=dJW1(nD5YEXp}}zNGt2(4{Kh9$ zCxQtB?%%=+T!dpzS;$}HI%Q<%R-IbVcA{Q%d77P98&Y}vHmVNgIx9(u2*IB1>vObn zFT*=js>$`?9ZYy6vogCibni;>h7Z;#Z&I!r?io~?X!)90*Rjt%^aOHAzB&e|KC>W0 z64n8)dCAS{ltEJ7GY7ivVYPnuW>}s?{enKNdNA3%f%?Gct~CQSly$^VeMZ!;K4wxP z;%UQ``F*^}_q`+0DONOYo1dAj_eheXQ2Eh%j+Ig6JJNPTg|gPNv1RN(e610cWu#@> z8w$g6(C})3jb*dcU)Tyq&l-z_Z%F6ZF}iFL!=n~<`SvW>@UY1=FkQ&K;^v2@#mHw) z#rHjXdB=0tn(EiNM}9bHwN4B;+S2V==Ki)crPEHSogVnfGi;yW3Zv zBux`I&|=-SaIofUwJ$66Y}Zh@ok+UB510Fp+d_gz+K!TH*Nof?NldzI@oWC`s0@fnF!x&NnE)B^0Py@(V#FqLCin; z)eabWBdAmkBRwIwy7K^_V4m}Xm~o7X;2k(3VfZ>$eFCk;z$z7BtMp^L@*kY^$LxN< z8o9>kBe;P-Q&DH(0cuQ~i)@%F95M%?|0WM@0j z*)K(!nJUBvQ4}mlNr)3jjkJr?^h+kd@kB~;=mdUh4VUd2mB$Inj3Hndgt4pmqKSmu zT|(IxLOCa~(lu?t2FutD?r%=(uX{k{q*b=y>a~cSy}?cXL`EvHl|jrmk7#E^+Q3OZ z0+FxmNbjnX*@)&TjfeCO3UHCUxF5 zqj)Kq!z9=3V<+bn9;ddP zt4B#RLdDt}r-jGl=4Coli7aD7#t(zW-FOw_ktW8Ly0ji$RH#W`zV=x z1=+^bMh2DaN?k=ziUM*=_NWB}YK47ab!!H-kD4xDXh11Uaw}BQrgaMzJ`JGMO=dne zrq-fpb1k%tNm~0du5mA~BY@gkL+hy_HX9c`qZUb_iWsd$gWAO*_Qhj_;^z}ZZ}(`O zlf^EK;^}~5hEU06%@T3@5`mhMdO`_fw|G&$WZk%Q%dK=9Rk}+p{nc8!KUw-`uM|+A S^PHnYZ_@eiiDCfYum1s-?zYtc literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/Client.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/Client.java" new file mode 100644 index 000000000..68d173622 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/Client.java" @@ -0,0 +1,7 @@ +package running; + +public class Client { + public static void main(String[] args) { + new Running(); + } +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/ImageService.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/ImageService.java" new file mode 100644 index 000000000..584d09de7 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/ImageService.java" @@ -0,0 +1,7 @@ +package running; + +public class ImageService { + public static final String[] standingImageNames = {"stand.gif"}; + public static final String[] walkingImageNames = {"walk1.gif", "walk2.gif"}; + public static final String[] runningImageNames = {"run1.gif", "run3.gif", "run2.gif", "run3.gif"}; +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/MovingStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/MovingStrategy.java" new file mode 100644 index 000000000..610b99c6c --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/MovingStrategy.java" @@ -0,0 +1,5 @@ +package running; + +abstract public class MovingStrategy { + abstract public String[] getImages(); +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/Running.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/Running.java" new file mode 100644 index 000000000..5277ac687 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/Running.java" @@ -0,0 +1,92 @@ +package running; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; + +public class Running extends JFrame { + private static final long serialVersionUID = 1L; + private Field field; + private Controller controller; + private MovingStrategy strategy = new StandingStrategy(); + + public Running() { + super("Running"); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + + field = new Field(); + controller = new Controller(); + + add(field, BorderLayout.CENTER); + add(controller, BorderLayout.SOUTH); + + setSize(500, 500); + setVisible(true); + + Thread th = new Thread(field); + th.start(); + } + + private class Field extends JPanel implements Runnable { + private static final long serialVersionUID = 1L; + private JLabel lbl; + public Field() { + setLayout(new BorderLayout()); + lbl = new JLabel(); + lbl.setIcon(new ImageIcon("./src/stand.gif")); + add(lbl, BorderLayout.CENTER); + } + public void run() { + while (true) { + String[] path = strategy.getImages(); + for (int i = 0; i < path.length; i++) { + lbl.setIcon(new ImageIcon("./src/" + path[i])); + try { + Thread.sleep(300); + } catch (InterruptedException e) {} + } + } + } + } + + private class Controller extends JPanel implements ActionListener { + private static final long serialVersionUID = 1L; + private JButton standingBtn, walkingBtn, runningBtn; + public Controller() { + setLayout(new FlowLayout()); + + standingBtn = new JButton("Standing"); + walkingBtn = new JButton("Walking"); + runningBtn = new JButton("Running"); + + standingBtn.addActionListener(this); + walkingBtn.addActionListener(this); + runningBtn.addActionListener(this); + + add(standingBtn); + add(walkingBtn); + add(runningBtn); + + } + public void actionPerformed(ActionEvent e) { + JButton btn = (JButton) e.getSource(); + if (btn == standingBtn) { + strategy = new StandingStrategy(); + } else if (btn == walkingBtn) { + strategy = new WalkingStrategy(); + } else if (btn == runningBtn) { + strategy = new RunningStrategy(); + } + } + + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/RunningStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/RunningStrategy.java" new file mode 100644 index 000000000..7f3416f33 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/RunningStrategy.java" @@ -0,0 +1,10 @@ +package running; + +public class RunningStrategy extends MovingStrategy { + + @Override + public String[] getImages() { + return ImageService.runningImageNames; + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/StandingStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/StandingStrategy.java" new file mode 100644 index 000000000..8c12385b8 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/StandingStrategy.java" @@ -0,0 +1,10 @@ +package running; + +public class StandingStrategy extends MovingStrategy { + + @Override + public String[] getImages() { + return ImageService.standingImageNames; + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/WalkingStrategy.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/WalkingStrategy.java" new file mode 100644 index 000000000..8eb3c71ba --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/running/WalkingStrategy.java" @@ -0,0 +1,10 @@ +package running; + +public class WalkingStrategy extends MovingStrategy { + + @Override + public String[] getImages() { + return ImageService.walkingImageNames; + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/stand.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/stand.gif" new file mode 100644 index 0000000000000000000000000000000000000000..d804370395a89ff3dbfd3a0ff9f85600116491cb GIT binary patch literal 3704 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 tHtEe3Iofi0WO8O>cu + + + + + diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.project" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.project" new file mode 100644 index 000000000..89410be08 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.project" @@ -0,0 +1,17 @@ + + + ch5-문제6-SalePrinter + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Client.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Client.class" new file mode 100644 index 0000000000000000000000000000000000000000..f33408e44f5a6f98bcf27bf16dfc5e17a95eefe2 GIT binary patch literal 642 zcmZuu+fEZv6kUf-nM((03xZTdK!p~H6@A3`LSjNPVq#4b!qaJcQVvdMnqlxi{1jiP zk;D)1OZ*Ds+8q)eG?VN-Yv0z|`~3Rz<0pXEXuFtGm_LfGNpcsCLiIv_(VbW)qt1u^ zg&E{bzp;tU-zt=vt)7B&lnzaR68sQl%quKLHZdnx3(b!>QOq-aZhJf@NLk^ z&+Vmx7Zq%WoHW)pQCMl7MR%;-JhRE@u+?)>W65!D#vYaw-0ry^Ptr6%759aCMLPd& zJZ|+oJdmZ*^s_ZC8l2MAF(t3T7xOs8I-YPHJsc|d%}6*%D7noLTe4F)p^E&Y85ld^ z2^^h`sD0@_LKVuE{Rd<$2Hgf;vFnnw5*K>z8+6mFY+&A5iB^g;ypYYY3CiJ%0CW7~ zRcT$K4!xo;?@r-;o23I9}NV&O^6+$Hc4LcAw5wFH9!Wy&e}yEsU_94~*H_0bBLzQ$>Xsy{=1-36Hcd7uwxQ2Lfif`m#oQg~W zIqu6?n|kqRC-?f1kn0$iEShJb>$$GgZ24y5rhtPyW6pG>lXF77`QL%x>K9>QN1%>f z0(1L>VsA2y19hp5e8DIjn}6bvr&_$C3?DX|-dKXO#hn6*9M`yNb0*GN?+xN5g_Stw z(#JepzKb~kWmLH0O=5%NGP(A=L>4Q_b!;ujx9rR~biH?Mdq*<}uQ5aI^><7awrO)L fv*8L#tZe)o%xMch24OyEKH-`z@>s%NI;HUgPCQeB literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Sale.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Sale.class" new file mode 100644 index 0000000000000000000000000000000000000000..263370cb4979eb58e47f86d9220d33507e6a105c GIT binary patch literal 1404 zcmZ`&+fEZv6kVq+9a;ujX}L&2R214$D2NxZh}=ZbQZ7Y^ybWc5!BU!GYUEe^0iR8z zL`jU#CjNqd;$@wgA|;kIIX!2eeb!!U?LFUrfB6bv1g{jh1Uy+SuPg8f1oySKS~9N{ zc9Tn6`+Ck2s5316;7Fh)ZQqqFBcGfyP3<^s99by=U)Itr@_xUKu)MnFXaR0Y=rLN$2! z5k$ZTfv}1?conoVuSNwwTAaM=Dtzz@1ky%9&y)_fbaPGH%2Pvg`Y@;E*EQ3S=St9H z?HTmIo0d+IrfLhRu$RSesmdM?4SpBJf+|c?=F1KS`@!KUE0~v zO+R`NXh0ug3ZkTPq4fN@ia7e|OF@6f-h|IfRCSC62ACi{_alL%iXjZs`d!`1Xa^K{ z`H@pTB`c4pxQ_=^sTGTQVOt;(bp+VxmBfmss*ppS2njq=F^Vy|z+&uaj@8)51qq&# z;Nt?3=)#o{Qu&06rHsgd zN;?AWSG}iwY~z9Kx3rP{ZoNDd$Hnu(=&VtoYTz5QmX>?7s1+-7*u@`bo+rgV)$`2R=HAU1 zzZ$NMJgwMgAQC@CQ~V6U*QaPcL5SNHZre`K{?P{L;Mxoi*E+6V1PI*0eS{GSMhJAG zi~j;Q{=xrXS@~uv{t2Nny3=RqA?)4759sdyj9!6nNMsTNWek>aZ$oY#mhpIlcTWV~ z|M|&x?TIp`Bnb}-0=?7$DygT6APa@4qYF)p2ax1>lr$$1wu!}^;uT``7{fEnkzf$R zc#e6J>tgl-UeJY?M3q9EtTcCvcEt4yAq9O3dLoQvu*6k5H_g{B$wW%)FJpP*!YIFe Z(?+K4Hjh>(v%*8Nmo)`{St7Ww_80w!Eb#yU literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Client.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Client.java" new file mode 100644 index 000000000..db0a11a89 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Client.java" @@ -0,0 +1,18 @@ + +public class Client { + + /** + * @param args + */ + public static void main(String[] args) { + Item item1 = new Item("Shampoo", 3000); + Item item2 = new Item("Cookie", 1000); + Sale sale = new Sale(); + + sale.add(item1); + sale.add(item2); + + sale.printReceipt(); + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/HD108ReceiptPrinter.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/HD108ReceiptPrinter.java" new file mode 100644 index 000000000..2ed15dc11 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/HD108ReceiptPrinter.java" @@ -0,0 +1,8 @@ + +public class HD108ReceiptPrinter { + + public void print(StringBuffer buf) { + System.out.println(buf); + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Item.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Item.java" new file mode 100644 index 000000000..f2b43e8bb --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Item.java" @@ -0,0 +1,20 @@ + +public class Item { + + private String name; + private int price; + + public String getName() { + return name; + } + + public int getPrice() { + return price; + } + + public Item(String name, int price) { + this.name = name; + this.price = price; + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Sale.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Sale.java" new file mode 100644 index 000000000..32311ac31 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/src/Sale.java" @@ -0,0 +1,25 @@ +import java.util.ArrayList; +import java.util.Iterator; + + +public class Sale { + private ArrayList items = new ArrayList(); + private HD108ReceiptPrinter printer = new HD108ReceiptPrinter(); + + public void printReceipt() { + Iterator itr = items.iterator(); + StringBuffer buf = new StringBuffer(); + while (itr.hasNext()) { + Item item = itr.next(); + buf.append(item.getName()); + buf.append(item.getPrice()); + } + + printer.print(buf); + + } + + public void add(Item item) { + items.add(item); + } +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.classpath" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.project" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.project" new file mode 100644 index 000000000..6bc9d25ab --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.project" @@ -0,0 +1,17 @@ + + + ch5-문제6-답-SalePrinter + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Client.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Client.class" new file mode 100644 index 0000000000000000000000000000000000000000..2633a5b38e93ac6db8daf4ed34feda06bccdef03 GIT binary patch literal 1217 zcmZuw*-{fh6g^E6W|9m`0zrc-sF;W$0o(w^C5oa0B2g^$sR=C%B$=2DmVSy~;Ilpi zORD?;zr?RlPtQa&g_TrK_wBo!bIbhz?mFpEHkhI;htgOj~ zqt9()*xPcN0;U~Qn`5S`bZP=anOFATswJ=C)Hdg`YX%Z@S@cxZ#DIWN+LG0}>&DQJ zl&(CaBM%2IX4gy{)udc^$594`nWZEvgq%jy#0h~^JJocdPzbyxxzqQjES$y&naYg~ zfoR6o<$Ww?1mX*FN39T@ry4PgBB~?CESyJ1AkkFbswyj|?zLS61~PW1iJ5fF1qrC*zN!}J_L6t)8E{7l$)OOswPmd*(tj?LZArPs{W^*Klo49S@ z7HRupc6wU4gCa%r8CNKJ2bu%TP26L?*V3s_gs^OE68FG=rh`rn5l)g`AW_@EK7^ap zTHCeegm0>Mb&j#3p2@@g`vXZe1bXa$1ZHGU$&=-sC0X|e*uZ^(SjpXOl+}WxOT>dg zp3rnL0(OdT3h3gF?}DqrQ=VVJZ{)%r%uoJxjH|xZu5qqb;J|MWPf_%uj}``tUWDlh zZ0w`|MKYO)f7!#J?H`ULLO*y|+DH1u9*!+1kI#m4<1L)bUF5QlQCiQ=Msn#$3+Hkz zWYb~2Re8`1)p$pw>wg zF@RSXL>Vcc$9#Yl3%Jkt9z4ebERxAE9`d(HwxgVaN3dCE4D(pRGWpFg?_;d6WltD& d99_SdwA;X{fqws=HZW;0lpPT$(WeVfe*@`d1XTb4 literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/FakePrinter.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/FakePrinter.class" new file mode 100644 index 0000000000000000000000000000000000000000..c4ff926d9bc5769a95ef2d7d8e7e7fd428ae1b38 GIT binary patch literal 536 zcmZvXO;5r=5Qg6^g-R(OD&oh@8(<;_j~Xr{oEkM^dSB`W7qKN}@poyWG4bFJ@JAVE z+9ou?!_Mx^zVpmGKfhn!04{Liz!Ip9<&(NibYxWGz!qrD<%=9FWHcMxOy?>z4k`kT zI~6LuG`UhhtOWM_jdo&)F}oC~T8f&)GDoi}*1#wE)5}h&~Fr6ajv=7A^WdpkTuiXEH_eKv34T_btXrW1O zFB71JUCPKG_9=4nkkl5d`)40$Z@S&AN@Jar(8=?Rz;w34gF86PSsNqoXulG)XvF>3 J$Wf{~{sU9KUC00c literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/HD108ReceiptPrinter.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/HD108ReceiptPrinter.class" new file mode 100644 index 0000000000000000000000000000000000000000..7a1fec64f8011012c95de788e777ea0963eaf6a5 GIT binary patch literal 546 zcmZuuO;5r=5Pegi3$=oPAb!gYG_e{lCKzL)F&-KII-vCZf7tjdho2%oa(+BBFHH_{<+b! z0jt1D24%c-1}y{Y*c8~{T_oJ|WfNN{5=0`v^9jT%U3snIA!`ffIE?90 z2g~7;;ZM-m^Oo4=II`Fi`^^3)jJKq0velEMhGo8+lLq8b;E3l%k!=jVU^0z;_8p~z f57cIOBgyOhkVrVHlfEejBe0DfW+Ch{Uc=rWv$1dV literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Item.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Item.class" new file mode 100644 index 0000000000000000000000000000000000000000..041104f46e93bc6436717e9a78d4d8f69e67563e GIT binary patch literal 552 zcmZutT}uK%6g}5nUA4(oGy5{AH{Bo~dMtVgf(5a_5PBT9!A9IQwzXf?LqQVs&=2TG zMR!&yFd4Xa?%Z?kIdi|hKRyARVBbN8VEc&*9oU5ONIuE-SVqJ4)nKH8gqx8J6`|Vs zYxR;?N5fM>_94~*H_0bBLzQ$>Xsy{=1-36Hcd7uwxQ2Lfif`m#oQg~W zIqu6?n|kqRC-?f1kn0$iEShJb>$$GgZ24y5rhtPyW6pG>lXF77`QL%x>K9>QN1%>f z0(1L>VsA2y19hp5e8DIjn}6bvr&_$C3?DX|-dKXO#hn6*9M`yNb0*GN?+xN5g_Stw z(#JepzKb~kWmLH0O=5%NGP(A=L>4Q_b!;ujx9rR~biH?Mdq*<}uQ5aI^><7awrO)L fv*8L#tZe)o%xMch24OyEKH-`z@>s%NI;HUgPCQeB literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/ReceiptPrinter.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/ReceiptPrinter.class" new file mode 100644 index 0000000000000000000000000000000000000000..6e60b8ed5a111a7fd2fd2660958a425756f01718 GIT binary patch literal 149 zcmX^0Z`VEs1_omWPId++Mh3p1)a2C6f|7uu%)FA+B6bEAMh1bb#Ii*FoW#6zegCAa z)Z`LI2G#Xw<4%E%y$YNj4Y2OA>;BLg$g WVg?3ApcSkPY#kIGR%g(b;73$NH&g|E0`U$MB8VXxhQNS| zE(8Ulnpran&FZRQJ<(Syq}8w0OL}Elw@kVAf&qKOq^zJO#k0KXaPwG6&|wuL7!?T7 z086*)WIdQjwkf16C!SL<&b>YBiZ(@+XPfKmh84jWqTM)wQwmO!%ASJV<0?*Lf_iJl z8`?dvTcWKAERbM=v@wE7q*SDlp_^sHF6dPX+<(X|pOclRRAh0MD)mOgsI3WP60QIT z-AnW|wS`>jM3}^Rm1A;|F0dGTRbn;vXI_F|mf%+eh7(1?dN^> z@!=KWN^w>puIWGj1B~&K@!iAKEVBi_vD6lNQ#*(~-$MT<#6LKv4)NXV;C1m_5K&?d zGA2*+3=U(6Ux6ck@xHT8fU&vMN5oq=s_kHmkjEC@V?4c$;{snXS;(AeA=$#275Q_n zg-a{kyDISR_Ya<%&a{x<#*7b=MF5h;1lfc9L*yP~wK&<2lG_A1Wx2kJeh$lk!!G4A z@Yscr$35I9%NQQyt3z1#MwDarb7;oK{wOmA=%5Cg3nVddw6-~NW5Sw{Rz_tv4-jQNE=r0FILd$ Mro>v|X&;{b0S9tB%K!iX literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Client.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Client.java" new file mode 100644 index 000000000..abd239442 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Client.java" @@ -0,0 +1,23 @@ + +public class Client { + + /** + * @param args + */ + public static void main(String[] args) { + Item item1 = new Item("Shampoo", 3000); + Item item2 = new Item("Cookie", 1000); + Sale sale = new Sale(); + String expected = "Shampoo3000Cookie1000"; + + sale.add(item1); + sale.add(item2); + + FakePrinter printer = new FakePrinter(); + sale.setReceiptPrinter(printer); + sale.printReceipt(); + if (expected.equals(printer.getReceiptContents())) System.out.println("pass!"); + else System.out.println("fail!"); + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/FakePrinter.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/FakePrinter.java" new file mode 100644 index 000000000..5e456c760 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/FakePrinter.java" @@ -0,0 +1,12 @@ + +public class FakePrinter implements ReceiptPrinter { + String s; + @Override + public void print(String s) { + this.s = s; + } + + public String getReceiptContents() { + return s; + } +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/HD108ReceiptPrinter.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/HD108ReceiptPrinter.java" new file mode 100644 index 000000000..e5e4d914c --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/HD108ReceiptPrinter.java" @@ -0,0 +1,9 @@ + +public class HD108ReceiptPrinter implements ReceiptPrinter { + + @Override + public void print(String s) { + System.out.println(s); + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Item.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Item.java" new file mode 100644 index 000000000..f2b43e8bb --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Item.java" @@ -0,0 +1,20 @@ + +public class Item { + + private String name; + private int price; + + public String getName() { + return name; + } + + public int getPrice() { + return price; + } + + public Item(String name, int price) { + this.name = name; + this.price = price; + } + +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/ReceiptPrinter.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/ReceiptPrinter.java" new file mode 100644 index 000000000..843470447 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/ReceiptPrinter.java" @@ -0,0 +1,4 @@ + +public interface ReceiptPrinter { + public void print(String s); +} diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Sale.java" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Sale.java" new file mode 100644 index 000000000..d9e517113 --- /dev/null +++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/src/Sale.java" @@ -0,0 +1,30 @@ +import java.util.ArrayList; +import java.util.Iterator; + + +public class Sale { + private ArrayList items = new ArrayList(); + private ReceiptPrinter printer; + + public void printReceipt() { + Iterator itr = items.iterator(); + StringBuffer buf = new StringBuffer(); + while (itr.hasNext()) { + Item item = itr.next(); + buf.append(item.getName()); + buf.append(item.getPrice()); + } + + printer.print(buf.toString()); + + } + + public void add(Item item) { + items.add(item); + } + + public void setReceiptPrinter(ReceiptPrinter printer) { + this.printer = printer; + } + +} diff --git a/java-oop-design-pattern/ch6-printerManager/.classpath b/java-oop-design-pattern/ch6-printerManager/.classpath new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ b/java-oop-design-pattern/ch6-printerManager/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/java-oop-design-pattern/ch6-printerManager/.project b/java-oop-design-pattern/ch6-printerManager/.project new file mode 100644 index 000000000..584cfd96f --- /dev/null +++ b/java-oop-design-pattern/ch6-printerManager/.project @@ -0,0 +1,17 @@ + + + ch6-printerManager + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/java-oop-design-pattern/ch6-printerManager/.settings/org.eclipse.jdt.core.prefs b/java-oop-design-pattern/ch6-printerManager/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/java-oop-design-pattern/ch6-printerManager/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java-oop-design-pattern/ch6-printerManager/bin/Main.class b/java-oop-design-pattern/ch6-printerManager/bin/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..60d3702b7d58116e369cc84efc93316bf0d63078 GIT binary patch literal 860 zcmZuvTW=C!5IrBag=K4zQmTly^;RxYDy>)4q*jehpiQJDY5Jfau+pt`AO33T*M^}iGPM1Q5i_$vVeB12HJir zFq_&;k2lm2$Gn1q&HNt1JjY83psfg8BVfn=v++6{r+q`EPxQ^`d|kus1* zMj+_6M`{IPsfp@hnAZ_Q&cL!-xt~XJctD?Yn%wEkgcUN`VP42qh+;iEP{vUhaixE9|2m8o(Dnx2!zfz%t)SA(E2k2 z7@vobb9_~Sf=}}`MgT-`o?Zx1%rK&gKafr}c^J{ZAy)D}{)B8cd4ky93F3Q6-z@ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch6-printerManager/bin/Printer.class b/java-oop-design-pattern/ch6-printerManager/bin/Printer.class new file mode 100644 index 0000000000000000000000000000000000000000..fbe2cb206c5507f6935450b4e6752d77b4470f88 GIT binary patch literal 1301 zcmZ`(*-{fx5Ir|cGRZJ30s#bE$&eU2541xqWoYJJ zYJK;B7afKOo#=+PYj6g(!w{O$P2I^bw8Rqy25F&E;tE>OszOFM0){pfL4+7Oa=OXa z-108BwtWAtT&1WP1o{)6rCvWka@lO`2cQ1ltpxAEhEX$_c!-> zS2s%BQZRxs8Kcdiz3fz^FizADHN)lW?-+&}74XZHPFxj5K?09OQKDf?lD;wBj=46; zB`%(-c!nverdF+Tv&1mk81!7$D?#gQ)1u(hD$RUSLkfONMSw zfo5$~%p*!EdL=eY1&dggvBYreQZA|*w=B2n@Y2#zkyjnPVybwBFg2Rzmv^+{`z=c= zQadtaRjl9*gKBf9p_ioij@PxOR;GULx{@F@AES#{!^OXV$*j%8Th*%dHdgW#*DCU5 zT|5-kD?GQx1b^xz>I`~v3<2>nXeH5_UJH#8+Re~8qghFw&?kL|dQ7_j+G%X}JSFl7 zk*$OdI#YdXbmAKAC=GPiBc*5-k%Gx@P`}W^4-)bY!wt^C3+En0>&~Ajyr7vmL+|zp z`a4TCT>p5An_qG742kXGQw*QrQP)HbPm(n}r>Tb78Zw^|ULC1nAt}}H`q;x7r~k_$ zMH49ucqz9LVmro(!z8Vyi1aKWi*#Z>YMl|`BZpOrGD&>auueH_kQM!`Y#EC}IVvoT mLb(iG251f?2b)w=ywg5XyWfN8^{p--LS7w&R&U8WfXzQVE(<9D literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch6-printerManager/bin/PrinterManager.class b/java-oop-design-pattern/ch6-printerManager/bin/PrinterManager.class new file mode 100644 index 0000000000000000000000000000000000000000..ce23b24a9a25a45f275f96396022f12beb5059b4 GIT binary patch literal 1174 zcmaJ<*-jHt82(OM7?=*Fc3~-tprT!Xs<^j+#Asqt&;)~#yF)uEgQX?YDbe^4Uh4~R zi(84381GEH_6d9t@jKHg#YmhcojL#ZE&uuP`^#4Vb6C>g69_%Ft*T?%%d#rVrmZ0$ z5Z;ozGFy?=a`w^2mRWQJ{M%)liNfF2If4Fdx3T0U>H_hC+um@jN_NS%<;#LqcUalG zYL%pOV(O+^*rrJ6^&vQBZ*1IhK&nnKSR$g6H`Q`T2pAZ@30 z>v${LW^m>DYOP@x%?Fm+Wwhg)x|p+yJ0|IrpSRZsUEKlqi<@G!*NX;t3c_HdkC7?9 z)zc+DAoPwOK7{$-?S^}B#*L^buZ7q0iU6uq4Y-#9U{TgXcJ>k z|9|X2C0v$41jw+TAmijUgAfhrci|N*!Kh5BN#PvMdqnP&mU?3E5&Dk4LkMDDpbnn* z8TY$VLarYXc1L-RA4{5YD@2%sFXECn@-;^)`?89C6UpU0j7)#Vw7@qc3YjLZzJZ?c zH*q7g&-fjIw@1JBj(#4awbUetGlEh6CNW072~1>YT>{!4;bbp^vyX Rzs7(@6EMh+MP_`s`v;NO>k|L~ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch6-printerManager/bin/UserThread.class b/java-oop-design-pattern/ch6-printerManager/bin/UserThread.class new file mode 100644 index 0000000000000000000000000000000000000000..10523d4f8dea3b0fd0aa2804269077f61b81c2fc GIT binary patch literal 674 zcmZWnO;6iE6r6ROm^j-cK!DIMpe>L%d>ptnhzn9rE~=C^;<~`fxJn#k93*}g5(LD7 zAHa`7%o-zC<>2S{_RV`UJNDz#{R4mhGlsQ*+H3(WYVV>RfjI5c&3XeX!Pxq$R@ZKSg!HB2Yoa0wLRam3ha_g&0k!NI&hHBKwnk~bD6-p@Z zy9!uF5i^T9U1uz_`p(+oyX19l;a;VEX=?VtiFb_iF9=joV`X}EOtVjmFq`c;%=R?z x(D1#^1n+O~*}LX5!SV#(^35}_xr09yHAre$fcp managedPrinters = new ArrayList(); + + private PrinterManager() { + managedPrinters.add(new Printer()); + managedPrinters.add(new Printer()); + managedPrinters.add(new Printer()); + } + + public synchronized static PrinterManager getPrinterManger() { + if (mgr == null) { + mgr = new PrinterManager(); + } + return mgr; + } + + public synchronized Printer getPrinter() { + while (true) { + for (Printer printer:managedPrinters) { + if (printer.isAvailable()) { + printer.setAvailable(false); + return printer; + } + } + } + } +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch6-printerManager/src/UserThread.java b/java-oop-design-pattern/ch6-printerManager/src/UserThread.java new file mode 100644 index 000000000..ef3c52151 --- /dev/null +++ b/java-oop-design-pattern/ch6-printerManager/src/UserThread.java @@ -0,0 +1,11 @@ +import java.util.Random; + +public class UserThread extends Thread { + private Printer myPrinter; + public UserThread(String name) { super(name);} + public void run() { + PrinterManager mgr = PrinterManager.getPrinterManger(); + myPrinter = mgr.getPrinter(); + myPrinter.print(getName()); + } +} \ No newline at end of file diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.classpath" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.classpath" new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.project" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.project" new file mode 100644 index 000000000..2d2475e01 --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.project" @@ -0,0 +1,17 @@ + + + ch6-문제5-serverManager + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/Main.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/Main.class" new file mode 100644 index 0000000000000000000000000000000000000000..76b7ae7c47e64ed9ea77bd974add4b58cdaaf1cd GIT binary patch literal 491 zcmZutyH3ME5S(+I_z~wp0^$8gmwJ$Vkq_c zBbvR=Cc;Gtj)yWT42?jh;%+e;3-!RqiC}02S;UhOS5nu%pqW3(Ik5#=Yd}0R$_$;} zW3bi?b0yPw&>y+jK-)r#p%x0Y6l%z$JX6meHnGLv#3CSz$6mv1N=8hb}GID18BO;BH{nJ`Jq ZCOS>jDTc9+1FCfA5JyD8a7?v+`=_NzC zcRXOIT&b~eQHJB8iW);Bkcqg-;-S#@d>9FaR-i^a8gMO5{FAJt4|2v}2gSBNLw&45 z6${EI69-MSEUf)e5I)UP5qoH3owlot#B_pOpj7^ymPs0>TJX4UV}rpPtHaqZ&&3vY zENnBh{~7SGi#-PG(J-Qfu)TttA5KtG)Hlbvq000~TuXCSy-9vP;&KO>3R3S2U1cp@?C1F?^oG0OtjbR_7I)OMpuyqQa);CB#`k I_H+EfH{GsWWB>pF literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/ServerFactory.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/ServerFactory.class" new file mode 100644 index 0000000000000000000000000000000000000000..e0459870325781b10be718498e06022c6a96dfa4 GIT binary patch literal 360 zcmY*UO;5r=5Pee$r4^*2{s3>qgFSe}a53RT@PHxlxUCahQrl!*Nc>lNBEiHT;EyuS zwj_oveSIP$gPcpeqFpw&hND|xEJ9Iy5 vIudlWlb#6n8iB;VR3T0=kd8AaqHwSKh4^WQ;fLfN{{4RKcN)TZ&0YKf8h%2| literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/Main.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/Main.java" new file mode 100644 index 000000000..fb9e25db9 --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/Main.java" @@ -0,0 +1,7 @@ + +public class Main { + public static void main(String[] args) { + Server server = ServerFactory.getServer(); + server.doSomething(); + } +} \ No newline at end of file diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/Server.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/Server.java" new file mode 100644 index 000000000..85440b666 --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/Server.java" @@ -0,0 +1,8 @@ + +public class Server { + + public void doSomething() { + System.out.println("do something"); + } + +} diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/ServerFactory.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/ServerFactory.java" new file mode 100644 index 000000000..1fcffbf2c --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/src/ServerFactory.java" @@ -0,0 +1,6 @@ + +public class ServerFactory { + public static Server getServer() { + return new Server(); + } +} diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.classpath" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.classpath" new file mode 100644 index 000000000..1f8ddef3a --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.classpath" @@ -0,0 +1,7 @@ + + + + + + + diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.project" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.project" new file mode 100644 index 000000000..ec9d8cf7e --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.project" @@ -0,0 +1,17 @@ + + + ch6-문제5-답-serverManager + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/FakeServer.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/FakeServer.class" new file mode 100644 index 0000000000000000000000000000000000000000..158ba5c2df1ab462d1992bd9fce488f8e2d9ebb4 GIT binary patch literal 802 zcmZuu+fExX5IrVo_JT=50+ikh^pXThdU;IM2deTEwH1p%JUWR9hRr(Kcq8#wv}!?W zrG7v^s_J+XC8a@@$20cK@tHHf|NQs`;0<0mm}BsF#hDCbJe0A6EJN{B3`IQ@QMdl7 zbt>D&L5?9e${;6}gCsNztIcU*U}6<@caq~{88;~Bt%{U+$B?O14;ZrVbw~QhV1dJf z@1Vf2a&xhdJQh4KlsFu?427nO;w=AhM$0mr;jdt1{D3qdIdnZqmaetT}jmO|Rg5 zU}TSD9UIiUPDrKY5rES5&m@r{p`_?Fd_2W-2hSMFsSeklIVz|U*}km^BLcaJ842rk zrP&*gW2rLBmHx@&1;;iv8C;`BW1^7Xl&ydsvdLJ`C53El_Fuz!_n z->_I(y~N$auXt#kC;vmbROF#Vb_!XZK-RE1rudpp3+YllmQq1c@oikV02dNI@o8%2gnU+9I< zk2+e&kffp$ zjAE(AJ&{bJk&Qj-(g-{p;E?c)FhjlZ;{Q$DPc%8&W+LxSDWN+dk7E(z1T-m~0&Oiv zhh`*JN_WTz0fnFpsGv%W){G6hO@d2Ongq@#YR^k-y%Ell g9w?@9`=8%g`SaLLRdwvp-@-2TaYV=^hsj0XFOi#8jsO4v literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Main.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Main.class" new file mode 100644 index 0000000000000000000000000000000000000000..c76f330ba12262e1ed1f899895886418e7731264 GIT binary patch literal 671 zcmZuuU2hUW6g@*J+a0zRK~Yfqp|xFFTVi~~_|k;LWUD4r664bV6FL=kli7u&Kg$0_$%jzq&rHt;0CCbrlbFYn8+bt};Eup=P5>dQa( zo(0%-bC*X+FPZAIbN(^MQFhGnYX6yro13LvOF8=M&-qK~Vhn*GTI#bdd&$fWb=SB} z`fdZqZa?I`jbm+3CMr#JiXBjvPY4tk@gaD6%-TdjTs^qL+Sf%}@^o!SE%OX=0&$(0 zk2~04#a*6~;Y7D?Q2BI)>UY#`&|vf^I{b#mKe2sEe7cma)0tk7l&VswNvTan&SpE8 h!gK5~tCF#gkVZ}NTR5Oq0f+1q@B&9f$zFxX?+=-gf#?7L literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/RealServer.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/RealServer.class" new file mode 100644 index 0000000000000000000000000000000000000000..2425908c67ca47eb84036e3d451f499c6eb72876 GIT binary patch literal 500 zcmZvYO;5r=5Qg6^(9%*xLHt(Wh92y}g9nTk6HkpAOSmtvfhBF%EQQ3Mr3Xzs_yhb= z#%XIn6AwEdJG0NeGoN4Y9{|qLwqP(g4}yn*&`^iH1 zk%JOLJ)=Gt9m}aO45dq{WOT(~wL4=5yRWChg@vjI2W8S8N+s@=FB4&&_#_Yvt)cdL zFy=-kI8WNqT!swI;lHo+7%DRnWmyKd-N_j}2b+W+1rM^Kix#Ss8R@0*#XzP{t*MZl^^I(s@biG=6dR2pP{zKWbkg35~d&UFccwgd4;VviVMUCN_o#;e>v~Bu${7Y SuuHd%J@N-+E_EbYbbbLmP+T1V literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactory.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactory.class" new file mode 100644 index 0000000000000000000000000000000000000000..beb40c56ddd3f4c6f488fc90ce299943f84a24ed GIT binary patch literal 758 zcmZvZ+e*Vg5QhIv4>9T5gY|qq^rH5{B3>%q2!c>lPy{cx=~7c-BAc|}TY0z;6?_06 zN}SzFYpa3X&CJd>^Uv((*V_kxJydL143ig9^`tr$UJ|K$8)=4ONAyHJ5MjH1*6c_x zv5{rS_XE#W)bm?Xks~(b&{1rRhU_y;9C(2r`pF?fs=9r}kUol9(#9l1VWe$1=tSb(^A6J3HJ7ke`vg)vC2XgP=*DuIFqx49og);4~ zxl9>!+IT@2jdK7q`lFP!7t9Q?tZ`b<2=51A7IS1dn8(5oTroF5`U#~6lU$eVvyNf4 zGN$MAL+sJ1%Q-~6Vwqta{nKUvX=?4a=5;eKi>9atvWYD^b?cl? G`o00^D}j9g literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactoryTests$1.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactoryTests$1.class" new file mode 100644 index 0000000000000000000000000000000000000000..3a7737ab6bd17709cd5be67d46a88a97a7bd3c50 GIT binary patch literal 596 zcmZuuT}uK%6g}hDy4$8^rhR|mgBoPkOJMXO34wipCiFP2gRX76F}n)=t9l5bpdZkW ziteZnfes9F@44rmId|sg_wyUT84fjs7&1*EM?%)Q6?pQsCH%n8S2RQzQUgBXWrw@H z@?B>jtUyDIAu;9OOK)U%g=B~YecR8UkWyn_s!H_>+qHvBhFoD0q1a}K)V!|H!LV#X zL)<_ZNfSC!4B>(zBpbFXZimkuAzQrT2!?dSv$)gd(pLElj3_G%*#-CHD`Z9QiD2rH z!6+1Gw5o=6%Io||Op69`ND|WYhSCysTiutNpY2$^4|%(CEywe1w|66gzSq^TOZMjJ zCic}pQC|cPFAV0j>k3(OxbF*}N;E3%C|D|`-hh56L|cbJ=n_TelqUD2>MpPFP#m RrZa*a?BReSz95vsMd)z(5=i?x15j4zEOCTNUMl0I%>#4XFN&Mp{#mM?8% z6XUZ#%6O(w(BN+N-km$=o_p@x`Sttz4*>gkW*{PvYe+Ses%E!CUwv)LAPfw|1Qt&Q zo)cC+D7!De_^MaYTL*R^1rjeDZoL$UmdY)G*n!`XCZb4Lh$A78tvjB4JLn%v)wGXY zX5{LA+jd*Fa`bu}jD;VaKp+1#0`NION`L!JfmPwb&xac!?#X@rWkswM<>EmZJ8z_Nots_@n4f$j2iH%qhd*@*5nI?%IC z*C+jP2nka0a*(w?)ycTo@CT|bYmOdnadaGi-=JMBky)=jPpSh~OA4??l~LY2&~m;= z&>CD-=mmXz>kP?n{E5J%)!Q1HrnN=@`V3bB*Cxr&FUg3wK=z0P^XJGl}O z;;|+?HzzzUky_l!1(uG^uw36h#R|W*pV)Yl+uS)t`5gDB%muQ7YLe7q@havqhh@xP lR#_b}jjJS4z#bk_b)J3g;}I)G@R->VJi$|XJ-#eGpFeZq!PEc% literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerProvider.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerProvider.class" new file mode 100644 index 0000000000000000000000000000000000000000..60d235b00a46b71459863d6d9a26faa35f57fb65 GIT binary patch literal 142 zcmX^0Z`VEs1_omWPId++Mh3p%)S|M~qJX0Ovdom!B6bEAMh1bb#Ii*FoW#6zegCAa z)Z`LI2F~=<5{ODh1}+Uv9|+qT$O+CbElN&x%gjk-WDrI*Ob=uZ8zTcF12fP@1_nl; R*{lp~AQl5VkYr-u0026xB3A$a literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/UseServer.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/UseServer.class" new file mode 100644 index 0000000000000000000000000000000000000000..1d7ac7c3805e8ddc60d2c7a8c1084ac2f0543b4b GIT binary patch literal 637 zcmZuu%Wm3G5Iti%7(YT1nnId)(ic#vEV3l(rV>&mtBFK{vNh(0I3l)W3{wB9ky15u z(GTcHRXxT))u@}f^Exx<%>DKI$4>w!cxyrvSeGN!QOQIlCJe#)tv~UbLq8fc&w95i zNCkz_tSl&cd1H&Y(=ZCt4+6bb?+T2MabMZc;kYnS6s&n+q&|=DdMdf_dqX8CdvV|o zyM7X8@jPjyH{nR&cuNwTZ4FeKFA~_b`eLaC!7~>tC=k$(JMo>mxCx_yjS99*R0XR! zs_h49oP2Td0^4lmv`^6}^`jtTv7C3F#FMbEl9q#A?3>sVlydx{;$j^e4i0f_;)s&- zs*BA`pn08d;l<_z7ceTYJMlOPR6ERsmzLVzXSc->b?E#6ftHD(r_<-vXe~xfzQT8< z@g4R(9StsRVV2aeO5e>JP{JA`Qosi7zu*UyzdivM{tKp@IrxgJG-9?M@!V^?n_@@s r4dn($O>rRjOQsBieHN`v5)P`Qlo6}s_&G6yr+SH3oGy4h + + + + + diff --git a/java-oop-design-pattern/ch7-3-bookRental/.project b/java-oop-design-pattern/ch7-3-bookRental/.project new file mode 100644 index 000000000..3818b7da2 --- /dev/null +++ b/java-oop-design-pattern/ch7-3-bookRental/.project @@ -0,0 +1,17 @@ + + + ch7-3-bookRental + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/java-oop-design-pattern/ch7-3-bookRental/.settings/org.eclipse.jdt.core.prefs b/java-oop-design-pattern/ch7-3-bookRental/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/java-oop-design-pattern/ch7-3-bookRental/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java-oop-design-pattern/ch7-3-bookRental/bin/Book.class b/java-oop-design-pattern/ch7-3-bookRental/bin/Book.class new file mode 100644 index 0000000000000000000000000000000000000000..afedd870f6e529aebfbe273a1cb420144ae2864c GIT binary patch literal 682 zcmZvY%}&BV6ot>UMSiS+fZ)HfgPO>~rN)IOCL{z+G$bwyHaJ*XQ;SdKLKBIJ3m?FT zGM*VoG{9!=ojdot=iK@J`TPQKglZCofOQsz4@p=8`GNcFHheeeH!iyauNU(%aEG2i zq4oE49Y-?g9}6r$j=H{ly1(_@NI*0N5|5GWv3==81~NVssMO}cX0zVm;Pdd#%fLj| zMg}2bQhw4XAr8|?K zX~IypnHkEoj)7CpleDhTnNl`%rnF6JZenYy++b8)3FjU8S0)B!K+CF_)1&Q4!*sO3 eHg;H1w*SM0ml?RY5Z+w~muBJ0LU>P0?EeBwaboZQ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch7-3-bookRental/bin/BookDiscountPricePolicy.class b/java-oop-design-pattern/ch7-3-bookRental/bin/BookDiscountPricePolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..9e383e3cce35261281b7af280f86bcc80ddd02a6 GIT binary patch literal 444 zcmZ`#yG{Z@6g?OAA8v11%WnkGc%VOde*!d+kRwfpH zfFI*081D|4*f7a`&bjBFnXjLZPXPO9xF`_nCt8or)I{iMl66xhWLL*ZJh`w4tHbCq z3gRfa53c${DKZxhq5Kak7P(OID9fKcKoVRjSjRv5NJ=lJ{19Bw@1+6ff0B?RwUPg5b! zRlc#gfOIc^A9ldv*=+un0!Nn3zQk3)kvQ7B@9^Htwa?x$%_5dL_h$gCpu!b@8P?e6 u!xyla7Vx&3gXbEmqnB5%3Ow=0U>k<*8EVeJc+{|NSUqfTmP@Le$<1HxrB%@Y literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch7-3-bookRental/bin/Client.class b/java-oop-design-pattern/ch7-3-bookRental/bin/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..d73be947f2ba0c882c361b56a0465ed27e554c82 GIT binary patch literal 1215 zcmZuvOHUI~7(Ex--kG5aZFyBuL=elf0^)<>gQudyBcdeeYA7QNwliiZCKxyV0GDo! zdlREBsFB1(m&T2W{s(`B@!Xk)N5bab^F8kQzVCeZ$GqcONClfZ{4$Q47^C1% z6wt=e3bU1pb8rt0?I8|oEP7jh-kx^U zzpDwqR=?^IZD8;G@x}ZI}!Ondn6J#&L-rqMBPv2 zi0-0exhGA3=W-dDXc=82G3D#+tGHsyB?DKQ*}Y8bm&&K@J+lP7x_a`6We3XN8#ZV88zd*+@t!d8xkO~wTe@O*iBZ0R_;vG`hVdgh91Zq7F z6~Qu+))HvfPz^yIgN}TqhJTeA#ma zvejAWIt)C&eJqfaj&l`w4&&m2N++K0g{K1f!r$y-gIbk-%S|JS1q&%G3PcOVMhfg} zA%?iJvKA6Z3fNW8cWVPhb|afzP0)8_w;=;hy(dm1y!RdnQXLOLrbOEfYZ^IMDE`F| zFlDQCHsv-77m6(QFdoBX^(;s{j+MUd4+6(M_Y{RWZgi-&fqeo;xylHC@@tFqybVTD zNb@xLs_P8EF1^7j9gJv1N65VDf@Pjr7J!2rEKaG_urx={3JY0=JT3Lvx(&CDRjf_K z%e)0+vCuq^aN+xbsWgxDs6W z0iu86H;8xA3T`@ZpL6cHkB^_XcL2L+I4}r}GdYZ8cC1Ds9VdA=Q$lvrScwM*CSh?9 z-iMtyOl~?C(Ljpafla9VgAwd~m8krHP-?Y%1oJ4pmM%)DcyKUBs0J#L=VRUGDvV-D zs0FDA<6f949Z!>H-d7_+GnhHi9-+*2qUcVrTE5@*?ZfX+{k}MHr>7^7&yo<_%XFLx zd7^aBjhVDNdPi)57htjYI0joDopqU`4qIYtZNI{ODZV|{c9AS$o_%iuzyhiq@!7D% wS{I+fWLm&&uJ<47sNFt2b7XMEAA?meY)(*92F9a~<$~443VV8_)uM9k7x8Oap#T5? literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch7-3-bookRental/bin/OrdinaryPricePolicy.class b/java-oop-design-pattern/ch7-3-bookRental/bin/OrdinaryPricePolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..e7144265062fc153446db4beecd0d34b2d945f8f GIT binary patch literal 417 zcmZutO-sW-5Pg%6#-`C~YgN#L-dYdl;8F3QAOwOfD7|mCi`^0vSyQ3^$%`k!gFnC@ zB~G>#JoK>h=IhP8o$sH|F97G*58x2GLo?BZFpH7VQjN-7%S8Z>ussv6BF;te7!R|V zl2w2Pq4lqg(74ovuC54fe=sI^H|0cyaM6koV1v+3b)oL&Pnj|gBFhz_la^BCV_|e1 zuaaIh)h~ozx<<_-1`Mk4@y57#Wy>)&OasnXC*z N0iXywkYr-u008`G9XS91 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch7-3-bookRental/bin/Rental.class b/java-oop-design-pattern/ch7-3-bookRental/bin/Rental.class new file mode 100644 index 0000000000000000000000000000000000000000..66fc5366eede527723b99ff959a0287b0fba613b GIT binary patch literal 731 zcmY*W+iuf95IyTSb>nO=B$yH|E#>OCaRZb$5D1WvEV)q8D({Z7DlV>#f{VnL@Dscs zks^5D1NbP!*>x)5VLdaRGjq<&{QCXlCx9L7IIsj3UaO)?atF4+>QV9`8RkiGID9oe zQfbBXu{s{BslZ~qYrKa7_P8wHG8I3gW!!!@%~G{j=2`ktU@6}F8!{^jzKHNgS&>zb z1vdP%R&|5_@KJw6g6HK#xoF^=#1c9J4ZlBXLEyYZ6ARkAAmLz9dlw~IaJ6?yq7CWd z3f3K5WgD$eVguJG|4>y%muVKYaUC}u+@Sb>)JojKZGl#rdF_-em9fUh4yJQ|^9w zGELQsOxLvQ-`n~m*yMB#9?gcO7eLR_;~UH2X`x3qF)x5+;#U}bVnvfS48CDC*qWgm z3}*0xaE7(OvuEf9U(pQ*r?~9d-?7=iDeinRZ9;z6Ndj)yCPj+`%cSVCeUILN1l!C$ zs0lE{T}Grb0)_FkM9X+uq#htNGHuG^Rpug}Fr)DvwXE@ZR72A + + + + + diff --git a/java-oop-design-pattern/ch7-light3states/.project b/java-oop-design-pattern/ch7-light3states/.project new file mode 100644 index 000000000..22e1589b2 --- /dev/null +++ b/java-oop-design-pattern/ch7-light3states/.project @@ -0,0 +1,17 @@ + + + ch7-light3states + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/java-oop-design-pattern/ch7-light3states/.settings/org.eclipse.jdt.core.prefs b/java-oop-design-pattern/ch7-light3states/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/java-oop-design-pattern/ch7-light3states/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java-oop-design-pattern/ch7-light3states/bin/Client.class b/java-oop-design-pattern/ch7-light3states/bin/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..8e3d7fde1b6f61b5fbf1381df5b6648c99b5b5d0 GIT binary patch literal 516 zcmZvY&rZTX5XQePg_csK2qOLg;|(;CgGY=P5>JgDFeJu<*}_tml-88i_wpi%CO&`< zWt?qI(8R;e?6=?U{ATC#>+J);1&$4945eWpMVJ`S8Jq=w=KX+&e*e~6h)F{Br3__q z#Zc(>#tix}nhFaAlx-AIVyL<@6gTP86Y(AQ0>QB3MiU;4c`TLwInb}V7M8LICB;SAt`r3s(l?#)QO#=tASx4A{UJoH5Y&UnUwK3qQb* zGTt7DVAM@_SM{w^x9a2b?H#~Awrp4eW7VM9(l(L;xf}o9-)s9}bMLHnqw1Q!UF~Zn zAgi(L+(c!8)L{??`bZ#A+P)M>9!J;8K?1IXjkJRaWNl>leO9SRD;EPVSqpvL%ey+`D|S1ei> f+Uf(-a5%!ylKX9`_%CMdH^wDK{)yROe+!#m(a32P literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch7-light3states/bin/LightState.class b/java-oop-design-pattern/ch7-light3states/bin/LightState.class new file mode 100644 index 0000000000000000000000000000000000000000..f09b2e3f555eb960a2fbbd170b846da114a90811 GIT binary patch literal 169 zcmX^0Z`VEs1_omWE_MbcMg}gQ%=CeBE5>$BDjV`LD_PfNp45S(9Hl$`38nUl)Mz>ly)4`e(W gBLgD?GtdzX3`{^PSsBHq)$ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch7-light3states/bin/OFF.class b/java-oop-design-pattern/ch7-light3states/bin/OFF.class new file mode 100644 index 0000000000000000000000000000000000000000..cc2835cd938e68015f9f6897bd60e0058c9e040f GIT binary patch literal 938 zcmaiz%Wl(95QhJgn-kZ$mXcf5!Ro>+5#_ckoz4L?GIz*EPfhay!;* ztLj=_x7uj$*d3`MA)uR1wd>1|7TZs6`|>=5-|pMS7!r;(T56AS`kCpi`IzW*Qhwd^G(8U;ThS z+L{zEi67vvh`(T5b3hS8;=?&-_St)_z4zK@zWx0C6~G;o75D^vwW@-EKw{T;WfZ%H z-7eOeyJpK(5E4*ztKD(yuHl*jVap!4hTY<)rq3KDddjV?Wn1nO0e>#v5C}YVwoMfR zQ4KMu0->_>M|hRcpdc&|*Dc$u4tq_r|J-PH$(qugmeFk(eao}ur3ycy1J~?nxPXgn z!5O*&%eqv=a*A7h%ccf>)997L$Pzdn9gII6e1ChG8SlUOvHwoRWn59PDv(|P(r^{m z1e86Gr)!fsH{q6Qli0G`EKEfn1qExAv#xJ!Y;9JbX;{HY6*o{+ur3gkqHDN`TMQbQ zzXubab|>dVCPsF>xiROoZGoh-voo(s822fqq|DHn&8m3l74V1()G8HGha~q9gFu3mya6q~ zk14Ro)AI(`Mo9k)@kxj_3BU;~Gce-mGX<|o4-hy){JkWfr3?L)?i5Z>5jsoqDoq^W zOe%AXONEcf9pm~ebBu+u4|b;^j;Lf=nP8?B5RKdXnY_a9E@r+rVSccHIZ5UenbZGa Jek}Vb{Q_mmtMmW> literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch7-light3states/bin/SLEEPING.class b/java-oop-design-pattern/ch7-light3states/bin/SLEEPING.class new file mode 100644 index 0000000000000000000000000000000000000000..0912ed30340618c177067bd195034a46767671de GIT binary patch literal 971 zcmah|ZEw}bg|3X3x%sZ3Q(@@v{SD#=mtmGPumnTmCsVotouyr%nE0=BCY#a3 zAK;HNo<5WzhQtqj%6;xV=bn3R`SttzPXLclR}c|Mw)NfJ{k`TJ1u=o_q4CkEI)>Y? zwz`Lw=_^PGsJh)B_-)_tEdp$J>>IAhpPD{T)R?K8j_un1D}iXK+!2WFcn6jWfwYEI zr~-+)%%^yj)u13LkkM_|YEFh-YxLIWI%Li3o@qE8V`K-hyi^fIntcAi9tUz}n%Q)v zZ~1#?idIYIMNL`Heczqj!Wj! zlv-L&Ufb vN}-^ + + + + + diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.project" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.project" new file mode 100644 index 000000000..da0651492 --- /dev/null +++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.project" @@ -0,0 +1,17 @@ + + + ch7-문제5-vendingMachine + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.settings/org.eclipse.core.resources.prefs" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.settings/org.eclipse.core.resources.prefs" new file mode 100644 index 000000000..3f76521b6 --- /dev/null +++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.settings/org.eclipse.core.resources.prefs" @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//src/NoMoneyState.java=UTF-8 diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.settings/org.eclipse.jdt.core.prefs" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.settings/org.eclipse.jdt.core.prefs" new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.settings/org.eclipse.jdt.core.prefs" @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/Client.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/Client.class" new file mode 100644 index 0000000000000000000000000000000000000000..32c8518de7955a183693d3f570e60b09cb3bb836 GIT binary patch literal 873 zcmZuvTWb?R7(J6qH`%Oh(phU%5~#WR?USh;9r*`qPr~TaRHYsT$~fuIhtrWa&Q?}C@PGpv6?XO!{#fF z*CZjmQOkf|b#M*W$$KD~_B7>H-1;J68#i&=!YzUFOw2r#gFA2qtg%54D7xw{LL_R| z9W;!s_Bfslw_~kCWq90kuwl}LNa{FJe?@xHfTouJ;~=Mv64xlcJ?|sUw>x1R_2o0) zJXj%llMTb1a_I`c2aw{4Pt4U~)Z{L>XV;IB`#3AxTum8lC~$R>3*65z%3~QT%$VjM z$PflK45Fn4*5FJjLBp(PH<%aC6-!l(*?8 zb&#foGIIO~dA^=ag9~`b>=x-iCHd#1|C)FAQ9=)^2zYyp3f`kSlUqw9(V6?ia}eSI M`;AMRj8k~@8#qL_OaK4? literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/Drinking.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/Drinking.class" new file mode 100644 index 0000000000000000000000000000000000000000..8dddc06fed913e2f4a19ddd3ded8414f4efd6603 GIT binary patch literal 587 zcmZusOG^S#7(I8K(QzD~z0*bQbQZa26-ApO5TpV_a5;{HUA0lhv0v3DP=XfyfPPeT zu8tKU19Q*!IFIl1>-_`3DJm&w0_JrngP{!iDd+-)f&1*%M{dxs-*pGR7YP`XP(VjT~uP>>RCV*v1Yk3aI-js*p0&ha^3F!`;nJe~4WhA3(*OVf literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/EnoughMoneyState.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/EnoughMoneyState.class" new file mode 100644 index 0000000000000000000000000000000000000000..c566bdb167974d052eaf75a8d09ed865db13e6e3 GIT binary patch literal 1902 zcmZuxYjYD-7=BJ~o2I9&gx+WY%SB0wP^DhbR+IvTXxbvdSiG`LmUi1@Hzu1(b;dGI zovFYFKIj;5%8cTSU;Ka$L`G-)0sag>lJFNCpR=1wn|3nU+4nu~<$0g?Is4ClfBp?% z1Yc-q5P0g0W#{JRCvD4Ejyk$yXlSB$L0{5`le#rGJUzQ$#2pPS0?lrKfR@tZ^QL7m zE)p}WglWx9dY(~%mNC;Zof85(gY}1@m_XAhJ7M_Ih<1rqbOhTjon`vc@jN{J4j=^v!=0_j;HS7}T z*o;_W0K1toXL#}B_EiBH3`N{*TBCmK#h`|#1$-5s#6I+JRIg7f4&WIL2RG3cUCug2 zO5#}@;*56A5$KM%teW=l`HX2fQ72>QsZk9ff!-S5bd%5VoS94*89xr=h=%7jmv$p0 zj$)X*SkjX@WBLlqb55^=yEm^6(FgH@qWYMM*m@p{`S7AZPw9tSrS;Xp;_AK9_iLr= z4~sX}iZ^~%*)L1Hg5#W4Pp7$Tfg{_M*;2VYfeYX@iBXJ^K*#oA33QR-`k@(n0&i+~ zgW}nSDv6V73N5YJOIkjhqFSEhS4($)ef(&x^xco8^=oQbXCx+Ymfb2lbww6dvxLLbJ_Xvoa5M*YWI%B1*HaG!pxGOEY;nI zixTgGa#y-KO}vZTsi&)o#bIagzJ^Q8toT%=4j(=wz|#87;=P-twfy7z*9MDUL`QokoMrCrRPAbi1MD1KAZcLc!OVM4A z>8O$sFDs+@Z{{EBE5m0K-&^75vyIjS8u$bJLw`UH9e#+;-)J>p2cI3x1zMP)F~f%d ztsXBLJJCgpd2Ut81Km9HYJS5ERWm&F0G$Q&4ivEGckKTQ!Ak>=z(&spMhbYTfL9B6 zy?hWDr@I_q!07_c1>Ua4)F1^|8jytEj)Mev4xJldg{!c_n8Xy}2uxRD{Yy{^)=CZ5 zdG9q^zw0z?pLZquHaL5$PBAAqjB_5Kj+Po z6>kmM@)|~}V4ShKH7r#r-ip!FfJgW~V%$%{58xP|H7p}#EN%S4TrCs6Of(Jn{C^y@ B&A0#n literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/MoneyBox.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/MoneyBox.class" new file mode 100644 index 0000000000000000000000000000000000000000..633f4500c84ae6ee9881a52ddd2a47a149ba4b19 GIT binary patch literal 673 zcmZ`#%TB^T6g@**3Z*=hhY#Gi!!BguQsP1qBMIt4L*mX-CO8CIQi{=ka$}+~ap4E} zQN}ydf|y8}&dj|t=XJlnKRy8*Vb4U0A#)M<{OL4!G@&z;M(%^#9J~IodDS0rFJdqz z@&N!hhi_hQCibr&v<$q@EqWMhP2KQCO4{rY7x5#d(GOyd+7hrnv$(mf#Ai3Aj!4DZ=EOTSC|G z{`j!sD_Ep1J=Bsq_CO$&Osdz`5f1(#ED~X94dE7zN)m1_%X2y1IvSu{oHb=ywR~aLGWDw&TeEcq?E?Fkv@6(m5bU!kxAldE2kB+TE&odaM*4ajH*CSdN%_W(P@}fy<&T;m@_ex%tkSQ z!wL=wbZ@U&#UPF_B(MAalh)?~Y9g8TqG_d~IErBf#{|NSGZl}Zk7WHk5j={=6r9*5 zT;^)k)=MfL#}i~})og*@w5O|Kja{f1rk$}Xx>ialNDB0~6z4G&ovazfMZFTmNt{yf zJ?4dmvbu4V~W6y_IVREBfI^Yiq|pYclJCZmZ_@W*@ne* zZ(>$Kn(>V@6>|+dHYvwh9l!+@Z{cm$#3VcSMIb^V-ewSP02fuf0}gt)s-vsxF);sq3ps(0!Q}hazpDdJ|RWf z$~#~A4dmLEoy}Rme+#jwx*W9~b zZr=LQ#~CFMb^``Bkb`}jcqaq!*F?+BuNchZ_hh(91Y z@*C8VlMfL4g;od$`0i#b(7_0W5n;q>_4(d7h#p#u^H8Z8dU@w#{>=!9xiWGeF$evF z4u*ck@jsBbH24rq^i+J@!LtrtbntTE<6zSNns)HUJ@iP!KbUur`2h!72k-JAfQw%y znD5q41P33)KW-vRB5fX#;~sI9gu8Hpv{Hy+2K$lb?PXH=f@E6cR+{8ipkaZeazyGt z=wGC}Xe~C0o+V95G{SP?I?1%Oi+UFWOnhhybfgI#LEeKFoQdv0w`!oi9481cM6O54^%zcLcuN7}K>?lIlyXqOXY>!D@;^1ou>=4B literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/NoMoneyState.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/NoMoneyState.class" new file mode 100644 index 0000000000000000000000000000000000000000..2ede122ba115acfee30fe890ba8e0adefdad3fa0 GIT binary patch literal 1650 zcmZux-%}f96g^*{Y!VhIDHM=WW38G{3)-qxskMa`MFX^^M(gh-tjR*Mn@M&v_RWXr zF!n(otfh6@X{Vj(IOBslbY;}>5Ae}H!z_P+GmhumO$bmXvpc!>yZ79C&b{CM_1|xQ z0yvJMf{=hZXU$rsemQMxwyvOEVDFMv)y4~&nH!&9Skkk$f)0T_et>{d)UtWQ)ESq` z=;oqf=4J!Wgh0nh!!+zu0{ap>50e>z_9<&okD?7-DkA6>XiFqB5fDm+g0MhOipXs6K+vme-iJ4?3ia|W0V2IJ% zyHzoa15C;3LHwlk8O2B>Q+_tBi6{;tuHaFDaMP#aG3+PJpiTsj;|T?aw@H@1T(R|{ ziYM_D`B{!F(4X=ZHLUUTWy7@7c3Ibo6AF?711+uTrk0bAQCQT=Q5?Zh1y65>_9Ik` zVVrZQY6VB1|CI3L8C39R7T~b^1fG>LACnOepC>b6JjVvS@4xYG*5dJc?XGui#rx_( z{mM%H$~~F>f{GJ(k#x0EiIWyMx*N_z&y!dO|F96gzwh8 zyMK7Kb??Tv#G&p|tIo1+J7v@FEQ}?Ak@`=o8`oDiuHKF})7RqOwJ&A*jUT8=+H%TS zecF&Wxp(Vj9g|b$W#Rz%?BN6X1>n1#|09U<-AQX2A^w2q=&w*mk32xn&$L45<-41? zKnF7vW`q%=wLgf)KJ?LIo{vfi(9g2~^KWKI%OkmUOm)#(+~jwL>?FSk+llGq z(2^|b9}Kea&=%;(CUgWjA6g*Kh61@xFh`EZhckA88zJ05A5IMd8*l>4Obem#Klde$ A%>V!Z literal 0 HcmV?d00001 diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/SoldOutState.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/SoldOutState.class" new file mode 100644 index 0000000000000000000000000000000000000000..5edaa1cae90e65a571de152517f315470c9fa74d GIT binary patch literal 1310 zcmZux-%}D%6#g!t3(Ja$nweQzR)7hm6&3bFEQ><1FlKsOVbgVBmsxh5eCw%k^2Il8 znwlPZ?7>R0shR$O{uH5qq3P@{1uDbroxS&-^PTVe&RKr_`Ti5Y7&06j3_@DX=Te5A z)D(xrlcKAa#9s-ZJ< zCoR>o8kyB(h1}32u@H0PBtuX2{inUJANICh4pcW@RbTH^)>bQPAHzHbaGJv)scn)g z;0%VyuA&K-SExe3E@2r<_+(tnG^M3r(`5+;zG##d!Ts+{z%Z^_?MQIA zMw06zU^9&yay}<%JZ@l|16kcLBzA;=o1n&X%VOS;QqN7jiQr+yJfgT`c7Mo?I75H+ z?Rxdy_CRH8^Y@$0%KBz?W3|!YDDDclhbbB@u~?*WV;E`XG^^le}5UL>X5vZE)ZB-1DxkS zoCjxdj$jzhH-`%}f$Oli)!8+|g=%oaq{e1fB0Z+!vCuZ!%eYX+=r|Gmf#|coZ@9jT z+y03%Cd;@_rOX&R?ok=3x(+{qm}Yp$c3Kp z^{=jF%Brr_2k=dN33Z>FNt}kskKA+5J$v8tvG4r#&mXS=+`#uq#1w`rwp(-D`nFX) za9lfyL4}b+>j!J;*mCPjyZeWB)mJcGZ`*V2pUS@F+X~5&HdYlzU2n_vTJ?kQ@rZrK zWj4Lz+HT7a2;$8SQR;=TZg@W`7$r?Xo3yD~!*P$8m-rtBHvNe;$94R5g?O%5%vTf! zH@%u|U;tSY8H_0m4yn$=DAr*{B#7z_DFf6_gP29q52G(sh*Q*}s78E6D)r5hBLZ-yY?zCR)+l{Bz z{xRn_TJoyaam8vlvJaet{(;kEQT^Rvvzr}aRiu5=aH^y@$4OR?wyl!@oodScS{+6% zkcSK??YK?5;p-YXt{kV9MiHMT@d?Q^!o(wd#EsSh2Y%9O9&EIH-*ctFT@#PH1wNL$ z1^$_dZNa1)w%=;FnqB;#n<$G4((FdJtsFrv9~PG!cH7!H?Cz+r3=hM~Q5Ygx=gHG? zecC^EYKs1|Uf~K)zdI$}r7_a}|Io@lMP6SOCGVT4;yGh|uj6G)%3iBcwI4Y$yzHCm zT@(`Pj&tX`=A#xB(~5~q^-3k`m4eeNMWI(}Os`ZDSCb4>7ysYl?r*XP-(letqlG^) zzDMKjHl}FLi2Y6*7irIl{azdMv@eUDYa>s4Veb@I+gPM|ZEt$!6w7U_6n@9bOMLJ% zh6^;O+PL!z(qiUm{>Iw|u*UyoomU2f%w~ky%wQBbWU<0Wd=C>SVG)=m8tCZXobv_ml z?goU}P9JyH0^%oO;$hu{96vvKwyh8%&j#cveq5v-Le9q$kl)gKz!1_`c&g4MdzD|T zMa?HtVPwFkIE*g>mZg9tPL{=Ad(}#7fa@V}ya)agdlBH3e(=pm@K^Xc0zB0Zz8wkv zCK7zHAAC0w{B0z7z90M`68tO@obLy3MS{P>^PuKsuF}|)%6PxTsJ(_^v! E1Nk;r= machine.getDrinking().getPrice()) { + machine.setState(machine.getEnoughMoneyState()); + } else { + machine.setState(machine.getNoEnoughMoneyState()); + } + System.out.println("ݾ" + machine.getMoneyBox().getMoney() + "Դϴ"); + } + + @Override + public void pushButton(int price) { + System.out.println(" մϴ."); + } + + @Override + public void returnMoney() { + int tmp = machine.getMoneyBox().returnMoney(); + System.out.println(tmp + " ȯǾϴ."); + machine.setState(machine.getNoMoneyState()); + } + + +} diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/NoMoneyState.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/NoMoneyState.java" new file mode 100644 index 000000000..b507aa22d --- /dev/null +++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/NoMoneyState.java" @@ -0,0 +1,32 @@ +//package vending; + +public class NoMoneyState implements State { + VendingMachine machine; + + public NoMoneyState(VendingMachine machine) { + this.machine = machine; + } + + @Override + public void insertMoney(int money) { + machine.getMoneyBox().insert(money); + System.out.println(money + "원을 넣었습니다"); + if (money >= machine.getDrinking().getPrice()) { + machine.setState(machine.getEnoughMoneyState()); + } else { + machine.setState(machine.getNoEnoughMoneyState()); + } + System.out.println("현재금액은" + machine.getMoneyBox().getMoney() + "원입니다."); + } + + @Override + public void pushButton(int price) { + System.out.println("동전을 넣어주세요"); + } + + @Override + public void returnMoney() { + System.out.println("반환할 동전이 없어용"); + } + +} diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/SoldOutState.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/SoldOutState.java" new file mode 100644 index 000000000..bb3b6572b --- /dev/null +++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/SoldOutState.java" @@ -0,0 +1,26 @@ +//package vending; + +public class SoldOutState implements State { + VendingMachine machine; + + public SoldOutState(VendingMachine machine) { + this.machine = machine; + } + + @Override + public void insertMoney(int money) { + System.out.println(" ϴ."); + } + + @Override + public void pushButton(int price) { + System.out.println("..."); + } + + @Override + public void returnMoney() { + int tmp = machine.getMoneyBox().returnMoney(); + System.out.println(tmp + " ȯǾϴ."); + machine.setState(machine.getNoMoneyState()); + } +} diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/State.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/State.java" new file mode 100644 index 000000000..98a8b2fc6 --- /dev/null +++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/State.java" @@ -0,0 +1,7 @@ +//package vending; + +interface State { + public void insertMoney(int money); + public void pushButton(int price); + public void returnMoney(); +} diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/VendingMachine.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/VendingMachine.java" new file mode 100644 index 000000000..6634a1989 --- /dev/null +++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/VendingMachine.java" @@ -0,0 +1,76 @@ +//package vending; + + +public class VendingMachine { + + private State noMoneyState; + private State noEnoughMoneyState; + private State enoughMoneyState; + private State soldOutState; + private State state; + + private MoneyBox moneyBox; + private Drinking drinking; + + public VendingMachine(int stock, int price) { + noMoneyState = new NoMoneyState(this); + noEnoughMoneyState = new NoEnoughMoneyState(this); + enoughMoneyState = new EnoughMoneyState(this); + soldOutState = new SoldOutState(this); + + moneyBox = new MoneyBox(); + drinking = new Drinking(stock, price); + + if (drinking.getStock() > 0) { + state = noMoneyState; + } else { + state = soldOutState; + } + } + + public void setState(State state) { + this.state = state; + } + + public void insertMoney(int money) { + state.insertMoney(money); + } + + public void pushButton() { + int price = drinking.getPrice(); + state.pushButton(price); + } + + public void returnMoney() { + state.returnMoney(); + } + + public MoneyBox getMoneyBox() { + return moneyBox; + } + + public Drinking getDrinking() { + return drinking; + } + + public State getNoMoneyState() { + return noMoneyState; + } + + public State getNoEnoughMoneyState() { + return noEnoughMoneyState; + } + + public State getEnoughMoneyState() { + return enoughMoneyState; + } + + public State getSoldOutState() { + return soldOutState; + } + + public String getState(){ + return state.toString(); + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/.classpath b/java-oop-design-pattern/ch8_ch14/.classpath new file mode 100644 index 000000000..fb565a588 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/java-oop-design-pattern/ch8_ch14/.project b/java-oop-design-pattern/ch8_ch14/.project new file mode 100644 index 000000000..ec76c8d73 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/.project @@ -0,0 +1,17 @@ + + + DesignPatternBook + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/java-oop-design-pattern/ch8_ch14/.settings/org.eclipse.jdt.core.prefs b/java-oop-design-pattern/ch8_ch14/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..2a036c7a1618a0ee3afaefb7c14c675bce6b487a GIT binary patch literal 1387 zcmaJ>+fvg|6kVrHduSSNMUZj_1zMm~F5V~#TCPq&XVA{5Pp9pn2HOPFv@?8)U*NMo zlo^@v0~~)z$DIUq1j0l1$=TU!@0ESlKHq9OpStT=R} zy^zgU4QV>_=(n!%gzb4-HYR?^aC9mU&SpV!f#=Qoi9xGNb}%>D!xC*%Z{S zEx&0h`Vr$8V#owQc1{{*Ss0gagNUgZ#W=?p!&CtH0!qUKZZW7OTM9>RSe8vKOr?XG z=mzB6B9j`XFwGG6fqNGH0K-@?(u*Ky8nYZT3_}6@yf_VW$T0A_bbLx_5(+h-tURy^TAXPtcG2ZTZTKjasMuucX?nOH1u?T03mv# zVJFLJm!*}_8kspo+h^~yO4j`h0>sH`egLiQw2Pqwo#b)BKPXv*)^(=OgctYb5?w7M zKBD6c{jX0kpnpRA41@GKtk1SEvQOsrijq_^Eu`p~Pby!q)WSozZWwOed9PxW@^a$P zMwMb1Am0Slo~Ftf@+_g7M3TT7T^laHWuF5c;W6z(WY@4x45L`V6Feo)G?K_;gKA_5 avxzMz*rr$wp`RGw80F~UgxK-$yT1W7EM!Cg literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..b76ba9b828bf810730182c9482cef668e936027c GIT binary patch literal 1025 zcma)4-*3`T6#gy+3SDK0j=3M|+z*9rLWsH-$TG8GvW$UA1w(wg)Ph|~Yf4$df2HhU zi^j!g|0v_R4MHC@tVw%&&OP6EzVDv<>-V=C054FG5n{_B#H88S83;C739mWYF-0tt&G!T)3psOtr{ zhbH~(O8$mWAVIn;N`IrAWH0}WZx-JxfgZ!B?msp;J* zh(hwFTRn&SLytCJhWG@yGGE|9`LIOOlIYe-hbv-|0If7cAiXL^NIOwl6)aGlN>QC+ z@f5y;wKI35E2J)w34;64AXtk1pe<>PjNXopv7}#O`70qJSfOv6c&HmzgN(@1U7K*1 zC@-|g+V1)l*8UAr0|FWALL>=%h({CnJ{b`3>=?`KQ%SpNSA>!?Y3&-1_r3%TXA;;{ iLXsx*bi$#LAR$o6Fzp)8euDiU7l9UV?qV-kpZ@{QE#(6M literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Door.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Door.class new file mode 100644 index 0000000000000000000000000000000000000000..0cf2ce38755c4dbf4a1787c597ff280baf06dfa0 GIT binary patch literal 847 zcmah{%Wl&^6g?B$ag(^O6cS#g4W-a#frVItx=F$+G)O_&Pn>CS37N`qkoY0i6!DN) z@Bw@j;#|i~yCE!mXYR~Bk9)_z|NQ&~;29qKC@9?3!)co6C_Uk4laHZ3Nlo%JY+IZ7 za1}Pr^amY|_2e|{4bM!JDwIdO?58@NO%?XKOBm)w&lQR<;z^tyDL4m*0|mEbN2Ux1 zl>k0gN?66Zk2QtHf5`%Dph&`2x7Y8qOHil=@Z@N{8&Ayf?ETOrZ}f0%c+<6!9uIU9 zOP(LP>D!pTx0m^*$`CI5+&?&6hFEm!MPoZ+AUhE&e$aT7IW3U%Ddxk9eO z`e0yPJkQ=EBm_9ziy=Z>Nook+)%u|(a#6?AZ3p%VZUQyR` v>TT9IP!-peF*8xP|1YhbT>p)3x53c|jWoHv_ndpqcfRkQ^Yho&YXHwtkr89q;(b5xxDgC!x!$D82Z8C; zszZSMzKl4-@)kCPQ9x4Q_Y2X9+uWW*{L;6oQYI zPgT#kJvQmEQz|baCWA+KEMtoy7a=+E19PNc8%2gR_dGr^+)on*H7cdkKQoP>ejHKv z$3^lOW4Mzm_#Ei9j=LP0<=>jf!w-iBi+Pl&tQq- z6tdc6i?8wxte3wfU1IqH`Ovr<4~>JpBRo@4Oh)5OWuM;r{G5+_dTG literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/ElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/ElevatorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..4e706080689c030e2ff8939f1852801cd4c528ba GIT binary patch literal 428 zcma)2F;2rk5S(?K7@R-?qz4-0P+*~ypfo@#0|hAk+Falw+kL_b16IN^NmEEjGn&)Bz=r%u`P^rloxmd3blM+gbM88104 zxq43T^O-6fp>?S%?M8$~GMEs;EAymcG_c)46D>kF)0MhgyynV2a$YLJer5_TCv3H^ zf19Cu(Q`tQ{coEKLc6evow_x$BjG3+Y_hHuVu)+QwekAH&3Z5J@&~i9g&J$WbN^2o zXFiDV7;?5m2|@Db3Pw_;!X(^0{lM0{d;-LRe(a@f!A>m@-hoec7u_}YuqRUqNie{{ E4?3V~r2qf` literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiDoor.class new file mode 100644 index 0000000000000000000000000000000000000000..fb08fad13ce978e047646f75c3f62c11c1d1284f GIT binary patch literal 650 zcmZ{h%T7Wu5QhH&ZhojfV_j z^&g!R5VFTAQTBw8F7MtFGN-yJL!=SpFo7%~UsZ{`>~-qW+=zNC3B{^zi1=0*<>H^i zjJ;D`!cO&{Vk1pe2wqd4#=0v56j1aqLnz#fM-jy$X-Bnw*UC-~vzX(qbk7pztKVs* zqidrQTeC)rPQ}Lpchhj7(htAn9u;BGto{=xkzhH3)2sy=6_$(emf?vq`c*w>Wh|iE< M41`eP5-Dtb0V7z2cK`qY literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiElevatorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..d92645ceb643dacac26ebe0733df000d2e532b38 GIT binary patch literal 674 zcmaJ;%T5A85Ul34%YuR^J`cVU117prj~Fj1@qk`5Bp!!lh+|eZ85R=$N>3!3_yK;D zv1c)cAj@H@yJxDZXL`QA-#-DIVbel_a3os2Pzx{Y@Cx+M6`fG(6ZdA=@3w`y_T@nE zetmpuAw@WdkxX$3nRC@u;RPXCsWu6z%b+bCB$3S{jSQjCP+fV~e`!hmAX>g8lp292 z{HD;#)W4gl@JaOuZX>4e?5oxYIZsOw%G-b+K-j5N;~XMJ&B794e}0pQ>7a-#!5Q0M z1;%|l-rW$`e3h^_-`o%#lq2u^pszhyS7s_(vtM}pECvF*;Q8{0f|1Nz87;0{j>Iv2 zID-AgNdgX|IX2WBV}4BFxWE-*5d}sgK4rGy*&irAj!=5#d{UpD(A$6dWvu+yms!6y Mt+!|D*P|{QKOga)y#N3J literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..29ba6b33c26ff24b15b2dc0a80ea7e87b6186fcf GIT binary patch literal 654 zcmah`O-n*S6g}6}r!PyhvM(zw0&USFS{gwV(ZV7y+>biiguaP!6#QAWC}`0S=to8O zJ&jx>E#}_2ALrb2XFk8)KLDIy&q0K+FB*MoMANqUXfyIe+e&lnU5^HSOQ;*oNe59v zenw;1L5QC!U)eLlT&Y|qL@#tpx|l;Ug&5+5bXEECcF=1`b1xcQNyt`pQ*`UXs34vs zqxM1d2?x~~)23xr2+5uv%87!5(k#%WGO}rv_ABLj5=&TikR@au#ZY)%;di{+sBdL2 zg%zyw0(xKxtJScqw0CEeZ)?^_(W@k|#=?W4g^7|vINiktwj68{mj8gIkjFN`c?y`i zK9iTm?Bn5<(;b$^>$HB9688SzhTzupz%=ER3LbQ6`f-i|9VmkL;ok-#eB+N`>u}_; zC-$+!Hzc0JvdcCog8}nwQ{x8q3miqUh%{#c@Hvx3*e73*$>v_M{!8G7g%}b{6_Dh{ SjS~`vUMAC_730>+b#-(s%Q<27H!kzrSxMYx<=}QC~ll7rCm6LwSOd5 zKqwt2Sz=BI6Fa*%1m{$BWPl0yA&MvwrsE`&7sGx_>TA(TC7}|lwn%S;PHg;h=$PAN zK-i4`DVFzBC%7GTnyP{HF@uVWS;EYnco0!4vR>4D92nUTF^73>NDU2PA^uJ$D!S51 zW|~Gz(XV@0Buus~s1`SB_9+3DvFc)lFgNB#h&8Np^?M6RGv@B(;JmKk<6hkkpwv;9 z_cHUaNeC71e))u;sfM~O&l5X^a{i)yTMJv@cKKJpmh9Zvx*SF9iG6YJ72XqX3JBQR zw3U|GhPi?PB_y9hX z@l0zBp>{Fn%$fQAe`d~neZPMKIKh^I9KjauI8wrkhCD*`(iOu3MDjZ1yA$^8c9u9MdInYqJDL75WTB2S!AhJjLT$X8 zZL9(IZ4tIJeKljD8Qb256XnUiuiMZ{J?ZdCOa=DAz2tubN76myXmHi#Oq`3I8O%4H z!40eyCpX#fBK literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..aed8e9ef4a653badf3358086b6aa3218fd42a299 GIT binary patch literal 634 zcmah`%Syvg5IxgZ+8AH;t+m#IP+b_rWknE0H&KL2_qXk>UP*K1_Ezw-bfMtF5AdVJ zNg8ouagmwKoHJ)0_w(!h1Hd8b4l;zQ=nSn9UEAkRnU)kWseEj#%`OCJJmhuB8!rTJPL%_Kt=LuH0VfkBRZiZlmp!rVOtm#$7wQW@6?b` z3np|+Cu$N(1N|t|<~xl^{4-@_*D4(~ciSb*W5Ge0Fn2E=g&&IO)^9xxtsHn*#1hZ0 zN0zV@B(T!{wNa66StG@uS;PuqI&NAEE^0|*7i-vXuufR`qryW4n*`?}76~KPZH$G- zeJ!VNc`Dwd_cJ7+{{JEbx1~p>E6-JYMlU_demnxU!CUal0vZ0}%d>Sj^4Syn{N5Xi z&k5|ZjbU)X6kBghU_Z@K4l|hLOk8}zVj1?O7tEEHU$Oct;3hyGMV5+1mdC_YgiBDx M7R&IHGMd5mH*Q&yjQ{`u literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Motor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Motor.class new file mode 100644 index 0000000000000000000000000000000000000000..33c78753cf7080ddde1929fd34efab2558d68887 GIT binary patch literal 1453 zcmaJ>+fv$46kP`bDKX#`dqJ(DC>J$ad&l0foz4h2qr-cEXk(FdAUe|@a{5@Esxy7) z2lShqPS**jd5M!r!amu1t+m(Lhrj=R{{gUu_bNgH6K1{ZcFcym%iHOEH_Tnv>Z}@N zhmi_JU})bwGL4qm-ZQH8eXHRLC{4%d2uyAU6qoq9C@^p!LAG7fJ?sk11!a3wy(|_* z*X_3Lz7_~)b2Ug<^HmL)K<=`_q%&Ft7R?k_6t7n{wLoc^wPVy=b{w`&{{?A%}vByg({oGi1*?7O^A{XRk868i!19t2b%I7!0hcSP_`H zg`$V4;}O;xI$j_x5R+DU{>jy%j)$1$ zYV*nTv9>@=*8wj4suBU_dyPMINPm?t&Fi__x$ z;_UJrJ_i`R=6Aujp12rEEX!X-<2#kC8QrIMpU;+yrf#MG9HAY_MtBPrk=l{YJQqTjh^rX9L{f#JD01w$F7TGm5Z?U<43;?) literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/MotorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..8ea82b09c1ddcfc86cafb607b1732fb1c49bb2bc GIT binary patch literal 1046 zcma)4ZEw<06n^ds6uP=0I_6${o6JEsA;h?tK$e+_hRDm3ZY0D{ms+q(X-!*}@UN78 z*rIXqvp>psZiAyAG}5HKJ?EbDoaZ^`{QULx8o+ZDWh^jk@tz-e+z9&gy56|N`+@0| zOHG$7J>bE}ml0!FI^*ZOWOHXwsyU+}L!#O4)LU;Ea*h8(R2XFaq5PSUQsRl%ewZCv5u q-siC3i~_r%kfJF)onmN2NDx#qOuNF)53qmdEkFw~cd-|q&wc~NNbS}D literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..cdb0bb128e49d463bfab5eafa03cd53661721d89 GIT binary patch literal 1485 zcmaJ>+fvg|6kVscv}w550#cw*uD0B&fT$EvELTm7W3e;p(`g%OuuU*cJHw~=1wQLT znUNVkz(4ULblgdbjzE}9&dJ$luf13H?Z@wL-vKP+K!ArK&Pxr`;AQiOUfnoN^CMF+ zmeSdps%WMFA4BgkZ}D`EYt{5Y=~yY741sl3Q_T$qZ!%S6@MZOiBEpN11U~`{J+i7P z`DVSO7>B%6Qy3z$UgotTH&pA~5&F#cYJ*`+zL7+R9Mrk0F$^T%$^Xa{OheVGnN%@| zTMQm~S40&30{Z@=>}W|Cz-^K%ADg_^*sp53p=5c3i1jD0G5J;Q8*MS&sVjJwhT#lV3nm$KT)(09w8%Ojaa)ORD-Hq z)inw0cub}B`X$4JE0GIr`zN1Bc#2J{V)YhP*R(tTzc9OlxKX7}h+b3Q6pl`BQboFv zxRhOL8L_2k72U}5y4`(O+J-1r?5xM#Y}z?z@YkIjkGknO8D{7zn7sTU$4@%lEf(~q zQC4r0#Xb1rw`l5+Jt3anT?TmK+>=}Yz>}!!$>ly?I(<(U%w0F@d zgl_bZ!~*{$V}9BXnLO)V%FRc5+lYKZ_c;dNoMA}*jIsI1@P#Z+vN4i{&yk?d33;xK z$viEoHDAoP(8dD2%Q4?qJZxjb;^KwHW!3iUCtm@21o9rl5b>C#+eKovN{lij-9#^T z5y1oNXZg2ij+WKL7v# literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..b1034c2f22f1e5f143c47612497f65ddc0427651 GIT binary patch literal 1025 zcma)4-*3`T6#gy+3SDK0j=3M|+z*9rLZ)snkY#4WWRZbM1w(wg)Ph|~Yf4$df2HhU zi)M?@{!zwr8-zY+Sd;eloO{0SeBV9y*YEE)0A8XXBf_x8+kM~ThToyr^@c^>@lEeV z@!0ZA!?#>VMwB6S#?N`t=1#X*aRxnxNaG#DdUY1K#1K8Mf2c9cRcejX&F1TBqoOlx ze7p@bQ8sMLvHSxDDVJ{&*OB|lOdzI!VO~WVcNya4aY;5;ovPG*&vLq@lYBEtwf9uS z5KllBK~{x~xcGaZB7r1PRV~M?4SH?Ud(Ydp$&jhK2Dh8svqT&u6-byT3I1oRPhHQs zJuvBKE0@287X@orm+^!l9nv`L`({tY1~wUz-1GR*aK8*0w6K$U`-}!rItiKkn<94% za-gK%Vb~AD#s`p}ea^yIPQ@1T40~aUBb)d8rBL4q=hTC^4K!p$cL$zfzOlsNr6zZ$ zAPUKwZgm~*4?Nm@72*@%@@#L4dtd+SVT_SaXOc30U2Ejt?nzp17GI}dI!h(K*#cza&V2QqQ;-PL>4l*K3cWunQ zOL?J1*0xtKvGQ+_8W6}>6(ULCLp&P8_sM{OXGd6Uy_K|^R#_-Hl~%6sc;{=-a4LaK iBqV7?hd&aS><%=QehN_4yy(`{fA$ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Door.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Door.class new file mode 100644 index 0000000000000000000000000000000000000000..5b8118737ec2a2c2490edde941074afa9af8e569 GIT binary patch literal 847 zcmah{%Wl&^6g?B$ag(^O6cS#g4W-a#fhAaix=F$+G)O_&Pn>CS37N`qkoY0i6!DN) z@Bw@j;#|i~yCE!mXYR~Bk9)_z|NQ&~;29qKC@9?3!)co6C_Uk4laHZ3Nlo%JY+IZ7 za1}Pr^amY|_2e|{4bM!JDwIdO?58@NO%?XKOBm)w&lQR<;z^tyDL4m*0|mEbN2Ux1 zl>k0gN?66Zk2QtHf5`%Dph&`2x7Y8qOHil=@Z@N{8&Ayf?ETOrZ}f0%c+<6!9uIU9 zOP(LP>D!pTx0m^*$`CI5+&?&6hFEm!MPoZ+AUhE&e$aT7IW3U%Ddxk9eO z`e0yPJkQ=EBm_9ziy=Z>Nook+)%u|(a#6?AZ3p%VZUQyR` v>TT9IP!-peF*8xP|1YhbTPU!Bms+q(X-!*}@Lwr= z*rIXq*+0s7ZiAx_8fkKS?>YCJ?|k1q=jX4l*8pCiEF;FS!Fzt-aU= zUO9AKPY-x7@@2#s7SH%Ouh`rfR2t4`$dIfz+j`@WVYB&Pgerx%-!@tze4)`gJt=fv zH%}WnL*e~g*{PagTaFd%Gf2f!hap~fKbR>b6fk5|WO18H)TSZ%Vspk;4?N2mRF6uX zG{xRgkw7v9Sr~a0GLqtSPelr8f@)fh*%}RdruUBbY?C3^bPaBIxMvAFbSjXLAqv4q z%crX6+#Z>9*eaIh5u@M{9?RHZ$VNzx{lFZm*hGOL%{`Bg4foTSL5oUh_s&css2)Ys z{c({z205hC?lZiKrcGaPPYaQjg?2Ydl5j9U7LgAe)V9NIwsKwO9v~Wn*i<9NFci^+DJEX+7&EN zoJv-UZ1I)9fpv4Yq)RMbAQu{U+kL_b16IN^NmEEjGn&)Bz=r%u`P^rloxmd3blM+gbM88104 zxq43T^O-6fp>?S%?M8$~GMEs;EAymcG_c)46D>kF)0MhgyynV2a$YLJer5_TCv3H^ zf19Cu(Q`tQ{coEKLc6evow_x$BjG3+Y_hHuVu)+QwekAH&3Z5J@&~i9g&J$WbN^2o zXFiDV7;?5m2|@Db3Pw_;!X(^0{lM0{d;-LRe(a@f!A>m@-hoec7u_}YuqRUqNie{{ E4?b*asQ>@~ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiDoor.class new file mode 100644 index 0000000000000000000000000000000000000000..ec0af9b316b849aef062e5aa2ec5a1f6966cb4b9 GIT binary patch literal 650 zcmZ{h%T7Wu5QhH&ZhojfV_j z^&g!R5VFTAQTBw8F7MtFGN-yJL!=SpFo7%~UsZ{`>~-qW+=zNC3B{^zi1=0*<>H^i zjJ;D`!cO&{Vk1pe2wqd4#=0v56j1aqLnz#fM-jy$X-Bnw*UC-~vzX(qbk7pztKVs* zqidrQTeC)rPQ}Lpchhj7(htAn9u;BGto{=xkzhH3)2sy=6_$(emf?vq`c*w>Wh|iE< M41`eP5-Dtb0V&FbdH?_b literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiElevatorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..41f4a55f3b712da5c38b55a5f263f3a8e97be800 GIT binary patch literal 674 zcmaJ;%T5A85Ul34%YuR^J`cVU117o&9x+~2;sL#ANIVY95XY=+GAtzgm7Yj6@dNxQ zW6xp?L6*Z*ch6K+&-8qKzkdQa!?uM4;Y76ip%z})7a-#!I{`! z1;%|h-rW$`e4TKx*xV2ulq2u^V4ywOP-ZGS^Iv%SEQSL6;Q8{0f|1Nz87;0{j>Iv2 zJcj+oNdgX|IX2WBV}3&5xWpA<83jfot})y2><<(l$0)sWKCMqr>Fq!LD%Sq%%dFp+ M)!TFRn^BjoA1le8!~g&Q literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..ab2e76f07f3699a15bb20272d3c42fe8f9f7778c GIT binary patch literal 654 zcmah`O-n*S6g}6}r!PyhvM(zw0&UTQS{gwV(ZV7y+>biiguaP!6#QAWC}`0S=to8O zJ&jx>E#}_2ALrb2XFk8)KLDIy&q0K+FB*MoMANqUXfyIe+e&lnU5^HSOQ;*oNe59v zenw;1L5QC!U)eLlT&Y|qL@#tpx|l;Ug&5+5bXEECcF=1`b1xcQNyt`pQ*`UXs34vs zqxM1d2?x~~)23xr2+5uv%87!5(k#%WGO}rv_ABLj5=&TikR@au#ZY)%;di{+sBdL2 zg%zyw0(xKxtJScqw0CEeZ)?^_(W@k|#=?W4g^7|vINiktwj68{mj8gIkjFN`c?y`i zK9iTm?Bn5<(;b$^>$HB9688SzhTzupz%=ER3LbQ6`f-i|9VmkL;ok-#eB+N`>u}_; zC-$+!Hzc0JvdcCog8}nwQ{x8q3miqUh%{#c@Hvx3*e73*$>v_M{!8G7g%}b{6_Dh{ SjS~`vUP*4QXfJn0fq#$}Hal)d_8aWOUj|Bxt6g&VA zg&4CynoxMgMAC_730>+b#-(s%Q<27H!kzrSxMYx<=}QC~ll7rCm6LwSOd5 zKqwt2Sz=BI6Fa*%1m{$BWPl0yA&MvwrsE`&7sGx_>TA(TC7}|lwn%S;PHg;h=$PAN zK-i4`DVFzBC%7GTnyP{HF@uVWS;EYnco0!4vR>4D92nUTF^73>NDU2PA^uJ$D!S51 zW|~Gz(XV@0Buus~s1`SB_9+3DvFc)lFgNB#h&8Np^?M6RGv@B(;JmKk<6hkkpwv;9 z_cHUaNeC71e))u;sfM~O&l5X^a{i)yTMJv@cKKJpmh9Zvx*SF9iG6YJ72XqX3JBQR zw3U|GhPix5mSuV!4-Qrp{jtU}q1bQ|hRPda`Q6M;i;FZtiVk#r9^+FZ3b6KAVAh4aRf z3|x+STcbser5V6^g)71;${e-0&9vs64^-}_sJ`-iUT@9moj?6LHkS1@)^9HAoqzRP H=_%Vkh})BJ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..1c62c704b3250b787754aa925907a5a4beb897a0 GIT binary patch literal 634 zcmah`%Syvg5IxgZ+8AH;t+m#IP+b_%WknE0H&KL2_qXk>UP*K1_Ezw-bfMtF5AdVJ zNg8ouagmwKoHJ)0_w(!h1Hd8b4l;zQ=nSn9UEAkRnU)kWseEj#%`OCJJmhuB8!rTJPL%_Kt=LuH0VfkBRZiZlmp!rVOtm#$7wQW@6?b` z3np|+Cu$N(1N|t|<~xl^{4-@_*D4(~ciSb*W5Ge0Fn2E=g&&IO)^9xxtsHn*#1hZ0 zN0zV@B(T!{wNa66StG@uS;PuqI&NAEE^0|*7i-vXuufR`qryW4n*`?}76~KPZH$G- zeJ!VNc`Dwd_cJ7+{{JEbx1~p>E6-JYMlU_demnxU!CUal0vZ0}%d>Sj^4Syn{N5Xi z&k5|ZjbU)X6kBghU_Z@K4l|hLOk8}zVj1?O7tEEHU$Oct;3hyGMV5+1mdC_YgiBDx M7R&IHGMd5mH+KJ$k^lez literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Motor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Motor.class new file mode 100644 index 0000000000000000000000000000000000000000..576a53fd0965feddaa2b4cbfbb4de237ca5cd474 GIT binary patch literal 1453 zcmaJ>+fv$46kP`bDKX#`dqJ(DC>J$Wd&l0foz4h2qr-cEXk(FdAUe|@a{5@Esxy7) z2lShqPS**jd5M!r!amu1t+m(Lhrj=R{{gUu_bNgH6K1{ZcFcym%iHOEH_Tnv>Z}@N zhmi_JU})bwGL4qm-ZQH8eXHRLC{4%d2uyAU6qoq9C@^p!LAG7fJ?sk11!a3wy(|_* z*X_3Lz7_~)b2Ug<^HmL)K<=`_q%&Ft7R?k_6t7n{wLoc^wPVy=b{w`&{{?A%}vByg({oGi1*?7O^A{XRk868i!19t2b%I7z{j8u_7>Y z3q=o8$12t+uDZ2R*(eFj23hIDmn}Te@f4asq|tJ^oHc>xI$j_x5R+DU{>jy%j)$1$ zYV*nTv9>@=*8wj4suBU_dyPMINPm?t&Fi__x$ z;_UJrJ_i`R=6Aujp12rEEX!X-<2#kC8QrIMpU;+yrf#MG9HAY_MtBPrk=l{YJQqTjh^rX9L{f#JD01w$F7TGm5Z?U`T6VXHGmf=%9vx=;9WoPxDoW|b-huE_X5*< zUTU~x=>ZRhzKj^d!Wlp3C7V0_Qq>s_7!r+EyVg8n$kqQ3QD%_!lh*NZ^$o*(wRzge zwO`jyt2)Ex``Pl76~ne1E7)g{@`W}-?9lySCJ|S_u&5%9+eE4|3CZT`Q^I=SSx&!P zE3{J-dq+hai6mrUWL3yWh`)O(l1LF$-Ez$4aL_fq6W+B=hD_ZxxZUQSCG60tK*AzX z2tHaqRXykS(4?QOd|@Uv3LarY#$$$bgyqN&%z=t0$T6h2=kbx@ei|`oQ7x_RnP~*& zT14I-7wMxmhg@1chF8(FNec?I^je6^tJp+=;bj!$(B{5hj#R!uovIMaLDN=rcjy`B zTT3)B9a*NL2qk^G)puyQJi6YCAd2+LEF|~K2fH*iiB?%USP>Hi=%ir+=~XdGx{1-L zV4mVsvYKRzr}z!5ler~bV&MXr(6}25jivZ^x{}7o=$+UYOZo+tzfi^;R_L1`9IA%Z z&?CIGa}(@c@(V7qw!MCdwZA8+A%Ki^L6QjG$Ad}w9tjZX*)f(o?(+P$~gakn)!?Y`G{Q&!S-W;?La~nJ1`Rq5=RPEdV literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungDoor.class new file mode 100644 index 0000000000000000000000000000000000000000..23400ec5785e8c5a98034b66bf54ec2ef10bd11d GIT binary patch literal 650 zcmZ{h%T7Wu5QhH&HPg>I{o~5{{V1|T?Z+`u4pDki_!wj;7d_9ciRlnDi`c^a}NhsD;OGI}+m4EqV`zRl)Sa+~SC{4JQ!v;3Fg-1(@Vun|T^kH$s$K9G8 zMYgT3A7$)fhp?b{_pb=SZ>YX*$;;3VrSRv0hqfvz;O_amz?SSR**Y8r?1}x%!5iFX z-lX8OwP`DzWt$rc*w1m4!Tjj*39GHndqKXq^oo@+z~>ZG;j(xP@kWrX$&l>{5SJm| M1PGzbB~qw-1A^v-wg3PC literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungElevatorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..8d7c19c724ba1676bb2d68f2c0a902c4442663a8 GIT binary patch literal 674 zcmaJ;O;5r=5PbuMmV$yPejfZv447yWJYu}4oX`t~#N$#IttoA?6cYcHo=7zD2l%6m zv&9&Kl*7K6*?sTL?(En1`zL@iY@0|CPDFPQDd9#vUZHw%L@$!6?zBaJFbp2AeK``m z-<+J9FbGEpk{K=`d+r5ZbU{d0YaN1d89qoGY2*sXAWJB=yg=R#`(3H-MAw&uaw~L& z-x12w_3x$;J$VCy(@N+&|Edi_-c?dW@+Ra55caCIB!`&MFtI{7T-+pP+9)AMuqXCc zp?2R*cGm&(_X>jS0xG0Lx;PwO*Ndh1WWinagx3hOs! M_10YdX53}#2ZlkP00000 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..6993232263b3e6bfc0620cdf6ec88f308468d5a0 GIT binary patch literal 654 zcmah`$xZ@65Piksz=*P_xGP{t(1Vlc5o2OBp3sY(oX|dg!;MxfSicBorFDBl<02R2WZ^ z345;wglc2Pv}sv&LfY3OIZ;rp%>rF0BRf{>0pDf^am`1Eo>8<$B?NX zFnMjvJ|1p4-D7FI&fSkvLgoK$2yRmkO-Ej;@Imv_k8>F6KpDIb|27cg8-D~_ha-bnA@v-UUAAEv447w|88@(B;3$DbWH}Rp&zLO6KK+7Rq4fZX%$7w-zW>QB>*;DPXm&mqNWg4P~goHqkV&mY?Dm_$&|T z^1%=An_Mn;lA=o`>O*F7_MFR}IhQZrK79r-izga71V-h0%XMVU-Q;IGZ?baJRnBa7 zv0*C9)esdpyd`&Jwjr&0_Wt^os<{H4*G$WFZwN$E>8e0<(cVxxB1jmBp;MrzXj-bg z-CS4Bs$6dF$F%CXbTy76 z0v*K_9lhw+(Dw`FK+C`Y28pZJ+p^Ir)Ggali?T&x{iy?7K1*N-!y1l}TnM+SvNmj| zkT-AyBLd@Lci7j<#c^CftH@?++p2s1#|(^nrdnm8R9P#pc-Tn;r+nHPnt|=9Yu}wKoH4ObY0A<+c%ld#QhNOowUw7A2=+8Z#O)0%!h@mw_zK zkxSsSzFm882!w|Iy?DrW!!Ll*&^vnR7l<{3bRQ4X3z99+U2$dYWl6qj4;H;*Z#y-$ zYL>n^0UEJdykW&%VMwB6S!7q8y=1#X*aRxnxNaH=jdUY1K#1K8MpVt`XDz(PxX7f$8QPCMT zKHLSGC>yrrSpETnl*>1X>&X3RCJL#!kwB8Ds+MEc2EDfFo$E$pP;zMw&rPD1AXrpO(G z94M)G81}=k@d4y#pR+KQQ?Z3S!|O1`k(Iu93PzCI}uzgJ2={gSMm*GI}dI!h(K<#jk{jV2QqQ;-PL>4l*K3cWunQ zOL?J1*0xu#vGQ+_8W6}>6(ULCV>}td_sM{OXGd6Uy_2-tR#_-Hl~!)>bmvRZa4LaK iBqV7<&&M1Z2@(R84AXA#;wRYuaS><%=QehN_2nP$$>k3K literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Door.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Door.class new file mode 100644 index 0000000000000000000000000000000000000000..dd5164f5f74e96d0f1e1c8649b2f91ddbed3906e GIT binary patch literal 847 zcmah{%W@Jy6g|z%FaahnqTnkg7^4XbXOX2=Hh?P(R$;MkhEAM_bZQu^@`qd-%SV+9 zKfsT&Ja?FoY{bRf?%RFOBOOU}#)BJ(nq&PrnKnLLf#V6np&RVc_D zxGQqcsWO(B9rIjq4VphtZhk@V4V#zD3)o^@%dj3?qAEn)lFE5KZllIbp^iH_SIAYk zyyjPIe&%LQB7&gUHP~B#?=FlCawByC)5j;cm(B0Ecf*sDd8*QlxTwf)L5DTQYwCJV vz0Dd2s^YpbW+n;`|E0B)YdxaYPTv1bttz#)GL;(Hmum4*GOc~a0-pQ@QDc}; literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/DoorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/DoorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..ae1cf46c2f0ced736e1e4d14e36ce66d9db0e072 GIT binary patch literal 1038 zcma)4-*3`T6#gy+3ak!9$J`Hp%;AJ?LY8Iv09j@jCd)c7sUsmiU24HDr8R9?!hfag zVT;DaXa6YUxebm!Xr#&Qz31F>zVm(eoS(nG-T>G`MMjKagZKQv<3`Y@<$B{P?+2#0 zS3PoFPY-x7@@2#s7SH(wuiD%hRGZFd$dGJkZM}KKu&MnQp+@2Dx6PIaUud?@PK%w_ z+F4U)D88R7J5@Jq%dvt32B}o;FvJ_~2Q!641`JsRIozcZ^=U|X3!|VwMpB#}C`chqP@3hKtE3ExJNeKaDtP7Gv@F5;e(_fMRkzSZ!xqBk1H{H5maw@G| literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/ElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/ElevatorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..5af1bda0e7d5bed241009dcba06899844a2a8a8d GIT binary patch literal 428 zcma)2u}%U(5PfqToE|8s^lD=c3$LKW*q~IW78?4wbI~Q|ZL%yRewLMqg&*KY5ob9o z6B3JkZ)fJcWafRZKfeGB(T@-i&NyE<%Y~cCGxjaznNxO{-jr&^(wNlk2qB?2=M|?V zSI_BvK39b!v@Ug}-4&sc45ox|Y@Sq%26j7WqDAOtx>9$`*Ie00&Pzo&%uK=Ml&$vl zZ!>f+dO=9C|7|lOvArAHtR+qhPXCd8?Qg!uJ-~je=tj1sEPJF_y44E z;e!ZIA!kdJ5F~%DU?f#4Ov26c5A3|lCqOLd$6neN?9>9`J@{nz(cN$l2QrnA1OpuX E075uwtpET3 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/ElevatorFactoryFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/ElevatorFactoryFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..02171afa8950793ba1fc6c342ab667c24049cbfe GIT binary patch literal 1440 zcmb7EOHUI~6#i~sL)!r=C~A3GtvD^vDpf>F)$(o_%A!0%SeV;(fWa~~(`gfahD(0| zi7UiJ8)I0y@HZLt+&(awWK3M#d*_^NN_Ps^J2|1dC5AUQ#DVM z{J_%8RC2kZH8?3&+Um|D!NU+b<_(^#aN{t!Sv=NC7Db5`c5_>cYp=Jm3+i&z7Bkw8 z8Qsy0a@EW&F}U_~48D2Y(5)8?ZY8$E;90DewE)}*%8<~*(68!-mam@_HFJv>D;mRq zS}pO)4mWinca$FMNUt#@RU7KRGf6W94mGQj7sI;Zl!(>KYASl)CIh z*)*%B1Ru?Ep;|Xf+KMjLWY|W&Gvo;o0};x^O@9C^6cFjqmzy-SaCG}gO47^d z^~S#-@R2@Tkm>fdly3CWx7;>BANoo1BZOyOLsDvq>&mHO!d)T4(zLhJGxj}E?A*YBzhJLZvN>oE|8l#p=c=;QHVDySBgY~P6 L2)-gK7qWi<>x5to literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiDoor.class new file mode 100644 index 0000000000000000000000000000000000000000..96e8acc1a49db92b8ad74855f06fdcd4a180fb0c GIT binary patch literal 650 zcmZ{hxlRKy5QhIrLiQj)67D-7ia@~@6cj-;AVjeOq#$}HF<`V=M_vahj|Bxt6g&VA zg%}gWA%(&-9?$P@#^bm5msbFL*z}MiY>HN9jcD6zUfK*Iac!m9i%tjqv?J89*2Y7D zu>6nC2?)gll`4Bk$k(^82!$ivks0m?=}pueWL9=dn8plurTdmJ8-J#i zjxLN!ZPOYlx(y$5+)dkoYG3@CdsK)8EO}TYOpmx$!ZKF4g`OiNDZ}eS`mng=@<*_MU^_7fZxF!_CXpVdwmJYuRk`-J%)K*%Yk!e{XhB>0A`j)ts_fcOjv MMnDKPE|J5=2QWN^eEqs3?v9+RojuL zox6tg&P1an3Aw6kiPpLBY`qVXF?DUX3FWZH!_UY4Q&&=*IBg{yi`k{(Mi^n>xRoRb z6KRYfZgP|&Wa>&-w>5DeSV~!*6iU`yo+qIYPWCG*24)FsA#)4t`;{hUbUU+;KX5gD zIh?Kw7`{YU{Tr?eO)UECy4&$Ad1UK(&kvv7){W>2tnk^R{C}|@JqnIui0CiJnI!MZ zyb`Y?r5Biw97K@jXS|<8hU0V)k7A5>Nn|n387)5KYJKIOko!R94RrB>{4;XAf8c!7 zXN~#>3}z-+oAjAlH|bYUmSIzv4v^c7)P53gm|@tQ#{9ID`C%!6z9k+37Jlm&S-(7} L&kofW{4Ois8JyDl literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..f23c2d4fda0ce0af7002c243c7ad96827552fabe GIT binary patch literal 654 zcmah`$xZ@65PiiqFyaD=D=KP8(1UZ}h%qr5;{lBchI<1Iwi%{P(~$64deFp!AK*tB zYX*!SBp$k|Yk99;b$@)my#uIX-$9IUAX)=!MB8@xXfyUi*Gg0MuExWlBheB8e1Xv91DnGwipdxf3m467qH37JgG06~@zK z!rrR^p3l0C?Ek+F!ENZFY0FC$K4|Xu;~a-Num|3Ue;bJLjX#2|!;#0H z*e8!(k$#HGF59pS2F$U|P8!(HbCkdW7C94w&zLO6KJ$#F{OSwVe+b;DkVKlPLXy=< S3yYszAXO6cj-;AkwS=DTv-l3@qBLBd>$RV?hBD1rNYO zA;v666AI6GJiosgkKaFD-vI1m+d+Y_DSDaFqHnHwDg6+NYa{i375)NQ>~pVLh)D)q>m|h0j5zRRH8VQXX9Z{>Pyi}B%v0mzDTZwj&1yXSTwhB zMyN;s6wCW*6P$rMPE;m6R8ey#`|g!A5k)Eu0|~;k<#gp~|Gp)? zbJ6NZLf&$1(YX+wqx~QlQ#VeJPzx(OF&dXnT}yS`?J3c<8C$DvhKa`}Z6raMO=Aji zldTjXbEbrScOo8wZc?@ z+%lmQ%GEh0Ni;pRd_-E6PY3C@(qPoOw+l>xwfp23M3 zgxs+Tl|3P(>y0)cbEbRJMH&SUS>y@D}{CK#KqP@@yTBeD=gXd+>(* za}2v|BN$vT$JUz?*w1s6!2%XJ6BVDbSc-k&1;x_pE7pGn+!)9r&r*@d>Xev>a0zy? M$1?n+jHXci27jfJmjD0& literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Motor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Motor.class new file mode 100644 index 0000000000000000000000000000000000000000..dc9d972541f3a654c1a25c9f364badd45af58489 GIT binary patch literal 1453 zcmaJ>+fv$46kP`bDKX#`dqJ(DC>Ir5de_<;w$m8_XLNWE5N#}yPKeI*hnzlEr|L`} z`T_kWr_*%;YF^@GlCV$qUTf`j_Tlfp-+us<@LokoV8Up0UB_s;yS#1Zd(qf+O{Y|> z*o;&t0z>=8kx^_LoxNhMv2QkA0i|Wzj=xN^=xWA~lUo1+Wx>Y(wt6kHTO$$tCgK|Ana&@U< zLPrEqfyAEa`t%CSXLCX2zC02pNa$M;SP10xrLB679@t0hHxpP;wjA!VWp|jaQSF?L zNlZ!S=XESd_o9_r{d4t`h8zki@&c)V&5%9oSj3V*oW08MY8*1bt=^=q#!$o~6)OTW zw@~yjbv#Ci;%ZwP)s3>iY><^ceA&WN9nYW%M4D~8%UKh6q2nde0x@Zo=bv0%)$tJ1 zTy0$$#3>BqxXR&XX)Ryhaf)qztr*|>Bc^TJhfdS{XvrbeJhEkZ;*=RuhIvv$yf`i1 zFU~ICQGVfB;B$b{I=>6P_520zQzXtXdg5g#`Am2iJjkpZVAZ(H?B(Mw?lBU$j|V=i z5Z9vl!WmLGC>lAy`Uqi32#NGz zLek!Tv25yEh_9WVkYUn|1PGB9Ng*>x_pyEuNg?M-{v5NF#ZzRCp`1`v>KxhX(kYgY zq4mNi`NBD#)5OdLUdi^up60Y?`xsf1h*NEn#!b++S)`C<%SARV`^oosu5DSt8eUUH n1O@rG<2jJxhLwo>#&aQbiMWcvOC(hk6-AC6*9G448N$2&dI~u& literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/MotorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..ef64e137e63a43eb4bb7ac7b378fb0a574b54f9a GIT binary patch literal 1046 zcma)4ZEw<06n^ds6uP=0I_6${o6JEsAw2RS?**o} zS8BLq=>ZRhzKj^d!a2X-C7V0_Qq>s_7!r+EyViWikgNY6qRb%cr>&Ed>KlgnYV)j- zYrn3aRdt5V_p{|ED~4@3R&c-|9r7-SFwo#!^aPJ8cXr-bR~_E(L1p*mh?+3f1!*ytk5?>I8+U* zp+|UW=O);@^9hDVgakn)!?bH`{Q&!S-W;?La~nJ1`QkU{VC~`n literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungDoor.class new file mode 100644 index 0000000000000000000000000000000000000000..987dd3d54b5d6e3d550882ef917d668e35bf5072 GIT binary patch literal 650 zcmZ{h%T7Wu5QhIjWJu8=+MSL zhiP*kCWQUwKgFh+Y7m^RI*U{yJ>*ezP$1+V#G?oz5%+@DC^531#WGg7D>XEPQu8|< zs^D6Ov1u7CMZe)nwvY0$j!g#}gyk96ve?2lw=l4zC}wzVOdl6FeB5i; zQDnO6Y9M15dxV1G-Jc=^zomw{BQHWbl>F2Kk8D*`z}@qAfi2ltvUNBL*c1Et!&kUZ zyh*`lYtvS`z&1M;uwUdTjiukq$E>zG?-{vb=>=;OfX^wW!e#LU;{8H)W-PWJAiGJ4MYeVqSaNNu+$~ruJ=$Amr8ouwWjEFd(PEC zTiy%K9}eCch!NI8Btx|XBVZCLjsI!tg!qo_*lL#$t*oCBVtej|G!aEA4Fd_nc*Az& zNw3qA-l=G{B_ZE%Ezv#`o~`#mGN!KWE}<6Ic=Y+Wf9guABd4o`V==p0Sq~!&9k-qY zVKR*|#7&M;giKQj>-JdO1(s5lCxw#7F3*!t3@7^)bp!K+)sVRb_Weo|bGn^5!0)@7 zz7kH?1q@#%l>dh7LK6j_-E@1NB@b;q@5Rxx+q@C?0wq3sl>aaGqesC}3=#e1IFsaE zjaTAztlEe9#6bjUe#Qq$WH?R-aTepeOCpB}&S>!gSLD620dk9x+E3yQa|~P1n4gw1KP)9Mu*4(4(r=V?^5~(mNe5k literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..84023631840253401ed162a4ae864563b8bf04e1 GIT binary patch literal 654 zcmah`$xZ@65Piksz=*QA?|?A@56;0O#>8kmp)tX5Z-xfjFw>@KO!zE4XyU;S@S}`1 z14a)L4_(!@yjQQfKR(~y0UV?1AVJs{ouM_tw>>`Ej6Kn_(j0p&5e!FR|4MVxL5i?F zqcQFv%$=xE*;7KYR&Nth=ejFhB$3S_jX6TTsX}=@3OdrN0zYCjLS-UH%5iFWsMX;BZD;-9t|x|m6YS@E;g{`V3V-)2P}te>=2xXh-nZq zd2PZz8E!ev6#gy+3SGA$Q2DP;-&O4-8} zjf>CzDC4;e+Zv<6Chfi7x#xWSzI)EkUtcc)l<`7Fh+&=gMxM)cuTQVzPKvzm8E(1Q zG3;Z)38&l|8??#h^7DNu$l{5N$7CU(cQW#fp^B%-F~qs+@`>(znlKcC zu8w*qhVE7B0i#zTa!R-D3pwgDybPAjE+aqp%7v|M6?r`SgJIv|qfsUB+iS`j3t~p7 z_lo9>UEO$XimO|^8mJwSN6s{JU~_Nm(pfn`Cu*y6xQRD zY2C;aY3&S|FGLc;efma;8YJd{9}!WS$Jy^n6c;k(!q(b3*8g54v{4Ek3f-i71Dmt* zSL98Ur>4ks-${kbZdK@MN|_5h+Wt%@K?&?yLY!Jxm~j*+NAN32R=B{{53qmNg|Opu K7V+F)OTPh^i0L>0 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..242db53c3122afe87285cf0a8c9c28fc9f445b19 GIT binary patch literal 1338 zcmbtUTT|0O6#lkNSsNnMRzU;`_+;J9k8 zSZ-O$_9Qfc)RB2+7F(v>EPkvXsfH)ev0~Ylw<-|N7it1p+1Xb*;z$}uphKX$YT0V% z^ti6v&t|=)1kzQfVYX_fYx(E4Qu7Y26M^CC-7HGXaBNz(Ku`W_^_I=9=UR5NRH!BK z2pNeqp`ws#%HDU}t%`xicp?z1z84sY%zN!!($R}PiKhaiQOFg?aW}))Gw=-k0(!$$ zrl)*^z()T6SqhOZJ_bn)Vn`w@Fcw8(+hO%?SPUa4&>6A_ECS_w(Fj1uV-({OV*-PB z@-Q%g=K}IXdEp!6qLT*~EYx%qFeNc5Fc1apdm5Pb+e>r4DLaW-ypSjgr*1=STK;Hu zhO<8F4;FIZQ1b@?#Q4Qw<}P_EQVPn%PD&^w0mUyVgvn*aa+ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..1b5e81ea2e8c55fc29d0f5e11cf674d1678de74d GIT binary patch literal 1031 zcma)4-*3`T6#gy+3SDK0j=3NHn8OL(gb*`*fGjf`Cd(L@R4~M+OD))?w5F6L{8!2z zwrE^@_Kz~2+aUBoBTd@dbME=R^L_W+pTEA|0CvVKRC7iHhDhrT!*>0@=n6yhxcRQZuvBZb&T{Qn^;S)1 z$h}_(o2VMLa--Aug`VrzGpf8%1NP}q}n?w zVu&Xoiy*5)MqK>eQ;|TDsOpwuHb#T4>AmG$+hoYpU4z?g?pY!Zk_sd&lLY^xHKeW= z+#Z?qvy(3@Vn)FuJeIM=kPe9)4}Ei>VjDSzB=REO64oT3*Ey6d3ly97i@E4lAL?Gt#*UaU*EXitdg)!+dRt<4eu% zPf-+-Io;|z+#h+gxgX*a;OYVj4=RUc8kj_PS2|o1!vtuhIRfc*F-6*m(yCyI>Qssv z6pN?$4Xl&7C0!wPiA)gOjRwI=>^p5q6J+#Gbb=NA602Vb5y2XLsVudwlVkQxxk*c2j3;C(!p!e5X90nbjb+Buc9n@&|IIg>W7@o?{R&~Pq+ j%_JmgL_1RsjRXmSN``6Ic=`kE-?#|0fO8jn!TRhsS|jIA literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Door.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Door.class new file mode 100644 index 0000000000000000000000000000000000000000..8234441ac3b165419416e7192d561190f1dc116f GIT binary patch literal 852 zcmah{%Wl&^6g?9=ag(^O6cQeV($bbT3oOJE)J+mrp+O4De(X$(OPZ-12ZU?0cjnIA^SF2X`_Io`0G{KChl0YU4ku}%qx6KIO+E&pIkAa(7PPHR zJh%#LXZnKS0A;=l^Uz)=(m2tJ~{$+GQxzd=%wqwHuGk@$@`2$y*(c3~#zN(xZV+ zV#)JEH+>h=`NM_I>3R9oq%w!AR`(AM7eeOE7Ne1!uswzQJ~pwW;02Pb zab?C{n6dQ#$j5fpSMN>dxYHK&V;{SME)8vuRh)d^PLs&Iilw)*czY_(<8HIq;j=0f zWD?w!xaVLQ%gl~=uDJTmAE-3H!2gEzOXdY^Fs@|SB3z=XMBS3gSv_u}&P<_!J2_Xt zRk(`HuUP-g&5T3@L9uIaaSpyaH!{eLGz3f^pWt3LzvJEwPfq5kMmOT3Dt`tY))}v< x8#(m@);LgA*Of6d;j8{jYb)2vR<8Xe zB(4w>A!1m%@HZLt+-X5W92fU-&YZ{hefP}wpIVT);pN8MyuOsWRw>o0l-e}w zRof{pG6c4Z4B@9%-EyBX1k;&K24%snnks^bYT#&N=+LdYxz>17F`W%jshJF&x^0Ns zrf@82x15T*Ywa_P>et%-i@+>{YB;8FP05O3KJA-z33fK)8zO7Ws$l5S5JERmNN2W- zD&n}qahoCOhv>4lh92}XaNDU`by4$_D01{OB>YnK71>oqAEF$C|9Q5;VWVCZRx>(* zC_~%9mHxxNoGzh}QcBg+DB&CH@n>i+xx#q;T)g!jgySwlzaM;=5+TJhQn9dldj$2U!usaFaYT`8`Dk=$v8t89K9{aVz(MOk`-uqViju z*3dcn%BL96j}Sdag04w@{Fpujy=HMjMhGZ8j3i+jCv;O#z2@;|1L84EF#+GjJC7qUae{RD80_!NqlxavGzKt6G^Se!|CU3NlHGd{DsVjfg)T5U-@tz-e+zk4(TyIk8S$)^D zs+A+x^^AZAV_!y`Vfl=o^U9DrgG$pGj~J2-y=^p)7z+CTA!-!ge%ow`_@!p+^rX;v zrJptphVA!@rKjrV(01(LfI%vjIt=lK`@u>fp@1QyB8%Hpqdp7C7xg(`Bk*izP&+Pl z(iD3~MFPnbWMSl0$ViIQJryaW2}-vet2G|=Ebkrf4K0S8?wWkq;hrt*(5XN|hA0Fd zZJ(;1^WoT{!%nfZkQxP#uqER$LpH*4;s@49#S;`5(%kd-#B@JR7__LCcJItGgW7RK z-X9m~V~|5G?LNcHXxi)vN{hU;5LZ;OjS|C)C`e<-eZLl|e1keyA!dV`tr+guGp*OQ zc)-kjl*%HK?-*M7g^igyu`-elhhDE#-<=i1n=X)EPbB@i1hpvtKBz}cHONDCMVLy6&~(= o4hzmHup0_#YSPmghDL-0K_$nuEA0FL`*&UpT8O!ey>Nf_8-&H|H2?qr literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/HyundaiDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/HyundaiDoor.class new file mode 100644 index 0000000000000000000000000000000000000000..0aa7e46339682126b1be62b6b79fc2133af90236 GIT binary patch literal 653 zcmZ{h%SuBr5QhKh?Od!{TkHK&6`{KDATC@~+$iFrs8DgAwoxOeCz7T@A4?YsE_?tV zN}O2H3U!g0Oyl=VQtb0fiHbk>)jcD0xUfT4dro7fh?nbBmUeXroSZm`U zLstZgmV2W zt#ou@RAL*}NYSbJnBjI>4pjN(SKO;Y%wfU9JfSq=S{{p7;uh{5DNYz(9nc5GEg#?1 z+$?f!eSR+!AFG5Z&AUHE2w_9_OiP|9Ht6X5U?NTD1(Wg%loW$y5I?u#qu*|e*qzBxGwUkk@^`Db1~Db|oQS(=E|$2&2My zoQ&Ih)gzQ@lg9lPRwbl;J&hR+T@l=Q^#* z-GIr%M8p3l+X;?)UQ?ghH?lUWmUOi1Cg8f~~`m z$DY_H_Fs{DipnnAunY!Fv(1be*w1hj$1Jj(3BjjK7Gs}&#$0~s1uH)UZd6Dh#Z)25 U(x`Dv!Vqj?i)jc&uEwza14PM3KXmm1w{}I2$~fj1<^Z+35z!C$m<~SSWtjO!2|G6 zh%w92gu*i(&+l)>go%y?)#J0eeM^8vEW21D%#64ZVg;*QePAJJ#@t2$F6tUS?ltWMDqVFk zkeP=KLa2E6!zTnSHPjt>n%FUn7cbhiwXg|pmp=w<$qtUK%TdIh*pKbJz-^&NAwmSa_Q?+^NJt%na1NIc|Gj6q`4KXo+K0l-4?y3Fe-|ZWX9gB z0ihC1l1pZ)5ej`hl8O3Wbt2$G8QHc`GnBE0h(PXjCa9u~30 z)9axnECq2{Y5&Hk&^D}*qF>8nnJ^uxmV9wU-o$h_4t z@mSY#`i`gKRXRUI5_bQw3BhgXp=rxY6*-qO)6g`tTabujYhAv?#p+FYEP`X3u7Ftyz2@)vpPGYEOh%3h+^@mU&3o0P> zp&!t1LRHT=0sLZQ+0Gr`d(Sd=^7r5GKLA$nUPVM;+^lyz*KByZydC$uQMYy-*IG8p z4nq}+z`(wFWEw5Ay=PSG`&PpfP@0b83QTNn!@312<6PoUWb<w#(hNoi_6|5`Ls( z923(2SsioI!g#q_`&{{?A&;Vp0yTwgiPWuQ9t#3V>XqTuSj^rc_a<*O0Rzh_mISi5 zfpoj-c#IYDt8Q&nHcF%(YG?pK%6O{d88m@dqvdosbpkJRyhK(YA^q}Al&h;cCh?G~ z%`1~QkKrI!N!&B78PJ|2-Nx6l`K>o>+O~7(Hmr}f97oMZTa?F7nIdMC=QhHNQ{(^Q z6!RVD7aj{f`xveByWm?dT<|_c>I}mtes-GAl;4A=nw5R58kL#deB8x7MgsToAkZtq zwRoX;hRjVDjTm5kjJ2}Es2|6B9V8>kQ1Ifo^m-Y748#h*F#MB65lBKZP13p{66>{z zNPm09Qq(n(fSfLoLBb7%5Rn#1B2&ordi`K0g_ui)b4-`#Pcd^0<%Fy<=g3tSPO*3l zts6cm6wmRTCeB>om6RX#IcI&_M~Iq6l5Ep7Zj81~BZC|z8x$?|6uLOqwk%-{ugM~Y mqWlB$9msIQR@nEA??U7fNfrHW)*!Mp#LA3kpY literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/MotorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/MotorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..dab9bf0eb88ed7854123e032fd1ae502d1939f4b GIT binary patch literal 1197 zcma)5OHUI~6#i~smre&M539Tjmf99=LBK~aCRiSA7+}!~X;_%s=^%rpV}>aSE7$%K z5?6?c5HT!W_?wJ+?zEsW8ROzU&bjCDednC}?Z@X!05f>P;bTaM>Vabm-PxgK*+;pm zv18fBbZ*Teak-`B2rxwV#G%O5MdMX&qq=A44nsCk+A5awg_q@p=i1WWp%U#-iA|$X zv+Uv`gKxXY5PE7hOy?PcKb78O2;{Arp}>!b3XTqjF3oHh>&^YDVV6a z!ZxMcRtB71^ME0#{SSkAhKOz(!ZBQ44EdC&-xb{Xw5N$1WL^P7uZkf0h(#*BT~rXm zZH`+EaW7C;!BzBQfPq_f&1{IeTZ|&d5W}dKtG42%RWOJM$LK$LS2$`mYQk)rk08R( zad_Q?aZg%T;HX-`ec69P<7wQg0YhiW5&G*j@y6{7$6bbDFAAo|oOQeS+C!g}o){yre)=ygsz}6i^OJ_=l=d)5IXW4g z!OR(y4|MTCr9I>-{ph5-+A_cmbdeNB6y2ne&hNV&e4J+KUR|HPB&XKwNqO4|4ktLA9jbjA1NSG!e&=M*i wkvgIHQJU)^%wiZxqA}Y>_-8pJDVe<=!2-v_pXddnQ*N_Zl^el$y1l2v+sIl zxzu#Y)B_%jd>L_u#WQ}+OEz}~rJ6GuG9;VrPQ7)+u-%vgqrxETC+*|o+FOQ&TI;mA z)p^r6t?3LqALax|RSny6tYDu($`?8e@k95cnL&ZWFEQG$faA%qZ)DXE}pP zz0gTh>>U*eBvX)uky9ZfDgN%MNFhy74a+fGqhZhVPI%8Y8L|!6;C6?5mas#o0trh* zA^2qZRP~(OBa?pe`NDj16gJfc^T_lhi9g=DH8D2-zradUk)omd!uVNboh8IzkL!0}4B~tnZb|ynC2n}4(-H~UQ z?<~>6Ok|;oB9sK`*1(|!^XU3j1W}|{=VG~EIVjWMBwA?cU{wqipp)haWY)wq=_XF6 zf(43G$!d`;p5k|~ZuXXRiNyySh1yYGA4@H_On-muU%JFaII z3r*8GbG_=3j3~q0Iltfqn>*b?#ToP%BDMDn>$Pd%5`%o)YSfPosthxgdgElXc~EOq zbcT&j_dzGhhHW{PzsDeDb4`Zmp?hW~5L3V~uOfv94Ds?fB$KU8gzCO$Io(n<*Gy9E zLlrT^6Oe_GQ6VEP{vNAHAW2j;%Q5SNUfc9O^0sXrI2Yo%wUE6iOY9T<uteWD@lZA_2Oi<2 zRU2~`$uG3X+V<)dR{jlA0|FVVLL>=%f~RBnE)^i)nGqISA0+LjRTfH4q?Kzt+xZ$K moJe4I5|T8a7h?{M1POsknrYW~`3vm-xCpd>a~nIs`RXs+A>)Yv literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/BasicNaviFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/BasicNaviFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..da63b2ef4fe7107c140393de77ce68a6f49fc3d4 GIT binary patch literal 1033 zcma))T`$8>7{~vQjcql|n0MwihR}pd;sTkQ5lKbj@~n>RNY^f1y?raLBqTn74<(+X z!qP3Bi$3S2|6hJRr_aad>pOrQET_;z*c8=f;0rsr=Ew6NP5B_|4M&=;xKrkVXe#@Z zXXWs13Q0mK7HLTn`u3Eof_*}ww01#A9(q^OKmwU8deKK1swh{U-qx$qKNnR;67m(# z7S4t6m0tgBCWD%463j}hIr_1?gpBP=5y;~+i?Cc;i|0ADo5C<*C027-lcK>{136>} z*-&BeAYH<0H%k~~(O5T;brfa|6tpN8iq1q(D=YU(`h<;cvcE73rx}PnndNx*e}sW4 zt^K*e6Vdp`6>^G2^IcC?7mmYO14XScEbrF0Wm)M4C`5nb){VFmSO7N>_bs?_NH-7H z6t7GkN$;+|ApOjf9vEEpYcSByH5&$a9N-mU5JOxwyv=EyOTQs^`GWit&s+K47C!yU sk6^T&FEBqI<N~a!tALEl{q6M%at2Ksus1SizG5x%wU#~tE*664tq_huSGMEghD-PiQq

o{DxI}=4=9% T;Id~d(#-m!xWAO`xO3+RO;DDF literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Client.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..3657d36d6c62f72d338bd50f611b20196202c460 GIT binary patch literal 1916 zcma)7+fo}x5Iv*YNMda;GR6YO7YvaE$ik4sL694YWjhfvi5$6dc^SkYFOgQtYK4sB<=2CX8D2krlneIMk&UUx{ee?G}0M<~K2npO(yFJfU4R4?S z9rurd{#~`ZEnRTbpctKDa6x1|LpE1iaF)s<_T_v6io_rmT8EL1K)WrHwnWjg}b zvOiZ&Db+mJcA6WxdK^~-qFbtGHOPK zJz0N}NDJfx`3)hf6s_zFnZ$J@ByI>40^@dE-M0JfbCI)1BykIOByJ021H;e6S(w9J zfkeaA%F~Z_Y6A1wT(GM2+AvTH7CuBq!19A@Tr@?_jEeUihbeLv7O_N8{S-UOdr`KX zJ?#oCjY@OsJWQ3ha1Vu(t8A<81+GFb2H(e;#OkQJ_Gw%A2p&k0=hA$-8X_-L8QyDFM ziLV6W2H5Nh^hVt61T0vB6SonCWk5}{D!0krPQ9mBDg5!w5m*ccJyYb&nLO0aUdOGf z_Hd%SGXyw~nq7j<1t&G7&k}2^?%Qe~F@cV2odmjPYWo5@_-#P2Fu_LhGDRj3YTf78 z4!*(3w=nLk`AaoVHGXCM@nB8XI(@gH%eEQ4WBx3^XXL^ikPLqXfDoTJtZ60R3S0%( z=;CX{{~8`AY0WVhFh*E-}doC)A;nnTs$%z3b|HS1ZT>tSk zW-6~Rc7$0zeo$E&;AWL(z8Im+7NfMw#aKF$jt#JqAK;Us9NKs~nwIJK0GrPZoiGfY zB0!wTy;VdhMLTzIup>(asySS z%8ffe%JOugi3@AOV){<^z4x5cw{Q2)U*En1*ub`hh(KOeTY;9f;FzDUzZBGG*=V|| z;K?(mP;wpR1v~24*UCanAbl#&WWkkQz3{Gjs%n8iV$1QI;FUl$mp>GUmHZ=RBZ_1S zaU=vr%Z{h^+l{Ky?`73h0yoQkO}d9tJ7)f8F&3OSErF%-l?4?^){u@TFrNEV9tf)h z+VSee{Go+0fw^$J6D6B(4k|X%NLsixEWYx(QqxL#HZmsu4h4teS6u)6Kn5qfj(4QA zjd7E8cPL9ky6&EA+Q=el<31i*cpxwvPSq8b!W5^BpO z9iB9(9227?8>-9nfTm0*PQX#!7hJ`EcSq+TKU z28p-mF{0k~h_T8YfEiEm7;BW3X5=~}Bg~$|6Rt;zF^Ok*ju?GuyueFxY!G*oe`cda IB1EwD8{PzpwEzGB literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/ExpensiveGPS.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/ExpensiveGPS.class new file mode 100644 index 0000000000000000000000000000000000000000..b29d1ecd3917f23e021bb1f638d35e0156367332 GIT binary patch literal 648 zcmaKp$xZ@65QhI|abQH*#C;iWpow$vVuJBP)C(~r814-;+Ggk>O@r`O>Om6^K7bEp ztOi66hQm}%E&bKs)t_JQ9{^6_IfyWnc(ZRbZv(2)t5tY zU8_5YF?b8xsf%IhTqsx%G8Y(yjxCSgP~|8c&(`hFPMq&9;LbW=4w6K zl#4CwIM^oD|G-k%#U6vxv;2TAQ7BGlP9+&i-<9ot-Fi6CEpa97CbRPiG~mQyaR?Gk z4-Q1=k6wVRLy=FOk&hp}A@MvZyJT${bYPimYT7`4g(8Mkq{-UDXA>CUz95rZf5j$y XqHF|~;F2dS62$tYxO2+>r1Rh#DN3E~ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/FastPathFinder.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/FastPathFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..13a341f919b0bd8732187301c674a588983b455c GIT binary patch literal 774 zcma)4O;6iE5PcH@4sHr*LZI}E1P)E8z=s}*dY;UyQM9sfyd!SMe z{Q>+a#H<|^AypQKo!Qx$_vUNwAO8FW@D&FhDugd$lvyLjcEU%SMIgV6WE#sL6>}8~ zL}o99y&0(VN*WJU!sk-JQ!rueM5W4}5>|TsOG5QbUr8S;Sg&IhYlO{6rSg21jHLM{ zMzJI`BRv-Jr7+6b%g3s{Q5oSVDoy;n(vVP_aLuk9Le?wCx~x{|G<;!LzdX(*4cGAo zEe}mX<5tW?5R3FW7%nm^lRCE0=BenJCA6d5t#oi@d*v)NyQ`V*WmM z@!rEbLhC=EIzHed!J9gsIA!Wy!Cj=b{Cpkei*tcmsN;cwJ_=5C**bAth|Sk{XG*00$jY+#e614m5e tNc~@EG`H{YmVU5Rfn)GlGc9V&Upp7L$T_3SIfBokLZaXU_$b64 zj~0rXy?ttC-alU70Gwi&AR-)avG$HjzmQkEC#4^G^-yVLd1KVo%``zw7%X|is$zSm zu8XBEJ)v`Mtnn9w)+n11;&DCKDO%X-p^XlqpBt+u&8pDumWxUghIw6bHDhN&{!@(o zy;&2E^8a|85%w3x&c}^&+WK(Io7xhxQTF%p@2Ffzr*-2>eQ5%puBbZ+!s0`S3^4_W srnEOGy zJ+?0*+e8I7boV!zt(MZIwMeCQm?uCj0kRYIXJ)wU-FY{`7BKEaV3 zHcZ^bJp-$3@0q3~Wnm39c8BqM!e_S^&cV4I*3I||)-7z{K0ly{A{q1un-^)FxH`p- zdu|l4MJU-}VDIkOgJfzn>jMi9wSa;O(|VIf@2P<&+{gvST6m^yG9vA@7w{vngM{k; zUzA|B!eQK%?_51prPI;a(zmdQOvPglWcZH4ImHFT}RfJxcC!9uXbj7bpyZF`{!gF}{ z;!WHe!CT~|Nz}WpR<>`2(GPDKeTW?S7~-jtA?OMVE*x-%M>GzSu;2++WynBNuyu(Y M@oiy*j-Unq3?NBNuK)l5 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Location.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Location.class new file mode 100644 index 0000000000000000000000000000000000000000..82691aedc079f6ed702716bb1d4adffa823084b3 GIT binary patch literal 307 zcma)%u}%U(5QhIb?l?U_h;LwF6biPm)XF00+Fvc)OK)B|tc9wJZDN)&PrMJ9V7h09PG3u4qF+##{$s1M$mtSg{ zEp_e)?I%+j_e^Nrjpl^#rTWkbTDa&TLYpv1O{w3SRi^DbXN4wQrB%+woUQTvPYm6{ z)P&pgKOc{TWL7mc*AwHnb;R3)w-w$%Ovp=+O#ZlFEKHp_5Z&+5*@+M!5%g`yKv%GL Ot|Q5PVT4P;0E1sV_CPxT literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/NaviFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/NaviFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..51d391a54fdc7e9ed6dbb230c27ce4078a44ae70 GIT binary patch literal 572 zcma)(KTiTd5XIlX34$mm{%uW61WdfbQe$I+4I&AKe(qRh$#F-Ph3Ln!GO_Rj_@Rum zoC#J!vG48dzF#t#`TG9&1aOJtB65T}hf`}fvQKhS^BSlZ9#3KwBs|waN2HZ~6yXv4 z5zje@Ie88q!jXzBp>VAeZEpzqdZSP9ZqtD(Bac!A8z>N}ZJnsjY#b`{$YHDqwRReD z+-IX*{rl+Ip`H?&?RERPB9tPd*s8m3k8oOV{EtdXkV=O1#8g5!TSa9-0sRc@vK_W` zGEjzaz6xH3m(AYuWQ}GeB}loK&P=3Q+D*;>vx^J22JZwibXg^2(By_KT9hgfC->TX r$L5<{awvfs_K`4-iY+p*M6a>VniMYLP(fPPmpsA*qf7!Dlfcb?681Q58PK z&fsUiXW4!}{r~;}ctJNtKuO-=r>el{(0AD|jp>B!)f!4~4h} zBsP@6=lcH1$KS{2`wqYbh6y6VDHn}*T>6Ea+Px_K%?$|G<#?G}%5EG78 zyk%9feN?x_N|&C{yENALD?(>9o)O~fdahG+us1*#Jwlcnt8X^zLc0epDoq&Xb;;F? zoeBAGG4@N-5XN~+I}<{GA;yA1LNoe*FTChYZ6__qTG$W+>3zL%rJkDbtLzWed7u=Z xK$r+<#_b?{+F0+K`2P(ZSDv!~+EEhsdNV_(dZee*tC&c((um literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/PremiumNaviFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/PremiumNaviFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..75e76f06305f8774d3e38925832edf15dd215aa2 GIT binary patch literal 1043 zcma))%TB^T6o&sJC{R)Hu6Vyi(8NYvYTT&k0u2eq#N~jaj)6jkLh!A0Wul1>;6oYD zSR;gz;-Yiw|IOE#p3kqh4*>gEkD!lWi$cxSqUhf7Q_)YhY>INVByC4Dl%3PEtm@@U z9%sDw5rhe;K&UNE7&ugpa*qh1RQj3_KCawK3n9ef=*IwIB&!^GSuYo)z7mC!B#dP% zMNzsITABIpV%U99HNtK-(Cq)*1468*rEuk0E>BobrGt0i)IkKJgmj?jv{{u-O*PD} z77~aN;+`hYopcDBy-Z$^WmANWK-u|;m$fiyL8ZSikAJ@n!7A^NWSyt$K$yp0aMq%YEbzPJhWy)aM|1)h9Mp7rj`IeX^p{QmRf7l21-8ORaVM0cnX(NmxJi;`nUeicFNOD7aZ zp5yMiy+q2;K%THVyEH8%6kmCvr(P508qE$NzZ3PPi8+)l6i_70x4lsAje@RB-ixj; z3DtJg6Mjb|p59Lm^XjuVB&@e*Upmp(A{hNde0e8gZmBUF#6_)Ur;JNjG*Bfh9Ev01 z_#zxQ?(tB`z`_!ixq)b;2+Qp>?M2Q(;)Tjpi4*~Qw?bH%0xC`p-i$oIFOw3k5XxGQ z9f;UAQNuOe{dHz*WOUhWDTuY0xCz_9tutEoyN9x;EZjz&P#Q?Jy5*zKh=aBhcnGroom3!Avd4=CbThJC`;d0MBg&aji7 zTP180Ds~jw?yfydhe5O6x9~s>( z38ov3lAe6)>7lCp8{KVv3!BJPJoZ42|9B8N8oYCOC0+{~Cn$YO(g5w$-5le_7^`D6t6Ln#aK?Ce%50{H0t+gp?6r(x S!p>ZHhUd&rc)`p$y!;CQZ{>FY literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Screen.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Screen.class new file mode 100644 index 0000000000000000000000000000000000000000..7794d0fc2611388e5bb2e4a5776d1eb4506f807f GIT binary patch literal 359 zcma)2yH3ME5S(?K7@R;Le}E8Dpx_G1AQ~hp14U5!^<{yJoO5(>0(=$~5(OW?M(4k>jAN*vtJvEtDDNQVvx~lVH7CUc``@KmRO|o% literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SlowPathFinder.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SlowPathFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..90c6126b525fd11487d6453d9c869b08bbebb827 GIT binary patch literal 774 zcma)4O;6)65Pee$DWO1VVPW|!aG-!72aZ|oWhGA03aN;@TU=_C#K?6E{43bQB5~jc z@S_mp1c8uH#KAKj&%8HZetvm;0&s+F4<*9B=nSk8UEAZM&21oWL~<3&AQdAOv}1jJ zB5eOyrRUOkC=+%H0UyDHiC-#J_BUaywR=V=|Iz2t#~3E77{>%*Hd3klJ4`y#oQh5? z3H3;KMSLcVa`xL}+4j|da1a$H{#wEawg@wrW$C~XlQ~lV rA8Pd<|FJ}OY?a^`eAY~h3UfJ@W*+&*;{5B_$e4ZhZDeI_X6UU~?m5Mj literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SmallMap.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SmallMap.class new file mode 100644 index 0000000000000000000000000000000000000000..cae7892a78d92a30f7aaedea2755aa9375938657 GIT binary patch literal 323 zcmaJ+yKcfj5S%qO4h90^3qpYi6u6*Flm;o4Lj$5;n?qc5w$WiM@>!{nDENSURFpLe zEyd36>~r?#_j~~`Mc0Qz7;wBVEGNZAEVo~wI&!)*D$Kal;UZ;YK6vNDB|P12l`ca4 zRcE?*Bh;QpD}p=A*D62_jTSuA37tr1YJNy#WtSWqMd(F&!e+%*SNuQe7F)e145Paj zZ{l7E!6HA{M7`^3W&2i`d~(U?L*&TE5Kom1L0?#S<$yOn;o(~n4g$fd3>jz&wyv=! MzAcRKDCnT`2Rj^0*#H0l literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/BasicNaviFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/BasicNaviFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..7422b8035bd40d65b8be056690eea654ee1f8c02 GIT binary patch literal 1146 zcmb7@O;5r=5Qg7H6sU-Z;s<`B9>jx<8erbe_Jmv(vBd_fG(a*p4B>aLnr+&*i3fM~~w^>*9&G+Lq95{vbQD z)wQ@M9a}%=9cfl5R`T;=h%y|6g!?##iBoAy?~Gw=r%+>vUN{Y*VGM~R#xcP#U6!_} zbX#@d-tf957&2wYQOoGPVv1JsIaj~txQFC-w=N#CjyPEdJO_5$tL{-TBm5okis-s1s_nh z%8P#>efx&Y3;F&0cpo4C<7Y89$Y+UP2=eiv{34bH`5f^pL4I;5zlya%ex3MykWUTe JH-AsL^#ereBGLc= literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/CheapGPS.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/CheapGPS.class new file mode 100644 index 0000000000000000000000000000000000000000..261722a2f985fb956856c05b8091f299ecbf66d3 GIT binary patch literal 672 zcma))$xZ@65QhIkba2EC#C;hP59q;(@nVAULZTO9NHE?TY@p37r0G$4EA^m>2Oq$P zGFA_u7Y`h!YHIuX@0$7g{`drN3eQ1?;EQJ8XwfolequfF<&y||f%GHsp!zCI0%24f z`PHrzy{me|L6&ed;Sl!|X3kZl%mrbpe0WR9R^vPAVhXc)Ok;+ySW}U_PQs?tH=-Fx zLZKG7L~tv#vhgUHHC@#woYW>fdn~v@D7IB}S535*k+EodA;M|-a8lNIs4|OX6de=@ zOZVbI_<@Kzeq+!#GR$KICB9^w7(%I*mR0Q6wTeu`Xeq)<4r_!1E5>UL)p)^3j`yfc z*Gn~fyfqga*mAJR+W!INv5g&q)3fY=uTm-x&l}1yobFWYuH8nQ=$5=xcB}K_jT~Df z_Q7KLM*uSX#$ST1!;#OP*iRq5BlnV)UADFi9++dBA2zU`=ZLU?MYeYMEQJB?E0zkY aZ&;^i&Sqc@7~DOsrco-FzY{3_lz%l<0M zCnei*<(X4;%BLmiI~CW;l^omk4Fm;xkL8)PO42>F-WQJTqAw6$c3j6_5$H;$_5^~t z%Dx>#7osLY2n+P&9oODEEf;KWR~AaPK!3hcl%+lCIcnY94Eje-Rlv%3L~4l!%hGWL z29uxiZE`!l=eUPUsXYUI0*jiMtFr18x9I$OBOo#KB5L4Ym=q=qjO*8S!zmM! zm=ZAdJ^7_>*GlS!SeZ@j#b9B^z_h@)W{#N}6SJ5Th#xR?xl_+$lc~;7Jtr`yAID22 zx<8La0}D*6CX03oOgzC;fruibb_Kp`$Dl<(H)t&d?MhaZRI^L(khetqKfTUsEL`?) z^FkBI=rX#}^)%D%w|kfu+u;dqPU=FbrehVC+fAl@sWn?nAa-)4rRH=kx3ftCT_n%} zYgNYrfzk|%N7r5}jY@HrtamD>UeR86)GgoLcsA1NQpN~Kh))j?;EeAArNNcOQE&{6 zpCj_4{yRpgeuE0#lxE`q$7@_gaUDI}QObYRE5mW^0=*y4`K(+Z&T(LKvWCGeiaXih zL=E?|AP&?nGbE_>AKkvBBaqvIY1*rh|vcVV%luf9?8p_)0z{d{bG#tsA&lcCRuLrPD00LI5qB7C aSf|Ad`mll5bTCWgH=IR?^OmRqy!!`oQ%#Bh literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/ExpensiveGPS.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/ExpensiveGPS.class new file mode 100644 index 0000000000000000000000000000000000000000..ae606425ae733e62bd390bf18466267a9be6d3fa GIT binary patch literal 688 zcma)4OHTqZ5dMnb;)?PT-;ec%9^3;lF~N8->V+5+4EF*>Yj(S&+eQ3W>Om6^{s4cJ zaSDnaJaFht=k?7u(|&xuy#uJhbC6=F@pf!9@0cE)NI&>u$isdhe8mScmSGZbBO~RX z4f{gHav(0Qnhw$o`%@NDKEv#>RMMO<%vASU4C<D_qQAE{6M zC5FNsA8c($A#72ZUETKY!Mu}mlG)7?=`Bz#h(==M}u%5*VL)DV;I%76o@J+|N zm*&=+@b+kXF4nN&V4e8?1D3-kwiukg#SdtlN_E_GOv#Y@rfzrcHlsv$#JRNFElxU6 zg98hTT@Y#d7(j|{^eQABvV78vbY}k**{4z1C27N;f_aj;aRTWDvKSVTCuxh1Mqq&Z fj6!Mo1*`0lyeU`&m$b#nQsys;J3-kVW$t_dl;5u_ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/FastPathFinder.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/FastPathFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..3dfc8ab84e82c77ac5688a8c7806ce449ff34ad7 GIT binary patch literal 844 zcmb7?%}(1u5Xb+M4;%2YCsg;hEY`XaLz!p{0Cok-)MMmQ`f{VyY|d{L>gr-W+nU`VK)>524F#cC6E ztPs{BmCEyZGLq)27{!v%iu72-Lt&JQA2w@trZU1wRI-HS>O(?f%6+)P2tRsdDXtQC z8R4@92W1tmq;M6l(e}_HtbY^NB8WwL84MPgl}QsD*yP*Ob4%Ea^0d;yg;A*;SR+Le zHn7D)*Kya;y2ZqNY-88M4x#;osEIwiBY0Pi6Q_*s73|{ImbWj%d|*?f6CQopejcxk zP_dfe5A@uOWna0`wwK59*%gL;aC`hffeNqqQLyzm3fL3-`lr8W{L0flTbBk4Ua)Nz z2iU*li0}$)Y@Ik_n1lMivEF*~2XE;oM-@1N&z`YpFw0T8#mNVX%fCk_C;Oc1JRrZfa75R literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/GPS.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/GPS.class new file mode 100644 index 0000000000000000000000000000000000000000..ba3a41fee3e9d7572abda2d6b7231ea7cfaf86b9 GIT binary patch literal 396 zcma)2%TB^T6g{^TiWNoi3)}%Q&Vr@J4T)|VHNmjIErSker)HQE{VZ1`F8lyL%6P}e zp2eIq_nCXn=hyoOfC&Z(BEp#SwRc?jrM%j`D*eLMbE%c(jai$jDcPIas+;>+f|zi$ z;ti{k?W4NOSGw?o&ZV)&UlCfv(VP%Z>xE9y!d?$;bO`;-Sbf`6xpohnmzprh>VnHT zI}_r+WbB{JnsAowe$fTtWNGYT+Bm1J4_m{rgvoHU>ze-|*_F=f#ufV7gd4k}_&kV> xPa)F8G9Z$lND@pWQo2S0!x z$~a{eJ$T@-GdnY#U;mx<NAF{yMN7)YsNicBa1>2bC_o+wPYkNldvPy74HOs zq1uYOJhy?{pp&wm(e5f-tGIvq4lG(){LDa+VvD;a5DE5XA?9;*zl5#w}IHBRs?$GMYw z=+Lm8sc;+X*tD=g`u~9yv4w30Yh?HV9jET5d!~{!r3Vc&bK8#-)fMN`OtI%4T2)HhID#Ppn^xJ*DhSR_=ZQyEd;) literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/HDScreen.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/HDScreen.class new file mode 100644 index 0000000000000000000000000000000000000000..8f2f9dd2e19402667f4e1ac5d74bbfb48263c3d3 GIT binary patch literal 994 zcmb7D%Wl&^6g`tBapF3(q;1L@Q(j45ro6$31+7pQp&$iCg54w;!c>0Ao)r37uyCa! z@d11k;*OoFsnkVS_>RYS&bjBFx&HI__&0z@a19g~9NtS*%=_vKJz;$4i0|BwJmCcV zKqk^3d0fdbaCUb({aA>=K#^f%N>C1AD8G_{RIeFknyoHFaXTCc6Emna1n zf`K~2{60V6j>m(c(>Y9(@GUH2iJA&WieagprDf=Rh-IKUDi+))kCz#iCxD8Q!#5-8 z4MbeQWrnI&X8Sy{O*C*-J93TKnmJuwEd!Aj6E|QRxOqm)``*6jD+{-u8BLiXW%YbeyS-;S-6iT`9%0V?$Zq{o`F+4q?_;!tXf#ZI$bJ{A`uK| z8qU)?Q98$tdv+_>WT@F;VDIkONj6iO^?`*gEuf;p{Jcpc`ozFvYUCVaEj-mW8Iktd z3+NKaL5B7JxmyOa6OQ7(cq{eD)lSA`Q`aLqiIjd6pg?alrW6g@IkYlbORGny{K(QK zMV$r#W+__v0a|OcW4M4hiW>YGMWO>%eq#O?8lUQyj&Nly#q|`oQ?%+E6jC@T9-cCr c8KOjj${BkjXBe{+7oOoc@iV+2<^o>+1Bzz))&Kwi literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/LargeMap.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/LargeMap.class new file mode 100644 index 0000000000000000000000000000000000000000..54905c79310f9f11581d6a20a264696a1f511e34 GIT binary patch literal 353 zcma)2yH3ME5S(@F7)&0BKcEXKI3Y?94N@vY14_R(7g%KbqVqX|&!R%2-~;$5#5y8< zik;or=V*U^zrF!n;y6V_FkH03a~W1@&c7S`#`U_grs0jWQg;;xagE8@KifNAr-%vj zJ%_ZPFuayV!VO_CJ6jUsTlZu$3~)F?f+1m=OJnc5y0HF{i^>vCa#wP-WG_AcPsZUz zTEa!X=k1-~D?;|*I$zp_^vlP)!ucz27^hHS`VXk5UXWs{%xpQ3%s+APp@|5YVqb<1 S94U^raiV^#j4)A*F#QA0|5=;> literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Location.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Location.class new file mode 100644 index 0000000000000000000000000000000000000000..4eb3478382d58681f74e571fef42b50c6dcc69a4 GIT binary patch literal 327 zcmb74nH>Nk;U^yD^RPEcbD3KGE zYu>Q3>>kxkv({}SOwWxo@q#cpI9w6(OMkB`Ot3vefhl288>g>_uF>I+8>>7-q8 zFvxa-T# VO=HNyj_7Qx3(0eFgk8}Liyu9@Pc;Al literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Map.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Map.class new file mode 100644 index 0000000000000000000000000000000000000000..f470883dbbc416338b260a952c498320391d02b6 GIT binary patch literal 312 zcma)%u};H442FNFNmD|h6>q=>72*a)5DOAhfC1Fq2?tztxvMUh3Lc9IiGc^;p%A`` z2Vn4T|F&#>{{H#=0&s?TiHxw|rjLQ!_$1-Oo6@h`t*us$H>Nk;U^yD^)D5po@nXXLZ-CbQ=ld3*$_@B#e%ZmxTPvKk5o2>`YN$OqkWi>D!@eba>##YQjP7TeeFM zCi%Z+9$!pPIH~_nbWW)5{SaDxZPML|P@X10971s9O-QDMAzF%4TMrbA4@};rk)aYz VW5~j;=yY2blJ~?B_C+(yegRU!NYwxU literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/NaviFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/NaviFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..6c032d89dfd01e24e3d515241436f0418da9ce4f GIT binary patch literal 635 zcmb7CO-}+b6r2Yu2%@a`dG!V!*!XqQcrn2XA_<23+oej$(j}!3{aKz&Jop3rQO38d z2_E6lH+}8Qr0w+k=kp7|1&)iz5zaZBI?IuJmXX-EK)v#K605-QTu=3Q7PHfd2|CiY zGD;C1!5{IQgP6@r@EDF%OkDsJ69Ho!K~4_KCw- z5o+xu;<(RNr~Tie=Z1PpxNNU~vTH&qvWlI$@Ae4IdSg`+;fuJMi63~?VD_y9hX z@gGZ+0E>3fGv`dt*Yls5)35LMPXGtlN+2R|B&#jYl{N34kK;ZU)RSyJHdMiu9o^E+ zc0+pFu?trWZ&b@G`e_No1olI)T}~i=s%`C^2}HMdDgv={=T2FOA~l8)#04@XZL6zx zv#Q)1S#2nR$&yo(jf!-&iMyLIudZ7H$E6S&di0+Nq-w5`p1Qa$3*@(Vf_{kkCkadl z90aUPpzNQc<66if#UB0Am-4YpPuT){!3FpTHOvwVsKIpZa~5Wdf~>FLT6*=Ow(pcH za2Q;|KSmi#L_^5c-|Q<&kTO)x5O6=rw$4arwJ5m>b5H3*E-j`;~(#~BHvk)bv4KC?|;@&no1 zH%z|J@8w5&_~aiyh3P?lhWuPVpB&21V_}eAB){Cxj}GNmusX=Ek>7o3_ZB0vIl?}UL)HJL$^Nd?DZg~Wmba43YQ z;sPxE>}Si?=kK4-F92tlm&gdm-1ISU8=oY6cvJe7yBDjK5~7-2F+fiYoL8>erEuF>Iv8>wQt!j zIGE)Bnt5EBo^VqC1L>Sl-TNW5`r4$!lf-$N5U~#dl20L-5{PIiPHj9;9DQKxT^boG W(KLoEY>Q4ebs>329AQ^9!|WHcAW9_w literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/PathFinder.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/PathFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..f9335352be06509290999061e55913972abe1c6c GIT binary patch literal 500 zcmb7BK~BRk5FDpzQ$iuoA8>0qV4)t1xFGcu0TQV9P3lrtiH#hmf@km)PDmVh0FOef z0f}pS@T_;&Yt7Dle!YJHm|&P75;&)#@s3KrgS`Q|=m})GHtM>q3+3*q zsFc7kwr5FPUPXD)2Je_J_bC>^R+dV7%=_pv3gjJKMTa z&2-p4`kX{U^#4IbEM9Q;1ucz|HfAu_JA JO^gwazX8V6jzRzc literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/PremiumNaviFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/PremiumNaviFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..b10d176756a9d78291639c9aa69794a3b99e5d46 GIT binary patch literal 1156 zcmb7@%TDVs5QhJOLfddF_sapwZ2>HZ0I@(tXLF#OMM0H{kXX9KfKiiFPFlfR!3qf^ z9)O2Jj0u9O>B1~B9y{~p|7}m+-k)Cq>|!mA9>Tt;hLIMv=!%~}-@Ecoc#XPrebG{( z@|txKsla#3T6(JKo$_iiu1q6E*s;XhI70t{@>TSg(7V2IPDuR=E~SHBWCziQe!@se z`SP^sRi!=?)w(2%m4ce6p9`(b{A)24-KdaIC|P<)ZlOTP*0dCnJT6xVTk9LP-{Sg0 z8l!|=OYx(-hV(<#GD;3|$nrL0=@ZeYa3+1iw!MKEVGmOT*V4oP!gP1v(H@Po05Ka5(MD2g!pVI9mFD_^(3NAas$;CdEcvOj^6(ASbF2YDmwRD!0i z$)YknHl6H`ty|F&SO#}0|1#k2B-5cB(>!x|B(u8tgv=u+J#aXh*I;0P<6vCC;}FjX z!x-Uc;2o|ub(t6BE}k& literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SDScreen.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SDScreen.class new file mode 100644 index 0000000000000000000000000000000000000000..a0d881b6071ac2e605b38e90a006220dd7c9e954 GIT binary patch literal 994 zcmb7D%Wl&^6g`tBabg@=(l+H?Q(j45ro17D1+7?xf@Bm4b`xg^Q~4!(TmV-x#ym_{{832F8~kFHBe%3_#jmY_tYnPqU6XCUwIJw!U_4I zOl6SyT*)YO+&$Mzga{3k8MbBxMLOANYcy*^4~x_jw}qe)6%bKFgG0r#EZ)iRLbYF--WEH$0|>+q1&yc(>E9;{p~9 zG#M5S_#tMu zso@esT`RK#9@{2bxS}1oN^I?duBeuSNQ;TSu#=v?pL|Jv+?@M6=$ru%iXkR8*WdX+$3xcu0+$VXTG6+9o5`Ui%?k z0y)UA`9F8dV7gJ3c;dCxBiHyh;@i3&*-51IqW~p(qcNpu(9WTi(OOwQM(takHYw^f z2yl*~RUDwTK|6-?n5U@0A5kVcVC_2=exmiEdGQ#RH^#U&#?3K0%`FOJIAh#DVK#F_ ag#=Y|_Ey0#VJ9v;!BgUAct*@6JpT*oy!!$G literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Screen.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Screen.class new file mode 100644 index 0000000000000000000000000000000000000000..bfae0a6345f52bd9f8a364261418e50202267ab3 GIT binary patch literal 389 zcmb7AJ5B>J6dZ3hS=a;;as#@61TH9pXpmAZqzFp?)-m8{*N(j20LP+2qTm1=3h_)h z02H3*_ZewsKEK{S09;_4ArUyEvI(A4xaa5mi`36lZz?Sp>9t$w93AWr&_z#RSQx8s+q%^Lj><|4j0>lz zT9P-h{~e~`(KG_G_?M`uK(_MqbVD2FPX0>f^Jx^DFI?-Do|!1Czw>z>EvCm{L!1?m s@Q;l!X52}xf@}Bm4STOY>zpyJ!Gu2JV0Xav05P*e40+1gF(x?r23X2r*#H0l literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SlowPathFinder.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SlowPathFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..0cb1a1d77ad62f0f4a53e04f305df2ee892e6767 GIT binary patch literal 844 zcmb7?%}(1u5Xb+M4;7$IWcBE2ej|tV@-Wj3xRga~QD%P8* zV~wy8sZ@TOCqrpY#W0qHcBDrlJ`+Z{c)3}#=PDx{MkPyFtv)0)CftWBjPSEpmf|XL zml6KAV6Uvgl@zYyIXWKNgw}<)6hSP~X)su1Rwhlnz$V|Go?F6Zl&6&r`bMR8V2u<> z*uYB`x{kY!)-5LHV;gTgye4%1A!_0+-VwZ+JJ8?E-%AH1Sp997^5K6}QZ!7NAV7AKb!mw%6)oa}RMCogL^ HSAVz%-&fMdxz_pGAd4!3XeBh;>Bz z6g#`K&(Z$;etiSD#8HlfV7TgH;5t65`S5P+8#gOwP0MTPr0E?;@vT`j?A$%Ca-@X$ zjzii{7+*^(@rE!uJzEmeTmNJWjIcjJhB0AQN^2kbrn2FYD`yGErLWm7Imp2OlWBaB zj&M=#czY}OiclRHAB literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestMap.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestMap.class new file mode 100644 index 0000000000000000000000000000000000000000..7a366a696668d5a9255adcad21d620d8bafb3b31 GIT binary patch literal 350 zcma)2yH3ME5S(@F7>pr^KcIsYF%l(+CK8pQAxghChq96Fi_Yf=K8p$|1s}jip{yf+ zK#H5)ncK%`|NeKs0Pb-aBOuJUXuadof9SLBD>I*5Zz_{Dyp>k!u3|5?$rh&dFT9Bn z5~fG?Xgy*4D2@0h!szC9NeJim-6R;{G)06lVUkN@Uc0(5Zox%m2v@l+xmvQ5o)2Q^ zSJD#h@*{T-ejf5#FEgA^iafS!YCI{H>-B6GQ#($WC`!94+-@V_u&d7{OXpaxJuk* zg#Rr#D64QKg>zUz%R`f}d?~I)5R3F8=-*~mCJn5j&9|o~me7v!w9-M(sMPkYks=A} zSYx5xmi4W93HMdOwygt}yI^+v5icRCvXYg006?X+&rt(Ynq|ncTg)4!? z2k=pdJ9ea`QWs(2J09OT=bkzD`p@5=zX9yRGf-mK;r&!4e4swl6D23E_{M|S7jDRp zWh#TQ&y|cq_fVv&J4l2G4U`$S=7bdxhU#k>O7(_e!D;sx%6rjJm{>sFLIqWZMn{I? zU>x*Ca>)C>U}$!t0rz`6k$OM*SXN(T%COs+v;0)G$6yQ-{`DP?8C+*x0y^%sdv#pK zl7S|};t@aQuFu1f+dWB@2rMjPg{~Ei6~js=Ps_;tkjPMVRU&vmKCd#Y&Hxo9M{mc{ zABv=gs|Ln`q&>_T&b!IR#x&EeDYn6SrU+xP3;;`~Hy_C<}M6#!wpxwdeDc zj9PNqGaUIx&%`}EFmRttpK8ie79PSOp9p`z1M0!@88}^sbQ8XXbqgEVq_*-n7U7WQ z;XJJ~r3>uj&Rz}MRNan3TQ|r~^SRQzk1XtH2{jcJ2$Kf&sevbSm2<4M@Jt(J#M*5? zq&AR;44ePcT?Vrojgx`cmwN0P(~;TM70FVfr5^?;(HjjbMT2%Ot&G;n`YCGP^R!7( zr$K-V6s_U_truy>a0v~H8vF@mq65}`VDT4PADdTBacv{R%?x)lw3}NLGPoHYPnpde bQ6WLqoV`^rOxTGF&+&rz8D0`|39tSEEU^DB literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerGyroscope.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerGyroscope.class new file mode 100644 index 0000000000000000000000000000000000000000..e8436cd99e856d4893fd61b3a8443d5b79d8a840 GIT binary patch literal 371 zcmaKozfQwI48}jFNduwKim_WK{tRTOm_SGf36`irD(db81BcRHbV&<+tWHP_JOB@c z@KuPZ>TsX^^V#wzfB$@b0T`keBOnYpuN%ij^Q6zZWh(DHtx8EN`z9{EUWnsox%Y6l zbha*RB{4$6(e}arWUU|V7K%MG^ppm>o)mSNAGZ3AA cU}vR;0Ew#qh7RnhcGh{MabJmWpcX>V zit8~u6Zo$f`>AOO7sck)Yg}IvvXNc5N^VV9ak!@M^qH58BdA-w6f{zBshTR~D+ZF2 d4{W__Aws4azM%s@5 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerMotionSensor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerMotionSensor.class new file mode 100644 index 0000000000000000000000000000000000000000..5edf6774a96f38f5fbe33923c47298ef6b86cc80 GIT binary patch literal 383 zcmaKou}T9$5QhJ`+~xF)CfHlpX$r3pL{J0~tS%x%($Afvu3T=z-X`i}SqTtTMsDWQQrsPvwGeg- zTX8*MX9E8fWB+7Y!fCO7_bT6Kgluf*u99mLcI>TcJbLB@V;|~QuLX@1e5$5O`I3QT d_<@agEkwvv!#8wbOSQMm6OG$SgdNog{a>ElW=8-3 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerSensorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerSensorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..0034bbdd52a63cc0c8ab898eecadf3aec870228a GIT binary patch literal 972 zcma))+e*Vg5QhKNw2AT1TCInA!aJ+jfJH?rf(UvOMW__K+{U#=YPM|BYTrt)1O*?! zhY}}7OFXr`$m~q=e>?wX=k@LB1wau?ItCcFdDRaTcY;fLq-tB@j^8xu!fMD{p{)Iu zP`oBi!=fxaU#i1Mr$b{{>kfYd7?QiL=LUNWgDd$8gLWV$Rxx1O1{UAF?mVH zIKyWD4q~i{G=}K3k%yzUlD;DwblSC^4mx7$KgCe&zki1`kqx_NqVC5saHaS43kp3A z#P#H1j$x~R4{_K;F0^5mWm7rg&<$^U@!u;eT=N#kGH7&YbODVr8X1Z@RTiy`*2L-~ zj0Z{vU{VY}gMeX*BawjCQK}fmkfIpE8>9|(#xv6AkI39p9_JG=-stcXnEcIWiJ$(- Y8-MaMnElP?h@bz-5C6$8e7IbE2N_-ar~m)} literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/Gyroscope.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/Gyroscope.class new file mode 100644 index 0000000000000000000000000000000000000000..775397e0fba1f9072bb8621707a682c73a95001f GIT binary patch literal 312 zcma)%u};H442FNFNduwKiZ@^?W#9%z5DQYfL@B zP-h1J_HWD9=kK4-F8~)9xpUw(+hruH_slVYJjQ zTGhIFQg_voO(68IY-7VUp?5l&6Ve;E-~v7D50Ifx7?!r-+x4nq|Dday3CE=~x}Ixq zqyKBB;n{YCN%>ElOG0t)*52^c#-m3&(DTTco z10#b!`?F>1=dbUNPXOmAb0mZb*M0EZghvhMUyZ!*YTb%iyJzvHvhzilO4mD|BPEne zeqz&dH#c|nQkp;*UfRxvE5hJ-G9#qd?m-F+uscGAAz@tEPHs1=TKqlNtq=|?*Kj*y zZ=?ThreR@w!fEwypbJ7VbsOKvjg4o^Kd@(!Gd+S*>9f#Gkw!IFXSN>5PTsNeri}!J WY8*os_EbmPI@7$bj&PuwVEhBCE=x}U literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerGyroscope.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerGyroscope.class new file mode 100644 index 0000000000000000000000000000000000000000..3f391545d6a6fd08db4f98744aab74d657cbfa1a GIT binary patch literal 359 zcmaJ-Jx>Bb5PfspaeAT{3wtVr!i}-i*pOgzF(wfDy>kdl4)(Hli2N)o6AOO;KZ-a@ zj139JyqPzjFSFf!{{XnhWsHEJbXL_)=k-*~x{cxwy(kM-rCqaAsa?PN;CbV0mD`eI zgoN(#q5oz=^U*9#{X}To^d^LGVBa`F1E(!SXcF3~S@O$jk+B==tYE@bYI9vov@@Rn zCBu4VD#BfQ{P2O=2SPHkE0^=o_~q9J9k+A+uF-)gl&?TMd1ZpJFtz7E)c?ZCrz8R- Wg1!tHI1_B`<4F9uFv5jkfc7uu2VB4a literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerLightSensor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerLightSensor.class new file mode 100644 index 0000000000000000000000000000000000000000..d7774f1f43a57681eee7190516b78567b3bd86f9 GIT binary patch literal 367 zcmah_Jx{|h5Pg>>4WxxuOss5_fvDq`hg~FS6MD+je7jl{?Cy0@G2uknQdcwW zOwhl@*w0Nv7^yv1|8+bjWK+9xB~MH^{`8+$T|Voz#u>z={0<~ja3`3G%C{OwF5YqQ aCWQ!@U}!@YI)dFTPb43SA{+}w==}iLieIDv literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerMotionSensor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerMotionSensor.class new file mode 100644 index 0000000000000000000000000000000000000000..e03d7b9536dcf1766a8a1982ed52dd57aedd38e5 GIT binary patch literal 371 zcmaJ-Jx{|x41G?Mri4NfTgPst1Cf9Y#Dc^W5K>Y1OEBV48dsMqg`dTQ#J~^WMIX+9@pQ(3x-uWi^r+|+dZY+ejTP@VcAsHdP$F;$kYIgm^~(0kWJ YgiJA%p#!^${dJtE-&01|SBx literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerSensorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerSensorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..6b4e3b0c3ab16698a1d3a336dae6e91a5cbc0912 GIT binary patch literal 948 zcma))%TB^T6o&tiBBi1NiWj`aok*k+;tJ!&L^su#U`SjJb(9)l$WTPyN>?PB_y9hX z@zg3-Ai$#M(*9rnGnw=8`T7o^fSm|t7z(`7auv7TJ9?z*n&OGqn>ArJWk)E}lASBB zD2YZ(sxw~`fyR&>5B>ufW{;hQGU_mZ+b{RQyt{P0bcL(OIRM}Q^c1y4~ zwKviKHq-EITEc1hf1(RQF>`BQ^RuGf1#QwOtVicS+5#2d~5qx+VJ9ClP?p} literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after1/Alarm.class b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Alarm.class new file mode 100644 index 0000000000000000000000000000000000000000..8fd439324142f98a550bdafcd7d0d9f3e87f4be5 GIT binary patch literal 495 zcmZvYO-sW-5Qg9FSDG~1+AqH?-l~TL@!+8%h~O!xQ0aY}u60YYk?mISXX!z~gFnC@ zB~DUl5qg=~*>~pIclP_|^9#T!Iu>#a%`k~$u0}q8FhZaBml4;og#tru!k@VxaW(dD zhZ7MRhSIrI(p)g)yGH|t!c{U74)U;F6j5TR22zQeSv(Z_o)06zP!E!jM+2^9TK`=Z z%%hw#w1ZV|_ZW&(!?m$dL*2s0KPUZ{sS&Y@2Abp|nUSehkQtSUf2XA~eWL}Bdu6m4 zD%mztjXlqEu!S89+YF5r{VsN~$6!6Bh)5B&JI7}G6O$mlbZ4iZ%ycNOWxAb{@x7FX zLy#f*SRh9y`VNW~RX$}#xp@46@@pnL6jK>AP@(9~8z`?)#jw5@KFeT${f272^^VOY Uz#)mKC{yziVlN>3q~>t&3nDIJd;kCd literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after1/AlarmOnCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/after1/AlarmOnCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..66c5b849c65ebf96818ffefff31095e3da6329a2 GIT binary patch literal 554 zcmZutT}uK%6g_uc9o@DpHOoq(H#KO9pqC;D!6(Uw!uN5Va%DeY9izV$^Z`Be1Nu?X z-CZdXALh=SJLjA^bHBbnJ^`GeDPRzqZWIJE96Rz}tN7Hp_GKIl!fw_TFbSJe`6wM< zh7ZnQG*zw^C=lvP!i9oR)DxAuFsHvnO8Xat!lf5_`ijtKt){ex1hX5Bm4zJEZIrM< z$hF$T5;%|zfg+*Y_d<0u4@N4!lOtadD*ecn{!qqVf)`CwPrMo7aOF$CU*%LnJt=pt z`OO_P1a=9vRrzh~C28_AEn`ivZlihZs-BkwsQ#bdNisSdapoMaJTD`O&ht0;T!O`Q zjZu%W!MoLYhut}TMfo}9Y;oOSEm&)!zzTs1qk6_h6*WezOI?ZGwwa%Kp7Tz8SM0o? Z{D%6Uqm`-?FDrGkGv30Du+J(32R}e7aA*Jk literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after1/Button.class b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Button.class new file mode 100644 index 0000000000000000000000000000000000000000..6882e474b02e8afcc4251c864e31f5d3d4d895d6 GIT binary patch literal 624 zcmZ{gOHaZ;6ot>UrG-)+A|Q&7xZ{!77&j&u7LvFky3nvMWt0+VO*>WpmWhw(!XMy| zGTuIdhUlWxId|rK_ssqLdj9}$ggp%sL(TRU3(K9D*0tdNp?Mk#;kgoadV^B{V*Aab&X6wI8?Gb}A@FrY`jJyF227}yck905; z4U~|jegPNDex;$~^7C*p=Khs6o^yuE(6g=i$nu>?r$t3foq%CuwQ=&YUXJiJ0~x4< zclrGiuig4Q2>2wAO*A!ZG1UKlpMmWttHvL=9SVw}UwWZ$^D`&Plu!B`M8m^AHIr%D z3{upQb~5cXWNFQjI-|Nof4%ccU-t!tM^X~Xv=(D$1`7Fdl^8TS7%A&G)=|DERNv5GSmha%tq}7fPn0Oh K#;`+5!tOT%wQh|7 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..6334abba7d0baaf60fd5c0d4a7678bf9eda30ae2 GIT binary patch literal 1053 zcmZuwT~8WO5It8|7FJXcKLF8cZ3`$uvGxnwCY8kafcRiTLi%)pEnNePS(g5lp<<8EXGc#w-o&ELa$4>w+@K(oyzX}1ekjT^J+3IyI+w&i{h@MW?!0e`vIG7b0;3PVFcV5MT&W_8eQn9e8J z=$Hblm0nYJYSOWkKe_a~U#-5tW@T>kQx@(@%NE$ke6HM+xON@OZl7jrI-&xxsoaX} z-WrG?q+?AWH79yym&dajh+#u9-V}&urb(zmUX#SEI%fmd?b!z6*i!i^fvuVRNfVY( zxScQ_DP{Cq$L#mbmX1AvwJCNVJJRVI*j4182yD*_KVZL)XR3QzATiV3D>dnz4dXy@ zH2S7HVMS@B)28;ZIm$BF;qV-Lt|kIYD*T@a#hb?co1ODEJgJIvUU@7cUs;oCZa(vL zneh+;%O2oC!%5X+&UD=yI8F21QcJct-rBs{73_iQ$qfe<_{Fv4snaXa3R>-8h~RfG zZ17ZJFkz8rcnqLjq8Gw4R(PY5e-oi>b%aQL$gLhBRzDnK{c?nOJvT(MdUS{F5q24U zT=I{wUr+dlcv{jFAfXXa3M2x=Bm%iRWW3LN7J09~h9LPwc_!I?hj(dmIVPL;R=EcgIE z3NcPmE2M5_Jf4~3d;R_M`32wthYku1jVMhLt_A^rG(w*TAy38*N({9Tf965V)iCJv zM&^s-s-gPVnpJjfpt=mW+bW^=0ar}+-s>!*J#0$b_E*@ zjx}@CQ69Fi<6xWIE|~SPi#-}1+x1uxu{A~J-iasGuxH6Tm4B1T;d+4Sin*6IE927eqI#N37a$dDDAln z?(E@srrcP-AT*YA3k5;MQdq1;EuRyN3or2EOG2}=lF=Oz^nN%|CJNZFP(qnd z=yXRVa2g8&MMA~#0(F)6V-?-V@mvwAPUy<{NJd_Y7ezgudJlxdRgHeX$(e+DQf?A+ z%N^_rGzqm8;VtZ?S&TS|f?+@~ufrsA)xgX9{~z6PIyJO8ae>zwFD(tulh^oOg30?j zqXA=$PqX(9t9SH@%5%oq;=RmTuvUk`3V|x4M$SeJ+l*M3xe~k8nV)-}@k#tv?7g7! YhQ^UrG-)+A|Q&7xZ{!7L^mcF7LvFky3nvMWt0+VO*>WpmWhw(!XMy| zGTuIdhUlWxId|rK_ssqLdj9}$ggp%sL(TRU3(K9D*0tdNp?Mk#;kgoadV^B{V*Aab&X6wI8?Gb}A@FrY`jJyF227}yck905; z4U~|jegPNDex;$~^7C*p=Khs6o^yuE(6g=i$nu>?r$t3foq%CuwQ=&YUXJiJ0~x4< zclrGiuig4Q2>2wAO*A!ZG1UKlpMmWttHvL=9SVw}UwWZ$^D`&Plu!B`M8m^AHIr%D z3{upQb~5cXWNFQjI-|Nof4%ccU-t!tM^X~Xv=(D$1`7Fdl^8TS7%A&G)=|DERNv5GSmha%tq}7fPn0Oh K#;`+5!tOT=!ETZO literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/command/after2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..cb728071cd63787b3b7580980c0def928ac30742 GIT binary patch literal 889 zcmZuv+int36kP`f2Bx$Hv6M?|ZAFFN#%g`B#s^7!8rz2&65`VV4mb@A%`o^wet|C~ zk;D)1qm1h?NE13Q`@Z+uw?BV>{RZ#`XC`6-TbdFXOfHrAfcbQW>8a9WLtId#a9Zj+Id4{4E z%9k@#TE|oDzB5Y39iEnqlRG?{i}zp$NU=zQG>IGwmkCmZg*qW^f}RsnH*y|=;RRk& iOW_1H#t7zAafl;MR_4);DaC2Y(SHhqew)!Ty!r=po5m#o literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after2/Command.class b/java-oop-design-pattern/ch8_ch14/bin/command/after2/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..27cf461a6971bef11bd3d776f12ec9bc1195755a GIT binary patch literal 134 zcmX^0Z`VEs1_omWPId++Mh3Cu{M_8cycGS!w35^!BYkHGmz{xykwG9Uu`E$PCowNw z-#;lUHMxY5fjzY%HMz7Tm63s2Lo19Kq3*{~#MRK{K`N39*W=N|K#8F`=Fi*>xf;3M z!C3ey!^*W(GQD9awom&ErQ3KYY!qQRC}V}8;z=d$vuGfaM?MGzL(PkQ9`<=6b^Ui) zN}uGEq2c9>?$DGpOH@}`sG??I%QO{{gE}_JMVyhThBq@RWA`DED($6-;8DlK z7K5ReX?B&39qbv{rEPPx4)$?C;)!k#6%pHW5)S)z=k3hw?ECrs`UY@;rhq|cdf|L7gOMZ0v5L+eSI!^%<8e3Z3YdiLseG2s zOa>25e>hcMERZMESA+`%LBtcKT?jRIg`?Y7g#5K1`0)*)(OS!B4+v&A94QMqY}qKH zM98(;gCaPM4S@oo?D~PaP3A)t-OJ%j5h`xz$=N_gzQ&8D8BhEt!tuI?mjC2XLcJ(2 ziTTYv>vouK-EdS`lYIN{JaUK_j&ot>v|@VN+! z>n5WfV}p0A^9j3i`i}Bz%Gu#sVl7x}BF_qe3Zr_)Misk^SeLpIyVaPVd0z5Pd{^ka aq5OgR($PxQ+RIAa?2NZ?BOJ2Iz|kLZm2Zat literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after2/LampOnCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/after2/LampOnCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..ca6897b62d4a858e460ff62a11b37b853d87b1e4 GIT binary patch literal 548 zcmZutO;5r=6r5LT7it9sK~yy12AJ4H6E7MsB%B&KXt*zBl@i*T+8Y0si64mve}F&A z_}UURgu{N!+nIT@@9X>H6Tm4B1T;d+4Sin*6IE927eqI#N37a$dDDAln z?(E@srrcP-AT*YA3k5;MQdq1;EuRyN3or2EOG2}=lF=Oz^nN%|CJNZFP(qnd z=yXRVa2g8&MMA~#0(F)6V-?-V@mvwAPUy<{NJd_Y7ezgudJlxdRgHeX$(e+DQf?A+ z%N^_rGzqm8;VtZ?S&TS|f?+@~ufrsA)xgX9{~z6PIyJO8ae>zwFD(tulh^oOg30?j zqXA=$PqX(9t9SH@%5%oq;=RmTuvUk`3V|x4M$SeJ+l*M3xe~k8nV)-}@k#tv?7g7! YhQ^@6HbjBG~Bmkl@huorS*TA_>p+<2l%6m zvxUS&IqdAb*?Di??tXoLd;&Pbkp+X$3F0UcYU=v(Ax`9}d!40etSp#>=3G1pcOlfH zJND-?NC{Rtlb(o{O!WRTb^U@+x(rpAUJ(v@+gth*f_W29rHulr4lFo?La#rmfKYc( zM2XPwLM3mr$d}2z@E4NM^5Q@&CL#$n-W1Jr7On{0f0NeNU^~__k*k%Q+StRsg$|*; z&A5ZEwoyv6M2!`}zKgRYkfTtKuCCQi^n2i#T^9HS35K@HnZdb*GRF#|5o3dQd+^R{ z_=?(d-qYY%&zVJ-%&Rb`$+gb98#`z*VqUIFthNhhqj}Cd@mYEBg4!F}zlwIw)>?M1 PrWxF~QR7cwWZ>`z#r9v0 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/command/before1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..4a692c97a7e46c1a19cdc0749e1c1a71413da592 GIT binary patch literal 635 zcmZuu%T5A85UfFPVMPHE#P{ohkGL@&F&-rGwCX`aV!SxOh-3C)mc{?_B8et`fFEV7 zaZOBgFWu8q-PP6IAD^%901mNbAtO-lg}yI?zSC8AVWbY6wx?APTgVEOALNsCJQ)m} zi|&K!#R8K@I?(a4z(jMqBam%}ePv?;g(7m86ezhmQ0F7RtD-B}^_0M@8}_8vk&!m> z&u2Ei*F%AZo8G-eW?$-n@|rj9uZqh!(!rp$-LX&+nEPAoO8?PD83hY-DU+Ry;y4U! zR8co-=LHs;{{$EgHZWNWMJ$?`tj9>jZ>V1Hj!`??dqLxuZ5CN(<&Y+@Blm% zV%9;4kkZWT?96=g&wT%UegU|^p@jlNGfd)`tDzT&$0QZ!p3mcng%U$;%%8azaW(RK z!B~WvVdY9HsjnG|os$7W=_VNp2SwN}%2;8j`cjFzEDl8az=KFI)cqvn(SWDY#DAY9 z{UoOhZGYM9E{)Mys(Q*s4Rs3}|D^O^rdq@<8fcP?BqLQVKUXRf?>?1E_jM|G+^wL^ zV3}=>ddk5Tb}Vc&G?vu5*u@?dPfUBHh}fAS^W}*r)u?M0cKS({hT>M5)ojB)GdLWB zw9rw30=?)IWG#w3@{D}>^aGXGJnfJ*X;8x|S$9@IevKlA^?CDU4g>5rRO_vGY%Tx} TrHG0O6)zz69I{W@0uFuw)M;TG literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before2/Alarm.class b/java-oop-design-pattern/ch8_ch14/bin/command/before2/Alarm.class new file mode 100644 index 0000000000000000000000000000000000000000..9bf3822103bdcacbd5540e7273024dcca9a8a6c9 GIT binary patch literal 497 zcmZvYO-sW-5Qg9FSDG~1+FI+kc&i=~(1VAHAcCi$LZ$ajy4EepMz&kQpQQ%{5B>mu zlsHMHMd)Q_XW!Xp-#`FyC|c=P!FUMH`62(`ksfeU}y$u#Nz?iGOPbC zOXg8d7&^hy&wC8ziQ(GVXrO6f?VpwY%fyJpMGNa>Bb}0~c91)jseh-XGJT^3PkL2s zFx2vKq#Aji=U@}t7Pc5#OZr{xV3)yq$`G+4YIlas7eGvc^s=Fyemd2WxR%*?PR{o- z9u7f#heHq@_ zSI$zoDZxk=>dcpMKO7p=np>pDdUV2Ix4FBPbW(55rnky3})GP>Cgwk*{tAfz5 zP)3E&oO+?UTm_DbZ=~ZZLVFsy(x1uL%W%=u(}kB1`oFGPzl8IM`&cE3nw#jLC(tEy z{)}#+pXDegsf_up=5@4+T{ZEtt7~hw{p?Gy%PC9zi3BZ+%9X~ofWdo}(S)(ar#XJ* zwfBtrW6o*v-pG{|=*+LOqQ$-LnvDL=*RC3f3{Rd^opNjx*gPpH3O>)X*R)B?5K PEmJVBa3gFp(lGb}4-a6^ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/command/before2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..91714dffa242b3620579c4bee0a8e37aa7f02be8 GIT binary patch literal 640 zcmZ`$$xZ@65Pb~;0|Uw?i@2f}P~#+e#F!|Fr%?|W65_=MT5K|l83zB$izJfx0e+OR znlT|!yi|2{y?XVk>htUU1HdWvbwn6Sea~^YJ1~3V(euTL*|Mc@105PecEn$}X>)gI z-u6bKA27tvq$`7ShG@OfVbEIMKp2Q3nMMq8hKwa$aWipx!oTA^TQKA;ug~oc_oa$| zKDFRUju|S}^6pJycDQs&Uj5!$sAvbibcfAGM@NpK_`CSR=DuSfi=>XVC8J$Vg1~bP z6i`xf%M8`}9|dy~YN253X;jrz`m-;_V=*9E+#izg!V*;sF|GtKl>Z@RNX-$Uj%DMA z85-YcdlSDeuB2LFD!j?DS_EpK<!eZ>TKT^3VtsLxOm7R9U2#V%`m_v4KsB W62!cPZQ{-mc89V`YK<}x?0o~A9En2! literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before3/Alarm.class b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Alarm.class new file mode 100644 index 0000000000000000000000000000000000000000..3baec0406320a56c7ba29e951e09bdb9108dc95a GIT binary patch literal 497 zcmZvYO;5r=5Qg97tF%->5b@i1Ll5nNg9nU>G4a%>35NT&thl7@nq@KZXX!x`5B>mu zlyO=N#DvSt&c3tHzBAuHpI-oaII>V+Xh$kZcslY!@u0Nm`Ij-*iG>nFW5S=gAMSep=RW&9pp}>^6#`v&A@2ElYSLj z47Ge5nT|crbFhtF3p)(075y&uu+LyUWr#Q>YIly!7eGvc^s}Lzftu+^T+3`cC+B+^ z562)wv|6A*C)x)^iz=Toqg+1yK=n139g3L@dQhY2&KoGNQN^&nczl+_0Q(K~X8RqT VCBPwxsHjr&5@IhP2c#Bo_zRJ~V?+P| literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before3/Button.class b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Button.class new file mode 100644 index 0000000000000000000000000000000000000000..2b79368afd8160c0cb3004985998af8eb5eca289 GIT binary patch literal 1282 zcmZuwT~8B16g|^!yL4Hk7FsBRd|0t9Ncj-IK(rtPLJP(c2;sqO+f^3ZF4=B*_2-cI zgeXXi;n4?wlzQ)MBMBwV&dj}Y?m1`fOn?9RaS31sD=K^fv65Y_8ntq!Xuh`{b0)Lc za9z8mLJq(9?pE8w6sW zyj?bL;^90&MiPacwXLPqcU#%T+;XC+mT3A+c-6kWHG$x~RkPd$fyrcxpfuHz^=zcJ z1(YRH)8NN#9UX`W_>-ya5Cpn)1Q6s^Ooxg#fzF&&GdCL5qUmfI#R_?kZ;PncSw4K-bUpj=R>Si2o`t(QLeR)#Rdz}}bj*6)ENkRxL`OUB(N;3G zx2EAf9;g^4)7S5W*>oh4B30WdTQ#F1k4QCRc&K9hh8k{}jtOo?&}}%i&6Bj7r0#KE>$-Ev=GG z2oZc<#|v&jAe+m+&2#3Zj#siNxorN8iba9Gt7p1l7aFDg70axYmmSA;ROkX)!EQJu zbH(B-Yxizpf@?5L*8KEmP~hXsrj?JcTF%sYAgr-(iJ)WQ7U4T7+9e#B^E$BByPCUzX!m!Tt1%}h#FmR5<#Ak{}>Ek@>MClu(&8~B# zkD<{jdX5b1`f+ut2(fk{jc!aKCiQiXxvBq%@B#RTLcwqwKhmawPej5(lc$*7{RQP@ z=K@bIe`@RLQ_PW@z~(WO9SRmGP`qIGD`ro~T9~N&k;MSnP0{Sx2}-_zw7~XRIF7)o Wilx8gP|(an7VA6^_%#81SpEmF_VcU& literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..514dacc50ebc92e79bf7d434ed9c0b1fb9d7a238 GIT binary patch literal 907 zcmZuw+fEZv6kVsZ9XgCsEwq5wqG($v1ENngCY8jeDHt(Lh)<{Ou@0FFnNIx^KSUpB zViP~Wk20<^Lqb9)lk9!YzOA+Q+4J|`?>_*J@Wwz+pgIhFUj`$4puUEYIOvewVf3k4JfRvkA`CsTi*qR(>R zDS`V=IFw#rMy|eJ8}soucOtOiWTSUj*_UoWdW|p64U4lla)WWF**9=cVC{CYBmGMg zWt0r839R3CcRd;TCMw!r%jo?5G>*f-L=~I5n=OHZ#sWc&(OIx2rOB&=hj?t@Q3kml zCuQLYp0YQm+xtiY3uSanM-$k#@C?rdjERc1QDAeCN)p}d>-ZNIUh451myw!G)JXGa zT4-ssLf7ej>Je2&W6r#iF;F@^_LW5`>6b;M9-csLfpgkAH)D{DFY8g$!SYefvv3*> z)dyEE#!9+r`}%oN2Um(~3FLUN~uZa2Knz z=;R;B^8*g&D4)-`iE~t_*L!nR&v*A`*f?qb!h zG3%g2NNHwvc4of$XTE&6Nlo)Cg{>;6ItFhM) zCL&B3)~=+I=`};Kb2els-RO~UP=xKGj5UU;FO|5<;y@%1JctBC-Pa+HhCGob{`)MY zPjbf4_E*jB(U>$#RA1Ssp>AR8pOnGNEETbf2AU*8XQZm-=Srpa?h~ofL7E62_bO;J zSZ14(zH+dGJqx=GjTN;n_HjVPQ_~(PB6jA;e0kzYHSU>(oq^7hP~1whnr+w@28UCS z7CI_WpckEjtVNMWo{=w~f1vW3rya5;4Qf~?>&^?vZ&1XrxoE!3VSxRHYQ6Q2?IpmW S6j4#3;w8jhKn^Kez|k+-rC}cc literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before3/Mode.class b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Mode.class new file mode 100644 index 0000000000000000000000000000000000000000..b146389e2bffe36e4d2ba8c5530ed864158fdcd1 GIT binary patch literal 953 zcmZ`%-EY!R6#rcc6iVF?H;`?9PX#tXv*-(C87`PCE6i9&LVUV(9d;?LDeV&eD`gK` zG%h~-M;Xs;a5M(`(0k9h=l5~$xxfE>zXq^_s*D)Jis252+&QWB%~RJicWQ0-#FPJ}P-{8CkRh%$+wU3j+B`^|A<@*DAKDC=R_D0A*==gaEuEq8X;FQuVc3>q z`MV5KsoW)jebP=Lp@3moMHaUil8tFezNF0z>Aq(T z?y5*3O;noYn4MtQH@%O%Z<`D`%{92)<(?(tFsVSoGFk9HTO(3E=XPMyrdTR3@UP$@ z9?N*dkd62nk9>2e;t4hx(%kd-*l@p$87fitNBuL?@aqSWhW@3fBL+ECKRW#nHf_2* z|2{RF7!g@XUOR0n-E(-3>g$d}oPE%DfGH-*u{@iki`_fy4d4 zqmwARKsM$(+O6-sq%lbJ+N8ar7!g1#O$W%XiP_LeoK^)Hs#7WIP%OUc53pYDmUM}w z3*^FJB_0N=iJx>NO_0-j@d;M-3lzQ)B8DRUlf*-6SPL^EOOI&E{fhF!i(J{-xWxK= zkQx%m*bpYk;62=*!rxE>0-m3s&^weW*S&^t(w5e*@L>CEC^)mgZY-o}B+sTC6*43Y XDmhlU!t-BXi*YejLe4F0hwF>K6&}TF literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Client.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..7c6deaa31b77ac0bd3cfa71e772d0a212d3b2015 GIT binary patch literal 1844 zcmbVMYfluE$HkvHym)W~>=bm%!ojdpUpP#<~tYBM$i(#&)S1Phrit{gWtS7ognKPsH_qRHUhP&CENFm#0@Ck*baUg80C!5@SN zUWVR%MdOFHN`V{i2KM!$te(h*BL173Zu3m3GR*IHBqmKn6F0%wF_sY9FtS(D2GWEg{D2?g;8 zV+=iVsnq6RSPMI4c~_a0(*#4xK}(KTO+}MUMc0n$9*e@r+V>m4IHp8$(+un3-T&0^ zm?7q%p{0Jy>Yo5+Fe_;17^04uH?>l_B5pp2uxKLb!r;{^FG*NnSnZJhEx)W$HJXTi zEMiGQj3Mk0pHmFGZb8J6phn0Yy+34Fa4OhMTsnXVmPN`d3?G~;-41l3XjQh^X;dYW zCmUsYIfM7S1BUM6O>ZX|RyxIRcPqWLTNuj>E?!|sbPCiG$}m-GcV_cSlHzh&Pmk`! z3A7nTl0vt@>@Fj$9aYy2hPV?z8AZOMh>6&3kJu$K$f)aSmeP0zTx8Jj}#>2D46<=u6f!NTy6anQi9FdiPpqSqLWEz;7!c-|eY zV>0D#U?v};fF~(W$a9US!sS^MF0bYC3YQd;ELSA&`GIJxj%3Pbd40m`5BbU4R-7SK zlm_YZVgNpjku^=~=16sdG^fe`3WM0g5Kd@}o?;XVLNIB5eZ_>8=_flIJj1G$=_S^% zPPq=?4A04O5$Z?0K#D4pz#GEcfScA$yhMh$_o$qkwC5#;Sz^mjl@#>jHSPI`$%`%8 M^Alp0@LkCL1qDP8;s5{u literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Command.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..8f851bca5a9383a7a95cfd8046ca37047d9b981e GIT binary patch literal 150 zcmXXmC=Rm;fkVMU9Tfn(^~6l3uE@Us=>giXf-Ys>zoPi-eA5|oT$QWU~$S6>LL gb4b0Bc4lYi%$c+K_qJG7ObFHHkh0?e zxB7R{K4G-;LywcDxz!@rb=8qBGAMW$MUjvxZ?*CuOnAt{HQtm5 z2RTBa8OHLo*KNz>LbM~vcbX~?QA;GDi3f+az7FpQ2g3;cA~+B0$OjqpG*er|vV$eU z?w>XDu!2=W{z_?e5-G*X+vSFt+C5jjB#?($>$l~3zb)lR~Da9s%$@F@-e+Q&2|Dd+bmm$0dg2;JHsby{W8pAjw1$0 v;VJb@LyH^Cqc~_&OJl&RJYkYo=>-cvJzUO$Nf}xO+mJK1kIe&fWMTaayh_I? literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..f424b1add3846c21cd54c634e9810019b41e30a9 GIT binary patch literal 1077 zcmb7CU2oE06na*DC2oMgx;92Ui7@@>p9Q)`2FYmC4lEB$%ruIbZ0Q&_Ho(x!Uw08Q8p}N#68FD z`JU(4o3Pbdu^`XhIRByJAwmPpG z?YhQL{CFLRL{+y;+w^J-QZC;i%zfwBNFb(wVMRp>HyPs9X-Fp5n6uVA*R=bU!+a-6 zvA0yj5KllBN=Ai@xOm-BkwB858m4VD{Xx%g-}9bjFr*uf&aDo2O`!)y1rk<>g7?`R zQq>W+e1jf4x%@SHQt$weWISX@g}9D~o-t7I7+VZU?z()eJEvoscetZg?}QdqISe)V z&qQ4^$N{6)Cx%)$Z90hj;&T^`=2SdEp5a9pYTx3+VI@?5hCS~^TnjB<(H!5^jn}3a z=JM>eN+OVY)XcukJ>Ml~HH0UUtBVt@RrYpiixOSAw6`uc43MPd0;#N6EqS6O6)aJl zO4>Wp#aH?P)=l4#&ar%kbfDah2FhyeC%L2v(pon>&P5W%Zki-f=-lP< zHj@T)LTxPO!U;t9>^!(*=_Ldsrx03$HNf8TzAM7kwIBM)4WYZSsXZjX(#JMJj{XT^7nA0#DdLevC9VvHXS*x)vIw`AFC^k-?5 zCYtyI{87f)gSKkx2Xo2I%x30!W}cZJKfitl(7+=L35M-~3<574y8OKtjD7BMpYMBG zs(z%k4Bef1*pi`E()YQtkYZTa^Y%U0_rj6;qQA!nnjs;E3~ZMnGl*2%mr^mLpNLTC zrwpmeZna0IC5PNb5{`om&N3t`)m|11=Nz0tnruge{CO1gxq9XGea=wm$bskgJS9v# ze@y9jV#3hq{CD?FhU`dc88>K{R~%SKXK@}EEnN6xvhIh8=7ED%tWl>jq9Kc&cyJ-z zmr8`Xs}=WxriDukrDI9xS%jl!k?@CHWl(0Y4|OcRv9XRTX8fxJSDE3(Le8q1)t4@lcoJ=^mF2P~8CCV%R*5>Ysq7a?62> z+q6$DXRR?TS5EfOv~dS_Ei@RGP7%k!Ju|5_HhTFXLvF|?T7;e!k|Mh+BQ@Y{VRl_Q zRO$HIwhSaTXi-VJ+5~-cC$UFci!C(>vq+nwcANp&wFBg8t6z}+80Rd|KOZBck)nNP zsb-PhRw$pcQNR*e;~8{1V=NzGj;O+9)eT$WL*tP?@4eev$ks dHmBJBo7BMOP=oUuY5j<_j{9@c2Sk&=!(SnP(;@%> literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorManager.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorManager.class new file mode 100644 index 0000000000000000000000000000000000000000..86230ee28618e65b644245688697acf033f8e224 GIT binary patch literal 1398 zcmbVLTTc@~7(KJCtX&pbD4Df)n^(YI-LQkQIZbh}IRKlx&! z5;QSB`=gBC>@HoR4_030{+&7J%$c9RzJ3R=ibpy$hNX_|^|nrvuISL=?K7-E{k5 zouRPjc6}a3fneDFV|%?hB#F(zCG`!$99egLH{4*zR~xk!b(_)=267lPQNTDuu3Bs9 zC^3{XK2L&xzgMIT6fvm|8U-*+nK*+HhGNt8#nY(Q7Qu7g_K59dQ+Bx5;(@E?>0&;7 z?UK;tVVS4)5$R&))TWGl@{Tna#<=5T>KN9l!y;!@^;&BbmoTs6GQ)VLScx@p1y{)s zx`tu8nmoXX7p&J_F&G&&hSgILAa#Lw8;O2+92*K)wec^cEjOSLxzZ;E2E9eqL=6^c z=u;Rwr^ae1Hx^CY#u6#-3bJ~dg7UX^9m@ zg`E`9j&rPz!5ZEP`b3F(;bdMKdol_-V#igvoH|}lv$dpNoSvDq(*I`ARG_KXX{O;U z@-(KfQ#(p4yENCRpRf*LTHjE7SvkbSXOut2$ET?skAYNS0VOJ&p|zQ$2k(@ zTp&n>3NEJ5TXaT2o7N|k7mhHe;YEgOBzr_+>;$4YKs0d;*JH#RxS1ll#3WCMvsPvC z5VtlI@Z1p=H2i>F`GS=UJ|SHs)g_`h5no{?#e*wmaW^JSfVhV>BBWyy_h~IhV~SpS k?PKbdms;+FYN1R~jsoQvcRtx2;A#V0EyZPc5LZ6@4e>fsWB>pF literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorRequestCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorRequestCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..80357cc3af7ba1903c773e6cace5d409fb76c2be GIT binary patch literal 962 zcmb7CT~E|N6g{_FDZ7*fcll7)4^Sk~C^a$02MsT%3CXI7n0+Lf?M|Si+hS=6f6K(x z#0P(XKgxKf?S{ZhHO+MHow?`SGiT=apP#<~JjbR3OYkB{#$y$ae0`zDr;+w`q|a5B zq{BSRlGuM+rJwYdT%TooWwirauy~@*l^?12$p1Jz(Lv^5MzC2!STP8iqc9~XOk#o8 zuR*<;*1i(VjVL6HRSA`Sfx{E1Bb^GK)e%k4^S(roZsv6uhuN;+aBIH~eJP`^@_L`` zfxzBNM!JOtZn~I9N6^^X9yB3Xa?wP~L@O>F%$n$yi#fQ0g?biQLw87CAI>deicyOn1ri zKfW5DS_es<2KrrSPTQLjT~)ke9v{|eRDrK%0o=mXpJ)L0nYf*ih{}nQVd^Q=I{Muyf@;>fx)hqGn;Vv^W75$`$i~_5O uOmCy?9y(R$-699Oe#0t9mt*-m?q7Co71(*|Y!{teB3WN`5^OND@c1t+A@@cA literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelController.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelController.class new file mode 100644 index 0000000000000000000000000000000000000000..e4e88f5dfc89a238bdb92a67c5ad6e77d4e58b26 GIT binary patch literal 787 zcma)(+fLg+5QhIr3?`0=owQI&k4P0tQmK}TxGLf%6#^+LNTrc_*Nw9(Mm`{8XkV)m z2dNi*fId{!e~kqf&=RjaJ3Bk`&0&B4`S}aL8dhx71Z!cIBr2T*`nyVwVjbi<$qF52 zX_04ftn;_Q;6SCRjtAE!8>w1Yb4T{O@V)VsY=11!$P3}%hiabaUl;0>cxe>h3TI^S30 zSo3C>g(@DYJTm9XXcY(1v0#0Q8g7k+T{Nl*d^&RQ7*A|03tmk#0T)m4OyC^rqT;f< z?v81)Sux*d-%@&f%ue!9Z$+ks#alJJF|UFZHeTl=*SI)`QsWf3*Ll-`L)qkMuk--? z{w3VLzjO|-|N0#5A7#V?$_^|_J~)>{g2(8Gv@9}`aaf>cKHp54RKX*(D*ASrjlTWQ zXYi~qhJJ=NfA0cIH#u5mtxfV>^5#pvONPmE#TPvP7j^P~s!wX0l+K;h7tB$^%fBVY BrP%-g literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelDownCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelDownCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..00a29a97a3eb8a7b1a1a2d19d85442e5e4552df9 GIT binary patch literal 731 zcmbV~%}&BV6ot<%l|rc^sNnCy9bjS;QDUNTgJDH*v#V5=4k>nyqw#khCeHDA_Sfye63lpWf A3;+NC literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelUpCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelUpCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..9d7dc982d40520c5aa9644c8eb5225c25df0b44c GIT binary patch literal 723 zcmbV~%TB^T6o&s(Dy6lGpx}Ms4luC^s4>yFX~K%=LSa9YiInt0YB9W)iI>EM58y)? zPg{ZsE5c%CdS?Fr>p5rU=lAOyKnuqj6hhMpeP09vOHPG9_M{a_Ka8al25}U6o{XB7 zJrqG8z3$k~q#9Jh)=0bv%M-zqb>AOJC)SWB)R&-T5JJhxxc2;4gp1A+fJNIiA%Eir zZhT9)s;xw*_Xw&T4y1t`HcaT)B;;!Ko(?Y6goXm4*l`1SH}U&2dK7(663U&>5nfM3 zZW7Nn)p+PW6V8`UWZqe>M3YnLOkz%C7yBCa2(1-bV&WjFK%cd^J0=(p;Usco+f5R$ zEZ*r^a-BHgYI8i+cqmEH{7@AB)?x6x&QY6Vg;%5T3A1tfj^b;oDe=6?Ua(h1o*f#> x991(lwz0zz`%)?~t-|_@dC4pBS)uWU;s>h#L?d-4EF-0vnQlfS9I{Kn(I2aMwzvQQ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..c4e363797d392bea005b5ded921ee3a224207f75 GIT binary patch literal 1651 zcmb7^ZBx@g5Xb*l+J=TGEf1A~BG`&84~-U3EKh2YamGp+fsWM|8o~i#(xejt__cgP zXY7n0z>nk$$Gx-$L}!REa=F{P-Tm$D-hTi2^&5a$yp#}P$m({zu3393|E$#;CRZI^ zw_UE=mh0H2$(@2)G7WCI62c7eBkfdEP0cz`E4xQrcNwBfhGn=b3|-k=l_6ZR_qdEM z#1upjW#}y%7T-9j?{a5b+ch~uU)k0*v#L3USa*bB_s}?Im@Eh7StMU|&9E4f*$?Fl zt}WLwtb@f|RYHOxbG^Cks*E^d5(XIZ*B{@s&$v@+Uz&`5Bt@LJ7;@PF=-X8fEX6Q; zy{FQlW?9@U`KgdGgrtPq428hjI}M+81fzoWF2h0)*1z0)=;I7?ft|0}XO{1N45Jb< zf!N=AHF!DjG-5K+c%UGQ92M0ucP}S`G8ZVMcG@TqVQfmlG-enQWXuoNdkhS<|1lRJ z@ts@fcvclW6mLUrh+?W(mHmAIR8Z(yk~pTfGr!Xi(s>1sg|w$56_-l2uQ>SH$*4uX}7k#=pGmc^)Tv;K!|44yJ(bXrP80#KQh@w_ZM$lrcrEz z6nbb>+6U-=gH|!zL@!B%@((&8{-0Wi*P7J&TIjD$H8J?6g&{E+-e_T@Hq*qNVz`Ad zF}qicw2-FL_lwa~bov|-tJ3K{^qDi2FMJ&TA%wMGV%*Bf literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/Command.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..79966dc5f756bec954dc9db4575d7df91f20a724 GIT binary patch literal 153 zcmXYqF$w}P6h!B*x>2$47;a-gk097u2=?Fj5tk%iLRR){79PMuiCMH6hT+Z3`}2GO z*kWc-5gMlo92ko3Nkjh6Jo)I#`MCVnIy`~m(b zM}Ms%Jv7W_VF94FBxZ*_X=ylS`$T92-F!hayHhm&WLrHE3w-K k^K;J&j>K=J_A9FIX#6?KOr3hk%+1PqGdIF6s|@V@0(bS6FaQ7m literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/PowerCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/PowerCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..a5c161b128327f8d9d8a28ac0d5471ed8fe3cc42 GIT binary patch literal 647 zcma)3%TB^T6g{^T3bl%$;(K9Y3}8ZyCT=utNLUdyk#s+liI%h-QVa51CO#4uet;ik zylqKj2a9=}nRCuPcjo8!>l?rY4h?98maBq5gacbnMKJQE9mzn&(p6y`Dc_gTxqYu* zWYo@R26V#uP)vmFi}2CD>kp+H8z>MOi=AdB1TCHrPP&T~J?Dy0xb{LXzTpz}026hO?%QS3ZFNvEUCC^SUAJjNU9nDmoc$ul2mGNe7gnd?NIQRom0GIp# literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/RemoteController.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/RemoteController.class new file mode 100644 index 0000000000000000000000000000000000000000..4ad941a64d792d2eb38622e83dab181d09374612 GIT binary patch literal 1162 zcmb7?OK;Oa6otQ|ik0M6N^ow~(k1 zEcgNZD8#*EKYsyuf=4C{fgN8(kr(f|^2Cd#p>z`&sZ{zZ zP7@V|GTCw8>B^v}n5YW04!tj)8+!3)cQiSaek$Nh)v-(l8BbtqcriK`KPR4l;Ki{F zKTZq4QeJwgj^mm) zFC2SG!27&dO%H-2fv1=7cs@RvZ63+=&3|FHH!nf@m$o;qL!jee0X2a(!3J6QBIT#6 z;I4e~bq6MD?BRxkYwW?&qZ`Ge{e2s^v0>tlK+nJMYUG9;+~wYz@! literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/TV.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/TV.class new file mode 100644 index 0000000000000000000000000000000000000000..b93641b96313ca908bf331733f551446538b1cad GIT binary patch literal 1180 zcmb7C+fEZv6kVqsn6?a;7AOb^h=9EaRq#sjN;DxULQ>L1eHz*W49=w)rd}TX48MS9 zjXr6)*0}q->&e{9S*=y~!&i?-6%Qpbac%&mHFkAN=$8;Md`POurwk-M5 z@d8=*+`#v2Tl!0-?V1ivVBo-fZI*1)-79VG9LRbgpf|lY(%*Ci#0vqTDY#q9&Lc84}R>^L3{?y3^!g8tN{0bl*Eicb2+G_>EHc7!^$Xx9$gQHin14 E0Q3^qGXMYp literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Client2.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Client2.class new file mode 100644 index 0000000000000000000000000000000000000000..4b3502c9ebe2fab91f7b2a8f3010e42721c14545 GIT binary patch literal 1135 zcmb7D%Wl(95Ir|d>cp5fZ6FX{1zJkpF72YAAQnVo71~OTB2}mh$GHlw9J_LE8a|0F zn?@oMAHYW;j$_kSf`wUl=3dX^%$+my^Vjzu0QO*NND0(ze>AeZfhoUOqjOi9YU=kV zO8K7cdn)i4O@A1#H`s|Da8lC?rsYSSv<#+%&Qxc}ep{Gz%Fql3+@drh2kP6r z<*(j!g%dXD_bj9WBEf%@*pIf^H>8SWp{8;wgmtY2b--}6{sov-nl3#1IP z%*&xi2|6~2xJk^HM640hq-76l*vI<9yBcBR1-4m37CZDTv$8y81yw$@#2hu$StWZ( IpA?$E0XO(ExBvhE literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Client3.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Client3.class new file mode 100644 index 0000000000000000000000000000000000000000..c83d06927929185c09616febef35616115fce853 GIT binary patch literal 1232 zcmb7EU2oD*7=8|v0bSkLP!#9K=5)gN=*Eo3VRkVRuh?8NLb4byN;$zUrCmxH{w;4t zB8iE&{wU*9sIWvY>P63c&Urtc=e!^N`Rm(v00%foA|_BW-G1M2y1M*g^sj8G`y;nA z^nKScUB~xa+m@c*ur2BMbWj8`m&UcB+lJHAKXfjo=?g5qvmDDm5{MUyZ2_g>cBP6q z(i#$25?F0ojyxUqJJM?z9a{>lH(k@P+lFTa=kQYTKU)KVO7lM`)d|-(EJq+$_}E-f zJNG@y>D7zvB-R9WqC{-9Rb-G(;;z7(NDd?Sc$%rkJX0#NL4^APdr=~sxg+T{W(81@ zLq15@Ll&hFDF?0g^ns5A^eAX2LtoCpHjod^Edg~P{ZJ?HDH?oeUysD~k8zP% z&SG1`^Pn?UX05h==E=c8b_3OphL^WgwNS-68(xp?k^M)R1!DfSKs4IS8tpw(;B6%4 zt-s660NT~9+C^^KS*hv1++P%f**|xOo+;m3!E9*Zv{i#{#uhkMoL3;m9mk1lk|&)~ zP$qWANPV5ERjz>=bXex9%?v2-@RY_1R(TUR|DZ*JvN1vCV$5lrAWM1gWP;p9X^aP_ z6Kn*V$A?NeuT*aEq2$47|MbvJc3|rA=qc*LtOGB;YIgs79PMuiCMH6hT)r;_viTn zu*FQFA~ZI7Z^Bt~Z~V=%mPc%}NDMXxNzpk@diP@##)M^O?nXNkF8a`RY=xk>XPboy lqt*IEm>*+KmiJdzqQ$?w8G1FLK;<5wvNb_HIH;l(reBR_Cxie1 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/MuteCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/MuteCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..c6d3a276f90a73aab841c3e7a0077d9d67e30b00 GIT binary patch literal 655 zcma)(OHYG96ot>FSXx9|tJe3zjp-wi7!x-dH%+>#y0BpnbfPrC7#wQ zRq)b%api`X3!iV$#18fh>=I7Ob!}lkt5}aXOfc_dn)qTEWHmOIjyTO;1IOG`g~tjH zEo+S*S>t^jCeN#^hO9MS&E6-hUjH49*W9zg^Ezk2SshhQ7-+F-7jA4~ixuZ`Dlu)F j{RQ)aSK@!Q-WwVpX#W$R&(hlO3BERk&0yyh}gcD za}f`6q5+*@W6EE+9q{PUzH_I-QwAyw{UTmV8wO3iFmy&mG-KzAp>pjE~8G4#`v&DBRv(}v)f$|}() z)6mlDsL>kjYcOeEBQzwe(Q5WSVfFg&XuM{eCe3xyg0wm+q%hDT)Xv%1#1A8WUS{TI<-DaE!vU!@9R2|;AfH$O literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/TV.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/TV.class new file mode 100644 index 0000000000000000000000000000000000000000..c349c5d7ffb47b50e0a5b8483b4244bb84984a56 GIT binary patch literal 1227 zcma)4+fLL_6kTVg(9Te9!~G&43JilV3SJpRg=j(?gak5)zLnts#ZEgZ9nnXBz<2!t zo-qQ6CVqe)rLNOfE`bNr4BmMk(NrxuTvTMDw@{Z+h=T|m%WjPSgtKPo!S6l({Mxee@3#3Z) z@{Z-Y(&6zEkLPUH4(0`t+3}Kqw&-ojG?HjCkw!xbL^e@}dKG0%=%^QHF50eqRjX`B zf8E+}B>xn>vgMR4-&T2is0BOro<2Y+dSXI)8R@^kM%CqiAQ z+0Lf)4csPjTsk|H#w4bd@gpj_YvLa6^NFl#Rl1u3{Y1XhUyM{x6%S23!Yt(nUPL3% zp1oW`r!_SV1|C!VG9x-=;0X((L}^T~c{RT*U)bt>_4U$}l0Y}~0Bg`*4=T@s3}lN2CP3wuLFONre4WXk;0}LG9AoAf z4=%J4DR1SBWY|O-M%jdFqcehw+aR!-B9f_wk`M;N!l@abVl!q=*%`E+nbI1ip(%4` srp#aHq&IxPF7kBq>%ky;DX$;X7&vFl%sFGaP-ncn+L@vOVM9-~1lu>-*yqzz&uSqzJpNY&M;sVT&iHdG8BbJ<57pDH*sjP@(jF z5!zRe@;J&>x;XWGkD zS*;N=71 zHbXoKx2?EcF?Bnp@;xtQJ9Nc~r<*yI(2Gs|)>vj|Y5sju{ISt!#Ws1)@D9HXk0wVp z&&2aU`3;5VNH)l0HcF;Zd0dhAB?=|`UTxY#t|mF-u5`sduI6sqwkm^^ynsQwY5A3|CltpCg&3=hv^iW{fjdhxG)eXcQPp=aZ*jpV9tko*k z${L*{!UU1{s*MO*i4@9uC^FQp_ze#du6n^~bR}ZTF#b_0X%893np+`5v8B7h#~3PA zlrYXP-Ihw64AMxL4v!MSFw@pCPeN{_iyse*_EPp4_S?A!JD{d1mx^J&`KA3l;JGzY z^$xZ|4|Rr}9CbUPj~Xf-W*H9i;BNJC#$oFZhdvsZcTBus*lXr_TqmT_9elBhmyXD( z(SCN%jOh18*QH)pvGiAJ?=eM$aML3;8~@>hpVnHTN_qEDk6~r1^OfPko71E$TRY#cSDrFWoe(ROM?ItWUHeKYrU<%W8 z;=p%w!xde7K<#2k;(I{j;{6bFpSQnbfxcHy{<-pUhAg2>J?doVsNy2^S)%%@)WLOJ c8CAtH-cVGg9j#;!s1srhZ?h+?Q>K88-+~C}5dZ)H literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/TV.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/TV.class new file mode 100644 index 0000000000000000000000000000000000000000..8a87b5bf7bc44048e66b768e47911188e6db8404 GIT binary patch literal 915 zcmb7?OK;Oa5Xb);JF$~EaY!F2<!i8$eDKVe`m7z*)J zaupOFhDj(NF=)+}$DltJ2fPFgmIV{VA{eR`@+c^;X2C##!S00#e?E;zJRSO@h%?lC zBJd;6PeT>YH+A_kJZ5lv|Ha>B$Y-cUG;r0x+J$KbZ;vI9Ev(}jA&V&uw$jUn4TZa( zhKU@=l>2el#0>^>U(LMPPfFOpmVr%%rAsbb*v2iTkjjrpl$GYJW+osN43ood%QJC@ zp*Sx&9y3%1(hpwk`IEl`D^X3fsMH>L)Yn9tC}x4mC=J9k4fxYgiDnGFT}6W}(pIAf z&(TLxXC4Vnt41gE3}j0bJ)v_(tL=P4+0nkBqKti(C0rp}hfY=_t5Z@QRr2e!W6jdA zgk_3ozVnjr<|W&X^BI*7Ftk(Xx~iOo)lXQhU;m1mrzk7;Ho2;u2GwqrT7Z6u8ZkDg z2>nc9*$XUt7G_w@1(tIG mYdw>$N>Db|2yTO59Rhhk(=X6E|DZLHH=kY3cAs!_*!crL2C1NZ7Y!)S9+K$^gEWiI>EM58y)? z&s3sDalv9P=kkA+z0>c`O(xGi*=P84HW5oOD+VdHhAK|Ddi|SXC){*q2n6 zc`5p_$4`A#i7H-$XM}E0&qil!Ed`G=`=B S7|XvIYW(@Jj5Q)^SpNVKp0W}E literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Body.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Body.class new file mode 100644 index 0000000000000000000000000000000000000000..3e5b9a9b57f4e51b8524fd6a2214798e6dd632a1 GIT binary patch literal 542 zcmZut-AV#M7(KJQ{0Tt!Wzj`OAV>s-(B-;LHKMMptI<1k6C^+x56i7{iD2lem{)-F*(&uWd!V4Da?RKLpV72_d%)^9jBa3wbv)<_DAW*cCL0Y2? z8!4n&>8P>1nT>ifxOaO)ZYXzr&mDH%KA*l@eqiHhk|HyHAz|=OlGKIqO#HtaN*t$ zaIK4^%2fFQ{)&EsAClwd(Y{U{`L3APXJf(QbUVCcg`(tx?8p{6V@wV zdRG$D1zS44hJZk5!+L8a3YN2;Sjuk5oG;LN+jeaKuE3Gl(3(JC+RaM?N6=;>h*p6U zY1@&DrD9fkt5&uk1;S}JXBE~g&sO{T$AJIZ-V*3dAJRTa=%Qsi0$s6}>HRTQe9v~) zlS6A7+F9OMO*SRcFc3nUhKN9CL(Y_&-!{;JE;VwuKrog{DZt)lfRE&M*0sF6fgW^e zI3>{20Jz{%5|=&u(4`umF%iXpfNACP(@I{4f(i`Any{_UJ0suPIZ0ls{+x+HoEOm7 zrN8X)`;OWv6}o65wij~WNv{pVxTGO|;ILML{&Z zQo|@M@V~rMCA*N9o{ll1DgsK;=(1`z5jBv&HKp8jg2tL1jmo%T;wEmQ^qH!>qbljIk!IM3BB;vyCMGdO*?hNV6M;yqv1!u43}!Vv5a`%p zeozw=bBda_sbnfRI#LHjP{%P5)$xca(cfP`{rU2lR<*o!y1Ao?Q#p?Ei&9Xa?{EVs z!)Iws9!F!6ax4?{H+3^MMcQ>L6SZQ^kpd?h!Rl^h+Ogfq>LwGUy8lfbw}7$Ymb{#t zwbftwXzgyetYpIg=q=tPKnvga=jW<%m*7+I862)a|F#o0xT-K%aFnZAOW^YucWpS1 z6a2zr5k_DK%D7#|y)veEWAiE&RI!J9vHiKnI3>wI zCxZxQ>*re>21d!`I%7#rKgs#$(2g9!_`sV*ah$L5KpG3&>3EMtERkgd1uWw+Me9cv hPq0Ew;&_Tx{sKh0hc!H7zd78(bG|9vGDK*>i+>dBWLp3L literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Computer.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Computer.class new file mode 100644 index 0000000000000000000000000000000000000000..6c75d15edc9c4c6437adca7bff1e3c0364ec01c3 GIT binary patch literal 1372 zcmb7D+fEZv6kTUpI?zrFEl{Xc0Y&TusEGGgyg*Dy3YuUr`s7fKFjzWdIz{~qU;P1J zd@)f;H8DQ>C;o)E&UB!}Skaf6IeYK3*4k_D`Tq0sR{*oPtwR$?RqX8@yKcF%U_NuD zGgFvnpusO4L4lEu=>@rKRir@JtEkDETNmgnZ<)Jhq2XH9LfNXjMS-3bYolhm4TrU} zzokp%W8jN(L#i)R7j5wdE?M22SBL+aspHV5VhK)vRq4?yqghid)P+p^t|?3ydAh#%>+C zZSTrMk&6ASfpNtYYUKpFH>CT(@#aW#7gbHhKo&WsxDt-(+KxanlRYxHML%AQU=q_h zrs!k4pM$J{0xob^HTjbM3>+XF?Mlt?qJeXmP)L^yT*egvebcNjdzYw)eRu7&^od1* z=!$Dro-dg@{-`|p_6zAKsFHyjm{1o~gp0XiH=K&RXQ@d?l@DsGr2MSQ%&Rrz9F!bp8SNFrzHkv1>WrcNWWuw0LqRe4WwO! zh$Dpr<;J;A{T}(KXI0*BM`Qddu8}lF>r`VJuJdjJ+CH5O>JVxwlL}3!$^MtT;@{*c ZUx!FLOwu9BNOh2R^PlC-QMiU%zW@VH2>}2A literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after1/ComputerDevice.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/ComputerDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..e4ddc2951eceb617c6e9a00517190a619c578dea GIT binary patch literal 345 zcmah_F-`+P3>;rBxo`v$k_Vu4K*0)8f@p$}kWPREO24<5u+ilfZT7;usE{al0FOd= zLmDcY8GCHYV}E^rd;&PdC__TnH*WFbmNu}`Pl5f3nuyRybjd4gI73Pp%=JpEO4l=W zTh7@8Lg(DpHe3)|2ZvKaI&qJjqlK*=+UOAag{}FfS(NM_bXhTBSU97rsrEMJ8!-*f zc1ai)|JXPqbY~pyyjWWAyxs`zl|3Q9ca1lEW#gjJ-wTeT`E(2!le-~E(V}1`nGz=9 l_R%}KZxSTP1!Fn3ZVUE)8-#Zdzp;z{ng@}kwkMci_yf0)OG*F$ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Keyboard.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Keyboard.class new file mode 100644 index 0000000000000000000000000000000000000000..1c10cdd6e61b32a42a6fdaa26fd22bdc4cee3162 GIT binary patch literal 554 zcmZutT}uK%6g{)MezvLErx{dlx(`Y8SoC59l0;AlJ&x;C6Y9vg8vUnUf+XmnAJC7A z?#!+)DFbuQ{W$j=?$7VnH-HmVGjJFxp&E?TSVp43A0nZT8&~4BtGMoE;4$nkw3{?P zp}`9=m7!orjkJxdWw3e?njw8AhcY^+Lao)RcNn~;>WMsD_&%~&WpHctP7Vx39~q<# zTJw=YnksEM6xWkMSLi$5?UO>etwP@Ka4k)q6usz4jv1=$1%q?{rwrLg5#7Z0NRSNL zLhLbrt0p=Wm(obA&Phkle9Cc1eq1_|Lyt^ZL^dh9)XBp5%~N(yeKS`KKCu#1XD9@F zGnC#fp-g`n9{qGlOUj`@v~{W+#58PRlQLRhu0Tr-GJ+1_Eo>(;4T`3h3O-PJBjC_t aBn00s^y7hKA;Zp6a^XL@xRhM661#t3!dPJd literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Monitor.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Monitor.class new file mode 100644 index 0000000000000000000000000000000000000000..a2c475643ccec3c3ea8f4ccba9509a6df5b8d6f3 GIT binary patch literal 551 zcmZuu%SyvQ6g`uqPh(r_yA{-3n}tPODsC!5p^BgsT&8isJ{HWX}{O&RJ-5I?bMd)7B5N2pg`8JXQtlMzdFdK-onOS%cPG zWRPX0t48vAI_%5v&hHPnq1x4fKj`_PGI?5bqGvS`sC5?%ruI(-@=r3lN!)QC{l$gE zV)0f_!$4jtv%yU{M=$=&$06O=ypY9@mSRMcj5a%Y7`H`c_w1XwviFG Xbd!NpkpFZkx%8i0UP|7LSJeIhjeJ*w literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Body.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Body.class new file mode 100644 index 0000000000000000000000000000000000000000..c077675577d15d47fcb1e2a6778822f0cc126297 GIT binary patch literal 542 zcmZut-AV#M7(KJQ{0Tt%Wzj`OAV>s-(B-;LHKMMptI<1k6C^+x56i7{iD2lem{)-F*(&uWd!V4Da?RKLpV72_d%)^9jBa3wbv)<_DAW*cCL0Y2? z8!4n&>8P>1nT>ifxOaO)ZYXzr&mDH%Ku*=yj@#M)L zU>|zg$Nm7H^#RV2bNm7R75xn!?*P%JkeAt+`R@14ckkStw;x`=0dNKnG=u~WmAzWs z+jIh%wjT!4pG_}T9q9%d!UEP~d&^E&ZFeJmz4Ta?1A*v8$8~}q1okDT*9F3hUPT(% zhanRYL(Z?V97*P;`@p?}vO4IwP~w)#{843I5ttcNd(R3gbJ4_A z{6yITuj?d%ShD}ntbw1A)37Ws+F`z16BEBEYFb^%RCRUacZr~`Ba_gvN=V|}i$CB0 z`xo78`x`X;=m0ab9c3w{puptb22lS*iQeUP^n;YC3DBSP{5r7Gj+qJ6YF*O`9PTgH zGqi$jc8xm_)-yF>2X+YbyeM-2-BYd*FbZD7FUuuIJqr7~ugpoME{=j0V%Ag(UuME>OcgD|GFnJvBB>Ki98JxrVItfaBWi5o+qo#m z={fBcPP8#w968&zf$H9X?xIME;F*#onUvYy1#PAFSW`tO=f#0xB mxl(w9TewYG=5ZHA)`}2une%%*{SGeRcg{3s|G`=z-2VuOeS**c literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Computer.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Computer.class new file mode 100644 index 0000000000000000000000000000000000000000..7a25625ff3a8c691c975314854a36307c02d3ea9 GIT binary patch literal 1372 zcmb7D+fEZv6kTUpI?zrFEl{Xc0Y&TusDk%ayg*Dy3YuUr`s7fKFjzWdIz{~qU;P1J zd@)f;H8DQ>C;o)E&UB!}Skaf6IeYK3*4k_D`Tq0sR{*oPtwR$?RqX8@yKcF%U_NuD zGgFvnpusO4L4lEu=>@rKRir@JtEkDETNmgnZ<)Jhq2XH9LfNXjMS-3bYolhm4TrU} zzokp%W8jN(L#i)R7j5wdE?M22SBL+aspHV5VhK)vRq4?yqghid)P+p^t|?3ydAh#%>+C zZSTrMk&6ASfpNtYYUKpFH>CT(@#aW#7gbHhKo&WsxDt-(+KxanlRYxHML%AQU=q_h zrs!k4pM$J{0xob^HTjbM3>+XF?MlsX#=tpDD5OgUF5`-TzG>E%y-QTYzPol>`oy9@ zbj39*&zH;{e^j1)`-OBARLQ^%OsESg!o^&%8%{;uv(%)c$_KU8(@HAFxE2Ba1p=Dd z4Zd}rG<5Sss}bfi!pL1#3BLPsdoXfe5PQ6bzK@8%_p1B(jCnXA1c}f~qyff^)*TEY z$&9!I0Xia{`2%8WrcNWWuw0LqRe4WwO! zh$Dpr<;J;A{T}(KXI0*BM`Qddu8}lF>r`VJuJdjJ+CH5O>JVxwlL}3!$^MtT;@{*c ZUx!FLOwu9BNOh2R^PlC-QMiU%zW^Qw2?qcG literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after2/ComputerDevice.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/ComputerDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..cc78943c9679e0a7b5ee853e733ffdf133912905 GIT binary patch literal 345 zcmah_F-`+P3>;rBxo`v$k_Vu4K*35-f@p$}kWPREO24<5u+ilfZT7;usE{al0FOd= zLmDcY8GCHYV}E^rd;&PdC__TnH*WFbmNu}`Pl5f3nuyRybjd4gI73Pp%=JpEO4l=W zTh7@8Lg(DpHe3)|2ZvKaI&qJjqlK*=+UOAag{}FfS(NM_bXhTBSU97rsrEMJ8!-*f zc1ai)|JXPqbY~pyyjWWAyxs`zl|3Q9ca1lEW#gjJ-wTeT`E(2!le-~E(V}1`nGz=9 l_R%}KZxSTP1!Fn3ZVUE)8-#Zdzp;z{ng@}kwkMci_yf6pOH2R& literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Keyboard.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Keyboard.class new file mode 100644 index 0000000000000000000000000000000000000000..99e784530785b047a7e37ccc0c86c17b7fecef38 GIT binary patch literal 554 zcmZutT}uK%6g{)MezvLErx{dlx(^BUSoC59l0;AlJ&x;C6Y9vg8vUnUf+XmnAJC7A z?#!+)DFbuQ{W$j=?$7VnH-HmVGjJFxp&E?TSVp43A0nZT8&~4BtGMoE;4$nkw3{?P zp}`9=m7!orjkJxdWw3e?njw8AhcY^+Lao)RcNn~;>WMsD_&%~&WpHctP7Vx39~q<# zTJw=YnksEM6xWkMSLi$5?UO>etwP@Ka4k)q6usz4jv1=$1%q?{rwrLg5#7Z0NRSNL zLhLbrt0p=Wm(obA&Phkle9Cc1eq1_|Lyt^ZL^dh9)XBp5%~N(yeKS`KKCu#1XD9@F zGnC#fp-g`n9{qGlOUj`@v~{W+#58PRlQLRhu0Tr-GJ+1_Eo>(;4T`3h3O-PJBjC_t aBn00s^y7hKA;Zp6a^XL@xRhM661#t91XyGM literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Monitor.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Monitor.class new file mode 100644 index 0000000000000000000000000000000000000000..38e825bd5bd9003603e8ec7b0ad2fdf0caeb3de5 GIT binary patch literal 551 zcmZuu%SyvQ6g`uqPh(r_yA{-3n}r2kDsC!5p^BgsT&8isJ{HWX}{O&RJ-5I?bMd)7B5N2pg`8JXQtlMzdFdK-onOS%cPG zWRPX0t48vAI_%5v&hHPnq1x4fKj`_PGI?5bqGvS`sC5?%ruI(-@=r3lN!)QC{l$gE zV)0f_!$4jtv%yU{M=$=&$06O=ypY9@mSRMcj5a%Y7`H`c_w1XwviFG Xbd!NpkpFZkx%8i0UP|7LSJeIhlDAie literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Speaker.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Speaker.class new file mode 100644 index 0000000000000000000000000000000000000000..465842be4c704a2e6bf1dfcb5fb75704efeb7669 GIT binary patch literal 551 zcmZuu%SyvQ6g`uqPh(r_y9(;A&BB5%6*m>3P(-K{T&8i<(Y7hmwEmPE!6LZu1N*=sB^{w9@P@&oh1Aox-wK92HbfPCU5vX+*45s$a1oDqEx=GwokN)C9 zVzJl_r#g^V$|$%g=lI#5`8c8*n-{Y9(Nc_PlF?=-597AT?2dgiSN1-!;_b~*^7iMb zyvKwp-zprwykkr%phVg_D~AaU8`xyV1?C1^YLF4Mh_|qv$}|~GFXMfn@3OC?eG03Rjh3YF%}oHLIz z^L*VO06Hjnun3h%?+*H?5*dh9BI8al(94Slhfw<~4S&5Oc~+4mqDafzd+o4OFc@ A2mk;8 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/CPU.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/CPU.class new file mode 100644 index 0000000000000000000000000000000000000000..d111f5ab6999116687c45f992f0640295be7139c GIT binary patch literal 539 zcmZut%}&BV7@Tbj6s&-V_?xIV=s^w~HC`|#B*c&?Bpyp$bq!Eb3ci#V6N!ljAHat) z&bB=X*<`=@erCSe{rUa+2GGJ`4u(M05607ArXtz&9wQmHn(bac2TS01wZqXlXRhQz z`BES=4dW;}8V9d36v$qviHa^+sCPPzfq>Nx9%KO~90xWw1bo@@76B%J9w`j<})H4Sa7j@Is~Yv}i@oY9>(Yt{Uw1&jsu!8TArp+(mD3A+cAu z4d$UQua#D}`P8!)Z{gvTE=>N4!9y!CqB%yB9UIzZf!RI#damStV#7ULqUatiQGSmJ z72XwCy!n4IDUTv)+pL@B{1P1iITbuZ(7p!`N)P#7t}i3Ocx UAQcqYTT3qfCzsZe_u~}@f4j0#eE1I;m_tQF zpTMz#Q?58w%acj-o+sV89q0{ z6BzShvy7jWWyht*QH*F9XTm znrkF|Mc%gxvQ^cqy<#Xg3TI$SRrXph%r&{6cbJQT(<;|#fl*(sS%8-m=wblN#GQAbX+s{nSm(mU40xoKJ=Y{Fn+^>4F z97YOkY`;?@AH(ggT27K4ZI6wWW_dxwCC=pk`@K}NN=51Fc$Z$gWW?81xK!N0BHmN| zT%yxNuUS!ul`!7ND(Ba%RHR)L7*C|9ec(=@1szuf`r^0M%@5VhYXY;qe81F#x|t1Q z4cAGV=d|aR6PfS_T`;hLO$|2$hFX=s$VnJCRcTs9(NwZ^P-dO}_}`De z|L2E?)Q;(HQ(i+oq(ft#A|cEEc~t6A4JuS>6rSHs_0Vi6VYY=KFyTiX=!Rf@r=t%l z%n$8~M*-Eesv++Q>^5Bi_d1i_6WEmjfm*pe?gGdCkvmdQuxfkcd%`+$Anb5Azm5Pz z`uTrq6v@n{Q*#S))l%=?q4q<1PPG&#L0b9j0)71AOUYH^Dal=M51wg2|D|O%xGFPv z;Skqw8^HZAPa(X5BmBe5;xPg(#9vKBat%JTO$_BCiO6IF!`UWAbCJnNw1MMmO^kKE zCsKi#vvo|)%&H|8;M&9#FP};Un>d}*gAKf%8fYSsi$s;9Gbyc!nOww(7!Ay(^jL7F zj&reKY@oeq?M-iObtLCQv0xo@^Tw~3Z(=bwc)5Wq!$uv;gCEq9t|L>&de?SK*+R;8 z`OA literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/CompositeDevice.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/CompositeDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..d4543a3f9a008020d58df80876daaf917bb378c4 GIT binary patch literal 1393 zcmb7D+fEZv6kTUpI?zrFEu~OVxro>cP_^D$@d7a+DQJSh=#xV^!eHr;=@j)deDw!> z@x??XXkvW!Py7jWotZ+3DWWf(oPG9LYwfjmzyJLF6+jWUb!Y;kReNjOZdk4?n9p44 z6bp0vg?YJSRi%!gz(~igCj0#+fw0$6mvy%x&{x?scg#Z5wQ7Zm)o@D!JsdK9sbT=%HGTvF6=a@e`r5WbhnrEAu zUtl8B`BB@iQg$VR6F8}3SRmF`tppo5h0~mpm;wVC->aHgUoYHW-IP_glzl=w59}5g zJC=<@J95k3kq06b`xyfhiYesZ33RVZ_kqLAJ&zYuPsTtNIbLx=9MiQOfm9}YD8GeP zy%fO|W^_!`&h|X}w+0G0&&=xbCH+b6BOIPeMS0P{SxhRVO9n3Eih#ahHkQ0cOr3Lg zZTtGffj?ZU`?LG1A^`aUB5-s|q?Z_L99AxMN? zA|+Wf{5KdtiYI|V47Kp)$)Tx^+y}(-dq`_|)W!;XcVRL|Je-u@+rm+}BN!zT_uxpx z@eYVl;>C_ZWEd@tugMyu#(bcxRPN!Nz|vbJr}vN-_=dpZ@YE+gVnhU!)7`6o^!v> zeZ3z~00Y!qScFETk7s>Ri44Rxk?|myu#j@*!X~u-mb3n;ysAhN@*{Op$(WGqbXNp> zqBqh*4#hGYH1sMmN-W`P-3l=;^Qw9%|7|U7iaI7#RR2eP!A9W5x AR{#J2 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/ComputerDevice.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/ComputerDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..8fcc16dfd2d5b7c9988e77e2629d6b10e7e4527c GIT binary patch literal 345 zcmah_F-`+P3>;rBxo`v$k_Vu4K*1I%K{P=~NGCu7rQcgj*ywVLHhbY+R7ey&fJY&` zAq^GHj6JsHvA@1QJ^@TH%8(Eaja$CBl?|-)Q(!+)QxO`8E_rPYXGjTyg3Xhi z%LSW2=$zZyh6_UL=y*m*r|yw+w6N1d8y!Nwur=Q_%aZ+rE-NMs3ukmS)858>E2iPu zt_b7e9~)UC4r^#tp;U#L6YACf}38wPyX<4Wp0DLT=UoHA6qD+ZVT&ls|gBD#s~ksui~ zh1g^MHk_$ITuLobSdvbk`JCf~{Md9PiyoOWh-^}{sgs5Fo2Tra`g+duKe6Fg7byCN z3zXgsp-g`n4*hgVL&~8@v@NO}$24qXhca5AuRu#R(t;M@UF;cyPO{gQ|)963736h{iKcF8K z-I@2?qzueG_v74ixIe#N-vFAZX5cVXLNy$#iHt;pKSV+|8&~4Br?~EC;4vI7wOcel zrNIj^lc8WpjkS%eZLoR~njw8AM>0C6Lap7dcNx5v>We&F_&%~&XK-uvZVn7Z9~q<# z+VGJ=nkpSR64%pVPv|?|8<0Y|qe4FDaxG1s6usz4P8h14C4&q9rwrLg5#7Z0NRSNL zLhLbrtEM^>m(obAFGwfPe8zE1eq1_|Lyt^ZL^dh9)XBp5%~N(yeKS`KKCu>5=O_dR zbCljKp-g`n9{qGlOUj`@v`wlU#WZYTn=)Epu0Tr-GJ+1_9qcAD4T`3h3O-PJBjC_t aBn00s^y7hKA;aEEa^XL@xRPA468nE^Mp$P6 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/MainMemory.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/MainMemory.class new file mode 100644 index 0000000000000000000000000000000000000000..b94a06293fc2613b2800ff70372f447670332af6 GIT binary patch literal 560 zcmZutT}uK%6g{)Mx@wzi_MJubru&c&J{G+gfuIo-LXYD%)r2}Su15c;d zvIebr$RJCVwj7G9$)G3nE${V7q1;v>?{~SDCQpk_^d!d&2kixe^FKIc$UTbaIx$F+ zWHBxzE(^d1w+^p@e!OV^A^c@&AZPL-pCh7D{|Mhna(XsJO)&?3Br?Np{t(eyIG2TE@Q dELx0|;Kd8QWFTG0u(On0{7?3ml6PZ?y+0ZqTGRjl literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Monitor.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Monitor.class new file mode 100644 index 0000000000000000000000000000000000000000..9333f5c93ad485676bb7302a42cc6c53a57f8378 GIT binary patch literal 551 zcmZuu%TB^T6g|_Hrxg(2V507z3t6z#xWSl^pfS;qxGZ(lF~E>g@Tc6ENK9P#0e+P6 zOxu-^CUehyoO4fZe}2Ed0kl!i!4lXD^k|}|Dv~Y#F_K}sb*0BD(qRscz~NH2!|@sC zF63MVQXn%4<0!fY>sJ{HWX}{O&RJ-5yUo6U)6oyI2pg`8Jk|y5MzddlK-onOS%WrQ zWRPX0r^fPnHX6wA&L0f9q1w}dKkWOVGI?5bqGvS~sP&c%ruI(-@=r3lN!)QC{l$gE zV)0hb!a!asv%yU{Colfo$1&a5ypY9@mSRMcj5a%Y7`H`c_w1XwviFHKuf9OZJ6NFd z9uum3t8n=8jxni#5^0;P93?btVVfBR%nc}NkXdLE?_f7w(_%EejQ4@c8-Yb(qy#q> Xbd!NpkpFZgx%8i0UP<1MSJeIhm-1JM literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Speaker.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Speaker.class new file mode 100644 index 0000000000000000000000000000000000000000..4e43ed2f2df2d33a211f7592dbff5bec77ae63ec GIT binary patch literal 551 zcmZuu%TB^T6g|_Hrxg(2Xrk_*3t6z#xWSl^5MzQNaaro9qd-Y1_)~67BqlEW06)rj zX4;jICUehyoO@1ge}2Ed0km+CgC(#Rgri9~Rk3XP53!6|&E7=%FEYx(5ja}vwmClI z+@+kWKni3gk%^+Cari1Df$X^&tN4P2dZ*Lq3pnlYUKU})b&d~Jm zBo>Rka25sfN@)c*<(xkIa~~&kWAj25KUy+~CK+vZ^3ZOJ%>ECGT*7 z%DW*{`BvfZN{02+^1G5`Po literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Body.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Body.class new file mode 100644 index 0000000000000000000000000000000000000000..ecc105af9de5d2a4e2e6868b7a793fd56580304f GIT binary patch literal 529 zcmZutO-sW-6r4@c@7UI=^`jp2*5+UkkBSEcp-@y%3LcYmttoA{q^aV6@*-FS5B>mu zlsKE@BxPZD-g`Uq=DnZauWtY+Xcb@xGy^r6sd*Sn*O!kflE?0a8oU-@3Dig4v*(Vz z>CnCLM>2>7a+qEN?K(u$wLxxh|uwcAsH;!wu7sW*0` zyCjhsEZ?a`6v(Sk>zDL+M|v_G(um1j7(8^7Ao}BLvQmULT4waXy8c&lK2dR6OH`fx zCF<`9p~1TWi#KeMw!zFnO2a0$7*RlvPf?9@LxZ@9?W~Qf3m%jyqmPx`vdcbP6Ge{ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..cd8fbd6a3b65606a6409149fb69377610cc7d9df GIT binary patch literal 1581 zcmZ`($yO6V6uku_t!F*tSefPltwL zGFr)2OJ6clM=rS0E&}o}I0BJ~Kzr%7TJ#z}N*Jn{a-jq5GJFiaTF|;dDI2B>T>{f< z>nKch%vqd3J!lk5zXCr77-Th-5-~CK1Z=VuCdx)IE-1K&OAJlKsK&+6Z^x>dE6ghj z0vKX&5wj93L!TY7Vy*B-6pUhw!I|dPmZ>GFTh!Kw2qviD>aodq%gshi;+l-9Q>xfL zI<$CJ!F5a%)yR=RI?Bz`j39Z`E$SCnvmqHb7&`xN<5Et`q`2wC9C@u)(7z?FoAbLc zgL%=!1#%j&lYl_nRB#KoNtf!u0oPLuy@AM34Y+bq$cZpRoqty_?+E4!!R45DWwxw&QmqZJsv`0zUW?GZ zy~k=#=`}Z3krkn_$iM$Y%Spf6M$Sy~6-~^Irt%;f7p21hNMAI!fI9l3Nkgklry%W& zcE@l5&aWl2i&kL<5t?XK$^hD%>C}jGXrVtuW?o1oCm)J%$K5ISN`Zz|5gl=-qkzu! zBD&&kkGrpc?u{aP;su<`_G?vF@pOnY&v_ov;(+%G+QN&EVZMJ|= zM?)TqZA*D9=W#cWwW@7P*c`(4;MjH&`y@pwGEgWsFPs>pEJo-wLGjN}^b2UkGTN{P z57IQY-V;jXxmwNzJ9t>i`W<4}rA)oh@d$A$+#nKoj6JH$2%VqcDdoRRkKh@eQ%Tn_ Pix>1IYNwKiIwbxAB7ubn literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Computer.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Computer.class new file mode 100644 index 0000000000000000000000000000000000000000..20fdc7a6c0c240fe5e3e0f4eab8107d051c47ffb GIT binary patch literal 1310 zcmZ`%T~8BH5IuKW`mt=G7AVk`B7U|-s1!c|d62|}SU(a?pV@7%xX^aZ(rWlmzL;oD zeDDYOql`1VcNA6<1+r)MXS?3D`=|9c&Y5fv1mcd@xfEDwUM+o2H~Rvqb9w1_w%-vbX;3fKEg_RV zukQ{#U!bS~z6vi1mpE_$m>WGG0a<-g(WcGbo=u4u;)nsz3p_RK(6Vv z?QYBVUCz~EeDKk|(3^_7W>a>j!<~?+ipEvYWVMxsz_NuIBm`!uBI-(DT~`%d?}wE| z3rVB|OsZ6E3Y2w)(GbGAbqi^jG~!b^cXb%uY~m(vCvi(4uiuJ=>)0@Hmr)h% z+9QJ|Y7E*GSiMR$wwmTgpbUs(fy}vDsyefJ;qFu#*!8|hpN%#w+z-t(Sgausvhn@@ zOkqA|3RCl)H}u=`h09CML|fbDXNnD4NsJzM3)hvN{!1=R<_5W_h;7qAOU{ z@f0R`(o=Z2E#@g zovfXFC4>QOF-#?qQ2G7_&`(1|bu)f-Rb~;0K}C-%pxcdPlA4){sTam^eF%U literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Keyboard.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Keyboard.class new file mode 100644 index 0000000000000000000000000000000000000000..2e12a457107bedd7d75c5d5ba4c9fc05ceb7ef59 GIT binary patch literal 541 zcmZ`#%SyvQ6g`uqPt%9>-FBh7Hj4&vskjk@Vo^aUxSXV8oziy7G*$d3H-bfQ;RpCp z;+-UJq%tsb?&F+$=6-#Dd;&N^BL|D29;(Sq&1EF~K-?=W4*d)994M{_IXDc}5r5?V zm`{iPRWK4^#E_Y3843p0HCR0f&5%8jQyHC7qSfuT`wY&R8i*onxGwT2G1#qkzW|1c ziyX2Bt-Ht|OPQXWip#|$5c-w}V^Xg5RLIADuBD07q!T^JIYYDezvE+u{7^*Ki9ec1 z4&y{(vUsBwIuz&9%qabSvtxdU12SaOUMxD~Dn{g!UYja;7{f)1?x=41D&9NRyv7n` zuen6^H73;PuEC+3b{CThC=+diGW!V)o7kd=1k4&p)F3m^BD{^Abc|20sb#!3R9^^K cB#e~c#)59rkP0&Ft|XWLk}E68d+~_+4-gho`~Uy| literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Monitor.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Monitor.class new file mode 100644 index 0000000000000000000000000000000000000000..00451821d8482893e18a738e5973155c8d897f7e GIT binary patch literal 538 zcmZ`#%SyvQ6g`uquXJod=7(g zI2{Jp(MZGzLt&<6EErhNVD%z2L-AA+=Zq5VUavD?aL(0(aAAXUl(EKOw>yIh80s7) z6b)MED4h%BDu-z(Lgeo zCNhuity<_yW$s# zE=i;YE4O+ch4NAv{jwSF&`gE{8nL*G91qQV(BR#G&6_(*NM%$>TW4lJrC|e`j3{8nr>H@uVUDe#iv5kfr46e{yXpc_(SH`v>=IP6+@2 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..22886ab8a7a9fb5026a773aa8d04b535b6289423 GIT binary patch literal 1746 zcmZ`(+j84f6kR8^Ek#kOnmB3F6xZeI)J+Wq($sEKnn0+jlZHB^xaB6>r>+v)@+fkd zJn;eWz`!FP&}Vp%XYfovfM0=cU|7eNQ$m!NBkAnD*4b-o?eph9f4l(j9-11)1ZHb) ztK;rFzRXqS6W5d1a%)XTwtWpT0c+QOX6KrAyOFzJ-IX<8AaT=aJN}Bmsm#KTKy1ye zO9Q7cZX%9^z?qWMmYdyHReIZYwJ8NAOK#0>?%1BAzQfI!|J2zRIA1#H`~taKw$m1v z$viH-tfTCEPPurRJ6NrK}^t8V?kz!YXw)#n7_nPO2<&P7t* zlLuAT_UZ;^F{9yvz}#`l4VQg!dF;H(xfq#K?nrx2m6pPcs_!)uuj35?&92u~Ndohk zh>oZb6)VJBCf-IyV1kHISppZMP@`~&ylf(iD*^_QVXXqGC}0>3aaT>`@Xiny)_(#n zjE1;tCQbIffZmY)mgm&y1X`x3L@b%Oei(AUlioOPpr9dt#Bt?=eP6ar+{7(H-7d{H zJv4&j=E&Ig=>=)G2)r$D?*A59?K;i6^mN=I>sn}v^p-jEJksk$e@t-O>E&aw#|2kRu@QS zjvrbuP{!vPwgsjJ%8&NM#Ez1tbyS<0Z5>}6X@dG4`LvElOiBOs{Kvn4{fXmddkv1{ zRK&Eg9A$VlR%}9qLr48pQ(GMvc{U28D3Q_#wE~)ygPw0zVWu>s_`qwr{FVw zxd;8XLD=A`!XRLRt2s>I^EAK4@e0mxhhT9XG3ea;r4Osp<7L^$RK==W>pe_w^f6n} z<2{_;>|?%SC9PBsujXTYq$-wS89k))@$8iVm$Hii-ptO$0xV?b;sF-30p49oaQ$FO z`yI=DtW+jH>|u3U3-Iw|F~Ge5n*kn-Vh>d;p<n?LPIo#Vgi$}a#pE2`iOb_Hg7)r!rd`TW1Kj15T%?2d#J-)%W>}LvH*r>8y jSv*Azb+%=h`4Uff?lx|t!Tki8Z@}T3M)WSZ#<2Gs!Sm%pVS_uT z4e2M55Xc-jpPa&xbG%=8TRxDLhCrh1RnG*n+gGXUJXsa!I+SN+&+)4QqY!DIQnd)(Ie2i?H?yK+^^6k%~biCK!ow8}}T zK{O`CmO%Q@43^omYkGddw64d*q(Oz=XX&fjiZ)iX|Dy88Wf4UIeS-pBRM&Y+-K3$q zPOTm9)UU`*SIt;D9GZFcH(`ns5$8XcKunDVzhdf-FBh7Hj4&yskjk@Vo^aUxSXV8oziy7G*$d3H-bfQ;RpCp z;+-UJq%tsb?&F+$=6-#Dd;&N^BL|D29;(Sq&1EF~K-?=W4*d)994M{_IXDc}5r5?V zm`{iPRWK4^#E_Y3843p0HCR0f&5%8jQyHC7qSfuT`wY&R8i*onxGwT2G1#qkzW|1c ziyX2Bt-Ht|OPQXWip#|$5c-w}V^Xg5RLIADuBD07q!T^JIYYDezvE+u{7^*Ki9ec1 z4&y{(vUsBwIuz&9%qabSvtxdU12SaOUMxD~Dn{g!UYja;7{f)1?x=41D&9NRyv7n` zuen6^H73;PuEC+3b{CThC=+diGW!V)o7kd=1k4&p)F3m^BD{^Abc|20sb#!3R9^^K cB#e~c#)59rkP0&Ft|XWLk}E68d+~_+4-;Ne{r~^~ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Monitor.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Monitor.class new file mode 100644 index 0000000000000000000000000000000000000000..fe091dadf8d9babcbdd2594e74aa9dbef70d4247 GIT binary patch literal 538 zcmZ`#%SyvQ6g`uqPsg^#XRQm}wOJU@rQ${q0`&n(!DSN1IwkFtX{tZvMz9Dj`~W{n zypv=lm4TUaALraN_xtDb3&1ft6<7@ISdFJ@CR5=@;!$aFeRk!N3B8)r-&!VFQ~Kk$_nOi5g@ET7K6p9L!g3HVpYiiq+bgDn)Mz9Dj`~W{n zyqTGmR07Glk8|$H{r>s<0&s#>0S-em(vz8fyNE-l5OL!J^uF6nitQiQczrs$69wy)-YpyIcdsQUX$ z)ZY?9gYE`Ax@mI>se~%gHYjtD(y)mwib%jNfkZ8`10BNK*vZBO^x9g^e@Fe5fJ4H_ Z2$e*Trwy4P!|qCQ^)H#PBsY^0d%w~6QN;iN literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Body.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Body.class new file mode 100644 index 0000000000000000000000000000000000000000..76b0b0149d40dfd76e8b89b3d5a0e30adb2280da GIT binary patch literal 529 zcmZutO-sW-5Ph4ZUupVb)cR2mdTVnqhaMFV3PPc%pcFhN=~`FXZb?(c|Kvrm2p;?a z{wQ%KDIQ8$n0+&|@6DV2`ThC^&_S~RL!c4q@l?-LBK=T4=va3Ab3J%1z!IoG1;IP>)oCR6o)do$-L1t za+ek|gZ8bS$C12LtY6~wj(Ia2kr9*r!k|NLQbhjfHmOqt8?`CBr#`={d7mhI%>}C7 z!2A}6fY&EcMm*3U+`!Iqj88ZBa^45(Zv+ey c#y^1to$SF!I>9|T}d9RL6T literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/CPU.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/CPU.class new file mode 100644 index 0000000000000000000000000000000000000000..7c1d54dd7df340cfdc4d0bfe9c82fbd42b20ddb5 GIT binary patch literal 270 zcmZuryKcfj5S%qO28V}*gsABf3a+3`M1w?S0TPe?>}--l#upjGe^EtBkq^j6McG4? zG&4K1+MW6R`~CqiK^(#(^fP<-v`161O8L!}JW;dNHiS=z_xh|=u8ViIO!u5sg!+pq zOf@Cc9-npue`a4fLJiFp0@MlJ#1yG&EV0_Lvu%*r(_r;)o~-IX<8Aa>JsY=1@IRAymEAhPDx zrH)e=HxNZk;7rMON;kT)No#4?l|R!%f7fgc3$ON2+b+CrM0J|rI1wm-Z1bc-V)HPdR<8pn9qcC zM1@$fLcDF@9b^P1h#1KdxDbXKg#+Ye16f=V(1{GR3Z%k-K{UW!HIT!*LtLQ$1Y8ge zaPJ#5*#`pghV-{QyGAF_GDTIyl7Z`oA@_UfjpGIi8uCXRS3cPHWy`=#+#=NN(0tQF zBiL?^jE+w)NUKHQZGoBpTV%CkH|x@i<72X}1*S-EspIl#9V=K<|Naw_X2R^HGS&@z zio5i@)ox3tE^t0mTsW2-98`$oGl8-6Lxn6Udfe4$}mU}{kL(ViICQKe~Z)uyHs$CpQ%pngX_9mgZ4q@Vx((~IAJ=D1m2gCjW= zGHsNj46nwDO$c%5sK07zs{6Pp2E2feM@nz;ZSidLg+?5W#0a9u)_03 zz7#k;svOtBCosl0-gaCye&zTSd`2(# z5dUKk*14)M2$Z0%v2Ar=OcZjDyDAgJ*4x|?3FGqW*57-l%0!ov5=jMcCnc4;=QF9*AJJp zKe61$N@en+9#*HdF78YgySUfIW)}}ev4<)aQ?bfn>{Tgw3TAy28bgAzQ+&&^jAfQ{ zi?LOfbC-j?iAikpT786RJVO${U}jMMgJFqyjIYQO$B+0L->?A*{D5!q9s8L=2NtSq kR~AoEL!E6|X1>G|p1Y0PXmCG9<{Pm2rV+hMt}*Pr1dPhH2LJ#7 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Computer.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Computer.class new file mode 100644 index 0000000000000000000000000000000000000000..bde3a53e5b3787a9874aee8d7c79d0290df639ed GIT binary patch literal 1625 zcmZ`&?M@Rx6g|@xN|!B^?*fGaqC!!sg7`tH3Q9u6j|9VSw(W=ulqK7u;T?Pw|Cne^ z{NV%mP{uPmv(>=%&)m5)=bkzDV}Aen`3t}bwv&hnOjN!4nb&ZevRIMtJzuUAw|H{i zlztKkfy|Nf(J7udr-#Kil_Obg3M49C?Lr{Cdo^^EH|qjD$MT}$Ietwb7lC?dZi!6R zy;Ha8`2v#>z*qWG;TmVsIhGx8d-{^N?vhKsvOs)cai3DRyqdHS$AFDA`ULuS-BbDc zyk3$1JEw9Y1qOG$s&lgM_^$HJVWRoLZA6O?tD{6YwVKM9;uj*+2gO+2PeEYZMi;sT zdKnRBFOZLl3a{67n|yNTvkvL&@U*^|Lodtvl};L z*RHkao%>a}?W!3|heNZheiLRn5pn*(1Y&9|xQnSK2bN6>ESo@^B$9K>wVz&*R?v18 zejxKTfDLl(4i4iO;@;K(3}b{IyM-~XD!9x?VhUYY`i|_sXe&6iD5N)F7}Y4lpxBi} z_3#8HqquUHxzdd2>%gVbR9w@@M{&(u=E{(3paYjGmExMiwJ5In%Una`8t%ZQ%B{FK z#D?oL>(Iq|6$;;wZDFBAn``0L2JK7>#WL-D3-{I%levSbgOS9+7ouZO9T^QG$Czst z8H{tCVAFHK+pC(@)VGJ~?_-T`W{7#fU5w~KJmfCUm=qpym*73eGg{fYQMO@}m5s6| kot5ROY=$q+@~t_p^Bt5uZ7X}$R<_wzwq=w(5AuHT7oKf1PXGV_ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/HardDisk.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/HardDisk.class new file mode 100644 index 0000000000000000000000000000000000000000..1027387a846df0ad29114fe780d5c9dad0090efd GIT binary patch literal 285 zcmZ`!u}%U(5Pfspad3hVN@gVW|i@ibv#jX?Y1*hy~YR${hfZ-s?g=LT4p=W zYeMthl%{?lG_I~Ugm7xNoS=br2N9ZtUTR8S9QGNzwayAA3{soxVxyh$`p*pO7gG^N z>Hi7t2+7JGT+WZi@9CbS-TG7*Lo&!O5GH?HFczgw8i;N_(fSZ0KqBbdkbw)q&Z&-s LyP^n}f&qF*rj|Us literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Keyboard.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Keyboard.class new file mode 100644 index 0000000000000000000000000000000000000000..b8ef9ba7d32c6882c4c70fbb80c65fe18c3a1a6b GIT binary patch literal 541 zcmZ`#%SyvQ6g`uqPt%9>-FBh7Hj8G_rQ${qibVyb;Bu0VbxPYQ(^T=F+z1xIg&*KY ziFcB?k;=f#xsP-1nfvwq@d==dMh+H3Jyg@VTF6NFfw)&%bo~qQ94M}bIXDc}F@NO# zgwIC)RWKG|#E_Y5843p0Ggv(d&5%8jGZ~#yqSfoQ2Mo@c8j2!pxGwT2G1#s4pa6!7 ziyX2BZMw)HOPRi$iOc0Q5c-w}6H>1ARmdj;uBD07q!T^J1w*s{zvE+u{76LCi9ec1 z4&y{(vUsDGIuz&9%qabSvtxdUBQj*uUMxD~Dn{g!UYja;7{f)1?x=41D&9Lbyv7P; zuen0?H73;PuEC+3b{CThC=+dqGKUEb+t{Iq1k4&p)F3m^BD{;ebc|20sb#!3R9^^K cB#e~c#)59rkP0&FuO*lNk}GS;2l0sd4;H3V00000 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/MainMemory.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/MainMemory.class new file mode 100644 index 0000000000000000000000000000000000000000..32482a022d31a0933648d9f3ca2b69c60b26bc84 GIT binary patch literal 291 zcmaJ+u}%U(5PfspadM(ZsErAoP`Cvp#>Rx|fC56lcaFN`?v^ZviJxUMdH^-mv1AsAlF#^I(VXLj(nTA!)FV^u`&9td!Tv_)KBP8@T`dzD1*RN`k zZ@6d(?FUnv=8@348?FiAlYQm{Ep)nw&?cmrsd>Jya&{}7mrUqqw$SBTJLC1)44XHz zBiv^HWtb3>rQN%Nr^ate|Ki>IWEenl$VU(+e_t>brA``%Mqjx26eB<)=-ZHiOTq4` Nj)bp75v~OTq`yk=Kb`;p literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Monitor.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Monitor.class new file mode 100644 index 0000000000000000000000000000000000000000..3585d84d00b49125ebc469b846dc048b185ff2a8 GIT binary patch literal 538 zcmZ`#%SyvQ6g`uqPscXaXRQm}wON=&mx>!f2-F8C1(!)2>y$QArm6mv8^I#D@B{oP z@lKMJR0d|weVlX8-0z>yF93aXDzF&Zv6{}*T&BX0#G}%p?_a7!rb<`fFu3FJIrJxC zGV-sZv4~TK(oD-(FtEU2^&&Jw`BW0;j1t`-=nWa1bM+wVu)#U1SZA=iyX6;9tWh4AqfHZ*qGykPK#t z+++P#Ep#j{q#41BPad29;fUoA7A}(|XvtSl1HEv8yNQjzXNL+TtibbHL4Ej@UOe7{Q`~W}7 zcsnyIgK5&9`#9&G-tV8!F92OM3vd`3k)F==Ld7x&<%2e|8w}=BJV{f4$50!KXAw-q zY!qCFV;RK^xw%o1WMDmu^@}tN`7V5o8w zkhf@yBZoX?`f4VxmeWw0TM{HPWT&HlfJPZ^3M8Q-M#XdoF( z5~;`XKrc-sFO?m^vrl&H|8PQfTw01lhdd>ST+-`Or3h=cOwk?HZC};@z=q#kq2eE{ zP`}`A literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/AbstractFile.class b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/AbstractFile.class new file mode 100644 index 0000000000000000000000000000000000000000..040fe708ed413c686d85c00834e997416934a127 GIT binary patch literal 753 zcmb7CO>fgc5Pg$4P8{5Zl$MWvL2pTrY9wxekPxU+MN|%{a^E=HbSuY>oNZP3O&ma? zLgK&=;71|eIu?zTQ*CK?c6R2?do%mz@2}qgUgDsRir_HLrn78rtd8`xn$8j(jZLm& zo8_M)b!K%Qy&KJKu3~#+5?zNUxPPIpRFtT65`7w7FjnBDYN`br{oAX7%}qLaEvSw4 z%$^J6Sm3`gsj+VbTby&SX9p4=S_en*LysD zEFyqb?+k4xZ)yYQ~o z`+@d18WlJ=R~_WxV8TT}2_txdZF(H5S0yXIw?js^WER=M5()o53ExeY`GOtnmN?5K cT3-pgOrp6;g3oe~$?kdXQ#lCpw8(n)4|TYN00000 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/Client.class b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..a25fdcfd7253c948fc66518515189bf106c49a17 GIT binary patch literal 1055 zcma)4U2hUm5IvW&u%&4EY89nK=r|*iK#VyVEfPpQ+@FQ3ogPgS+>Uh3;&8Q zC9#Rm#vf%ocTxLblkze%=iZrf&z+f{zrKA3P{aK&0s`5#GaNZ%%QFr0vmA~FrqQun zv+X(Vu_3#j=^EPu%e1{Pf&#I={3MNmw0p*0tIsTfP~EaE@3FvKHrEsgZaW<_f;r4b zp&=x&*syGK_h{HM-2>Sgm;#B0)0Ts#bS;Jd90t7))>t6lm{rdf-x^BG7Ff={Yn?wBT^&hsx{l*T5W|wvzbvqnJ&#<+Rpzp^62>)wjfm0H!YrhHAuy7HS!+TAF!$O-7O)7h~-_gJ8oouP40 zT4T?ZZBI#IgA`REilUm5He%N}&7gF997FP)j`EV5Q4uK3@YKJisxh&w%1xW0%vUB5 z*>{fIwyBW7!gT-2YQ)HZi^lZ@0*ts|v|%EHUeIg#3G}c2b%a)3g9Qt;(P;wxC8Bv; z#v)HxEGW?@`FM)hVIna>s^Ldh7`;A4`Y>@l)|ueOt{<<)@q^%D&_}o9qNtGOqdRf& zMWIlkbb^gSk*1gq`c_j1>5#G~$e&4k;LFhvq1Y63tWsK;s7}!@dACQQ2bB7j(|V6M zx=5nWO!cMbQ`so70<4kj!##c~g*T`$3Xts;R#0UN%6P=?Rr%FAv(^}C5VGgesI)(LgIfD%L6|VS%MdHnZ7uir3!w z7rgU|8*g+p40gux+AIHtGhX-u9Pv53n-EaP_GWj_$NQY;<30P!UqAi?U>5Z-0s@(` zRjpeM(=oEfLshL;jO>Nm(1C?z$W+huN8%|CjQZ#pJ%4yo%ws2-SUwE>Ea@Pphn>TBwb4_40<-t`{Z6{lF zY_qnLORo!ru3KA16hXu!B8Y}DATWHwYu>iiz9tt%97B3bLLit*uSXy-BGH3hfq{Zq zGgg|_l3}l@l9re#SY=gNSGK9g{$$A6H7R@gF?4hsri4&URb5DzRX2ZuKDD)VqvqKA z0<)>d!0ir#@}m^-jKs5;Ak>cGEE;uZ*VVVAEqPAjdAz`-MrSFMT1v0?<0YiRcv&ER z;*>T?B8^Gblhql=Z$EjNkAGUwTr$0{ym8wH_F*Vof3|aY-N8>&**rPMNGHLM-m&L8twFo+nA><@voNN|B1vse9ClG zy>8Ul5!3&62mf&`eGb&J$?&Eov}0FEKwwUzmNhEDF0d2-vsQ21me|ou`y9(7rCl*4 z_7Ej~*X&A7M_18?@LCH~AX>DVcG>WLRPl}hGukLzB!?h>l>z~M@%avO6hI$G%omzt zKWCP?E5P^AWabcZ@)6=2hZy_;!{55wNBNAqKoJ&(G04&+=aOC#&fzJJSdKBAC#1kQ zF8I)^K6ElO*}~JI%@!_BevjeI5nc@7&RP6^Qj!=&tP4Nc!A~NCDHngbgTF`)n!5B+ zXHKC;-L(OV9PC1r9Yond{%!mlZV!@n+ol8|hWTq5aSxqvt;_g_1~|Wf>pX0XR%$^3EV7a{#~45;454GX z3{n<4XP?%uB&D+~1@i}pe}|iiLJKQj2r;gW{rdP1PCdfvMq=#{>zumN!rjDYeDGVf zP-?+wVYj1b`2a&xZAFDl3->v4<@~Ng@zk7W&w#vp7;wzxKZZF*tQfFv08d$|qb!N4 gt89&2y{NRZBtn0pM?{Zt1wqR5)W!Hw<7xob-;^i2+W-In literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/File.class b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/File.class new file mode 100644 index 0000000000000000000000000000000000000000..a6bef3bc1480b8a31c821a3af52571916dc51586 GIT binary patch literal 1115 zcmah}$!-%t5Pj_>V^79Ta1sYd0EZ=von_dUI0*YE)dsG2cSkRwHwy1S}hRlQeT;~&4jeg|+B>jq*1(>1T@du>-M zN4=6wzoDGE8>pK0f;~q*(<*T8xea9?AuxY5c4fP*16k7?BampjuW1t-0t1U~%hk&Q zdAsslzLZWwwsxGV4&2sGd84>R;5DzVOvEv0!GI+&b_lY#m4-mpLJ|W4Llw8BHapF2 z6+DvLTrpSiYO=8<1DEZdGog3gwt!tZnm_X{6PK23hS~b43K%;|S3_NKyGY8CK55Vb zWD&WOm^3gUFnl0#udP+n!YQ04l-D8bSkwd8a~^OowL!^dIfVi>D{bN|&Ko!;|TUcb0DeXn`!VOxsaEFJ)2)o~CQR7^JOjXO;i~G{=y}ViVIzdfE)0pOMp8JC- z(jKR;Kp@7GM5j2N4WwvIll74Nd_P#4*@s!0{DRC!GGiE`H5*5A~=pA zM-~NQ1f!IUPh22I=P~4a=^fhnE?N4F%m+F|i3dWb878zMKrbP^D~^+gxxGb#@W66> z@jbGia3Xi6i>Wt4Oq9B~@b1q~a(#pSI9J-oEV<^oxSYFA3m5C+W)}-xEU}z;C?`(@ r0sf*g^s}f=7E5%)vhq=-9*Y>+cS(%E3f+`K5Pd^-VMEaHl_(lD7-Jw1Rv>yX=p~x+1Cv8iSka3M47j-LQk#us{)KuyWdQA&+FIo`?SgeReyC~cln^Y5?|a97M=B&R zH~D52wMgW_|HN+!L>TcO(Z+~OdO@$Rk70ZXuj91p8Z4NjO-vH#FA>e+GUj>0VnL2! zlMiP|9;VY{WSe1hh0&`shHi zD$|s6T4;53kc%pNiuH4f4?;RR;v}1efn`#w5H(2p1@HDq^ng^~a9{6`LJt`Xn5jm3 zHld9TR)94Yb-2f&vUrUuqX@gb#1d+hpn^wKuf|au%vxcjvwt3|jFe1uc8Fl}7o}b3 AeE~Q&d+&43&98s|_!EF}I3f51 zQfpSRY*kFhNE=V}V!2?X*G=14b1Zu|y=pwNY$H8$YzQGB(7vVb=;?x9+DPAC-J+*J zprjWKfoQgVlyhvev@t0VTsO+jrhu3e2pJ`sjS7RfuG@}TNN3H8L&uh!xlz)cZJUvX zP90|&BD+Z^Z}3V}#w?l64T0`hgM*hko+q$rYuyOLj}8rOhzj^)@q7yex-^8)972yk zrvj~zOxd=+E8&FEjSlH|RznNIay6hKh$ewES+is;Y!_Dz`>wuPP_(Tzy^z;!Q|>)u zz}Ym(b1eIR^d+TceSLkFD(#*k<*|GfK`f&dC^)8Zx*}eC%IaXU_`s9N$$H zo%8IIt#}JlA-qknb=i(jHQdCsY-8goyZK~xkB?MiR>M`iDY?(eaPMlE!+V6asaF=% zO~P7cn2N#}EOP>!7A)XS2)9qnO>Vd17)1?>_<&rjZ6@t@37b~>j=aVmHuU0TGwyP7 zTEfWVqY&;LH|t3+4Ov7&VCLS_^LKOGEUX)LGd>p3?$_q{!C)9m_(aY`M6Ome=vZYb z^m5rKv3*AWZJwShi5HzHd8IiuC~I>~g?=OhZU~%Xv%K({%xr4d!WG_jEO%@r)q;j1 zA{16BSSU&DEy*$}wYR8No}qi`0KNO@OCWS-BxJQIl@(3d>K1t0Due?ja^v?qT?jMmP;N)-v( zgliM7?EqsEfgg1Q5pro~t`5HG(FOz)H3Sn#<5lLr%$ouD&UX?a$J*n3gFA`1DKS94 zb$(%G?IQZ_hNw-os7*>y$?LTmuNg0v=J6UQuhS8GiMOvIqE?Hjc{l~$z!eW&n!keR zf{fVzEf+pTT?z`ERbe#O!3!hgjM5@y{*B(UNYnm|1aydN0tU61HU7WUtQ+nBi;X~yg`X<41 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/File.class b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/File.class new file mode 100644 index 0000000000000000000000000000000000000000..cb5c94b09c5618b956d18be1560ccc128e2cf5c3 GIT binary patch literal 1277 zcma)6+ip@p6kWrmTs%;ul&Wo&dMnV&QR}rA)V9_%snrBSVvG+57~4~UL*QVn&%XN& zKKbH<8cP#R`~bhk4>0PQfmqvOVo2ufnb~XYz1HmT?dRvO0A_GE0FS_U$*IP)#6}ut>@Cn4Wtml?lv1%LU{o)pr1bj8CDh1+edslh4 zVb?b1c-ORF@=mM@_{*~HZVL3x+cn$G2_(~p5v!R3K}$|qhT%ojKp6c3-gKrAg1}J& zAp})4V8D+)6%85)ASlqkX4m9;t6G$ehgPwo8*)lkrC>E|weKGK+)cYFkXidr(bN!Z zN_V-_yDzO93~WeuU5ienGlxY8sD!*$&eoOoI{k1%IE}LboZ07Me!J<)s)2JjPoYkW zh7NWpZO43|U^G)&)wv+jG%^%M7Lx%?&;#xF{wxD2Op&37wV6Tyrohm_S6Xb@m9lIE zaglvLRuBCo6~;7Xl=)LCx?Ew!;@8iNFph9FxGVBrdF2WGCwntEw9$2VKQzm&??9D$0IB{5?rMY?RbI2KqIPp<{oSM&Kk)^#CW{9RSCA zf>R{zxb~V(C>1&H{98mnVk|!1M&^|e!)zt?=GS)~eZlmj_=R0uQr)$2IewiB<3t;? zZ7j5LOR4wjmOK8&seS+v#My2F3mE*%iCkBLlDMRuSSFf(a6jM|VYYQgOIZ00xrXj> literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..3e454413e55f35ea3f07124128370c3786368632 GIT binary patch literal 677 zcmZ`$O;6iE5PcI2PK;Xufe;8Eq2&;u!a^LWdI9z1wo<85p`JF$5*8U7Ee@zZtCvP9 zQhxwH3h_2c#UbS~yEF6V&6}Br$3K4o9Aeu?L9pD_oy@8{vynQ_wLOTA6Qk4IhbJgs zs#_H$D(yvI+LyYM3ufM%)Z`xoQ_Y>0z&p;mI=~c4A*L}Sn2SxSKliWN+I~~*L<<(; ztfP{avc~!2pqF2m8^KEaLi;09Un!Fcs?8tqvy9W+nzVPc)ABJdSevN+nyK!Ixw%f% z&j4kV0xY8HV@Xh(z>aYtmYr~~Yt@~P6~V>?GFGWR`M0M4HPqd-Yl8LW85fv!hGxyX{~LJPGd#6!_yQXnlGS zU*S8wJ3#T*FdfjkG*~c88;$^cU(qY!HRc#`#VNcYY2zN{vjH!;_ZyXa)Xv8K0IQ$g vG4#w^WotG=ksU(XI{7vc4Er=jTv*2jF-5L%6AgB%6Tiiu6aI#o0^U9W9^jRQ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/Display.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/Display.class new file mode 100644 index 0000000000000000000000000000000000000000..01d3e28a2fcf201433e0375e7fdf9b36be8ac84b GIT binary patch literal 295 zcmZ`!Jx>Bb5PfqT9G)j26``|J3pd76V*|0eXaS+0yIXY0d25zMBztsGmASMh}{K~54=21NqD_wd* z=f*U~-x6AN^vbWjlKp!C8C)@gd&;kwkJ|Fp*3NlW_a|1KsVPoC*dRGH@uE T{Wl07A-viX6;kU9Mi~48@Vh+; literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/DisplayDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/DisplayDecorator.class new file mode 100644 index 0000000000000000000000000000000000000000..704397245917445fc71dc8e65af5655aa1fe4dc1 GIT binary patch literal 521 zcmZ{g%}T>S6ot=C(x!>&kJV}sTogBL1&au76gQTxf*U3KX)@wSZDg7%K9=AQxbOjd zDDh5=3PKi{nS1A)@1D%Z=i57g19V+jgkB=!REsRtBXOBYy+0bO#qCTyjDPwr974BD zMrajRGAW#dt*}gfM5rFCxynum+x>FcAR;)YX(D~tSP9@FAlUsuMvOTBl@}9u>7269IPv7#B`Hy^9vIKYr+5k literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/LaneDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/LaneDecorator.class new file mode 100644 index 0000000000000000000000000000000000000000..451291e3cab47f2af770c7cdbf86b7e75bbad299 GIT binary patch literal 741 zcmZ{h&u-H|5XQf8-1rY}+N4mR&^Dn3(js9Y4jh7dq2gpAq@dil$x;?McD31ndgsQ8 zdk-8r0tYH_-~o7+@Ct}o+fY!7ERQ_1-~7Ju?DwBvzX7<9+a4Uk#z+oxEljRs@!Uv# zFHS@z_kR~XxP;D}W?xN?QgQr8MyNkjnKFBX^=|S%d2eSxa3AF(8KQ_LKLhs&%ay+zRbvv?=DVsh*1IDuUK48F zoq?TeCBibAAqbZutfEQqt-!hjxPmngSJ~sGcqQUgWQTG8cw*!@!ZloHNIo^(m=wn< zkDqFlnZD6djC(#d2#sL&@x$!R`}U7_C$qOFA=n&_hDCLu zP+s7CwNxR(B4?~e153={O`ut^dPNQdyQgUJd+`j{D9nAh2;ei^A|sZwxI#L1)fMOg dn-yoDak;hr1)FD}a;}IWi|0THHyP>R)-TxAoaz7o literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/RoadDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/RoadDisplay.class new file mode 100644 index 0000000000000000000000000000000000000000..334a8754b329c7a65082c51495c914ebfb86c983 GIT binary patch literal 533 zcmZvYy-or_5Xb+Ez`=P6A}W5Nc530pSXf|eG*-kIG4w09;+o^uEQ`k8&cfK!_y&F? zN-TT;A4T*PjB{Yn1e=+i`Oo}jcHX{TUIDCO&O(G?#uF8#xl!8XM@HyXcVBUDTh>o~ zeqkZXkn5}XQ5oVJGLUAIVPJ8o%n;pDp0F{1q=OjZ45^|F#BQT@DD(k8^aVqvs4Cnq zb1lR8CmA)zvd)k%_D%Y;OM&>F=I2SIk+CqskUrsO-1T`-bxRj@BWeytk)>r+!!V2$ zJF-;no|b_r87+9Nkia-Y_Pur2er(ORuP@uT&H2xp=EqgjMh;UJCK*QmX>>4+83yY# zWcdN%7rXrKcth!GA-sWIQVm@ZJ2L!j`p^C=Ar%Xt{pkEagkE$cvKB=yc}70A{EWnX zN4Cj^GN@sYtkW$ZKSUA3aIbm20|Sx|NM**JF!2kpNg^r|RQwA`_8_yQMv(soaFcib literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..713fbda7b47551c2319de60dcc9e9815fba9db88 GIT binary patch literal 847 zcmZ`%T~8B16g|^!yL72iMWLmXT2XBMpb7dU#>7B0Cbc9&Y6wr$?z9Y9cFnM8{8_%( zL=qEU{ZYmcQPjrMU-u~s{)n!Yy(N! z5yv%w+Dx_sBl~^byOOYiG6_gC;7At#(=MHcjR~w=Urr!zF`smNZ0T|n6E&&FQBEut z@Fw&x9o~L)ZhGpiw)>hNAHb#^I%?pic`iVTKW><>ORY&MC^L_TnEO6*dwi`M44CJe z9|I_FP|M*a7HF}-zlqCG?p>g8IOKsm`GLg?6b}=9h?NgdN2bcuRBb=IG+jjwQGMx@ z9Qvj-Hdv0_Fvmi9zGdoFlG>!UMI!G>rOorOG+&IV;2wJgvF~sn>m*vH=K+5yM%D0; Szck~r*x=8h{}ItC)c*lXk-@3} literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/Display.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/Display.class new file mode 100644 index 0000000000000000000000000000000000000000..09e601df320a22dcd1d13398c3fd6aa5b76a02a5 GIT binary patch literal 295 zcmZ`!Jx>Bb5PfqT9G)j26``|J3pdeHV*|0eXaS+0yIXY0d25zMBztsGmASMh}{K~54=21NqD_wd* z=f*U~-x6AN^vbWjlKp!C8C)@gd&;kwkJ|Fp*3NlW_a|1KsVPoC*dRGH@uE T{Wl07A-viX6;kU9Mi~48@=HAn literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/DisplayDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/DisplayDecorator.class new file mode 100644 index 0000000000000000000000000000000000000000..ec4f8bbf4b495eadbf90ac5d5430fc7def4f6b80 GIT binary patch literal 521 zcmZ`#%SyvQ6g@YINt>n*tJNa7C~n#c78KklZY*5|H%j)?X2g-$$TU^_EWro3@B{oP z@lK2iLKbshbI!SE=Hv729l!y)9xOsHma|lgEY%}%nMu7r8mq-^A|A#+a}N%oTLvSv ziYplxOu|-J20tRW$7-&!6T)`C95#pu&S@G;A2wJvL?YrxGmVj4O+44;7A8?k3z@oc-Y|pWSEFA9GBTVB3{B3>#96D>v literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/LaneDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/LaneDecorator.class new file mode 100644 index 0000000000000000000000000000000000000000..af37eb4ca378a369f757eb10206c3a204d25221f GIT binary patch literal 741 zcmZ{h&u-H|5XQerOq>{#G-)ZN&^GBm(js9A4jfYTLdD5KNI|)8lcj9s*wtnO>YZCp zz4y=~N8msu4m<$Q5?-O|tZgVLMV3eYX21E(c=qSz_a6YB;gO31VR<0?i54c&fp}}A zej0=#mV3XGE*wH@%Co0NN0B)GVy^k0hZHCVdh0gjQDPNyofXBSLeU{?EW2!c5*@4)QSxi_=y48T*}q79R-3 z_Eyi%HS1#rbq|EQKITy;l&!&bsbB$%F79)WL-Ae&k%$k1?(xXTp^pc6$dF`gxG+qQ zRT8|`DmGoCr5JX~SSC~}lh2ZBT|Y+so~ zeqkZXkn5}XQ5oVJGLUAIVPJ8o%n;pDp0F{1q=OjZ45^|F#BQT@DD(k8^aVqvs4Cnq zb1lR8CmA)zvd)k%_D%Y;OM&>F=I2SIk+CqskUrsO-1T`-bxRj@BWeytk)>r+!!V2$ zJF-;no|b_r87+9Nkia-Y_Pur2er(ORuP@uT&H2xp=EqgjMh;UJCK*QmX>>4+83yY# zWcdN%7rXrKcth!GA-sWIQVm@ZJ2L!j`p^C=Ar%Xt{pkEagkE$cvKB=yc}70A{EWnX zN4Cj^GN@sYtkW$ZKSUA3aIbm20|Sx|NM**JF!2kpNeVFun(_-t_8_yQMv(sob_I9? literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/TrafficDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/TrafficDecorator.class new file mode 100644 index 0000000000000000000000000000000000000000..1b754efa623555acffaeebc3be0233089f56df4c GIT binary patch literal 756 zcmZva%TC)+5QhJ8LL3`&Nhp`nQb_3~fK*HEqKhClMO{TzrJ(E&$q5|f*y!Y>6)#W; zu_=2bo`Fgfsf#{9AElI6s5-|nMIw>qk!Q|7-~1l?*WVvM0ldLW7Y?D)maRk!lju-% zjMT5g9W6Q?)!M$TyU34{ZL8j4B#!>e2!%}*E3-vds@8|7nY^~vB;?;EZRsNiFTfZI zgsHlU<%fQESLz+H8%aXBp0q^N6k6FlE9T9<>Je6l>GwU?2-BGb+0I527Ka;eZLz7g z7M}^Z>RQuUn+Y(Dk`KacfH{;1<5rLj^00tK7Y}*Nf%qiCNW^<#xJ^OQV=3@m(}X;OKI;1&1%7u)cAH z;srlB@HzTvbu3kmb3QjvA;1J@tj8p#n8Eu%DPz^r9Prk!Q0Du=9d0rmUPK-qiVU~N ofaNUCkdEDX271fG(z9=vFE4$^@*Qa4D`3dP2ngXhBOSc>2Ujzs5C8xG literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..6dd300435f4ce202a8e0a15cc2b99f9901ba4bda GIT binary patch literal 963 zcmZ`%U2hUW6g@+?Y}uk9C@r|w`6Okk<4T7i*aV5+hcDzjIu^|kUt z7mh%>CqK(-U;5qZn`Te7LV@^G?d$NFz+Ab~5O8WiTX~p6B8hp#1yXhGtHblNrZUH} z*;fLYdeD;nhBVs7<4Y$z)dPWiea7?qEPW=mFOVz0uTNzhg+}|`{Yt~dErDVr``E}% zN4E|prd(tNRwJ~xfovb>!Kc3b>LG)Khct55!ID6s92GU@@?8&k+;y=cupFs6W+ky| zJK?mA{NiFwU@gL|OJ7}S^iV*~MNwcgLado!FredWIEFxs zCr%Dmmr<3w;6A@K#KN~r*yCzpFkz8vazx;MgHZxEk>ZU_{*48e0zO_KeR6@!$q=`P zxKrQ$j^)u+VS2qzjW|jGsXj!pdg(rvj7TGau{{_zW B>Jk6| literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Client2.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Client2.class new file mode 100644 index 0000000000000000000000000000000000000000..599bf00277303375740d79f2ed338bf2174ea772 GIT binary patch literal 1076 zcmZ`&OHUI~6#g!K+@ThEBL!NaJ}49^0^$S3m=Y3`0TMwXDvL`y)WI@?w}ZyLf5N3J z*KQz@1o!?Z>o;XaF|C{X_|84&eCM3+{`~d*48R=jOSB0LmaUSjmFMb$+Vdb)vdl~XCK@9tYAPayu#c5H7+Ad;Kd5{MSvvXwvt?McKC7w9x?$67l& z*tPVg+O1jwJ*Hby)h(rM{~mx*?~Pp(7&8Btf03~dlsv61n z=UU``DKR3DY0B+qSq}S|z%Vj?Q?3f6bIo-IBw2}pF#)-$)!v?6lDH-?))YFhUWlGW z#=uPhqp00ljXjab31pi*L-PgKabyz6?t*)4@&v}WhB?92H-iqBxF*jZaPQ!)9hcEbgwDd?i#V~JQ*>>gP`#7e z4`OEv(a6$QJW0jUv#V1*y~pVPjN~bXxAP}Rn^QfbA(Hix>qKsZ$heP8n4cmd-5>o@ z|B*k&q)#dWpVV}NP7DTtnD6Qwb}lkytUmWxcf<81t`H6m_wPc z*w(RnJ{le>^HLs0ico7OJsEYS(V1TaUHe+6gpFDH%+M{uQZa+-7o!qZW-E&v>)pPQ zCxlXSyPM6nEU<)X0KyG{I;sSb38tNV+`@{7+uY}kJeFZ3<3ZRtO|2RV+`(N2B_qql z?L4iM@P*N_?O3DauvNi5Le>BE_1*cWkH0^R*Z#a8pT8XkSi`!924VS%DuD;sAb3X^ zD2kcgoWLi&Er$pBeuGXjGClQ7XPc}~C%!nT#~B+9{<9L_1hA#-7}$F3?ZM#(DDONv zL*+AnISAMWd2}vUUSq#LQ9)pyJ=S9Zi_GAKpjxn6xexd|XQ=Ue{Svp3H?P2jj|#&x pq+mIV3#5~6y#PJoW_j)lZq`=6;r=CPGM8Y;{1p(wLqw;BL&l!#V7~^4Whz^)biPIo5J!2_EAEW;A%V^^L|l rn%prjS0z?sOIGucGx1%y|AgubHvbeu%l1*p)eM7iR*hKQ_}l&hBj;<; literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/LaneDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/LaneDecorator.class new file mode 100644 index 0000000000000000000000000000000000000000..c310b12384ae8dc1a0501c9cefdc41823a884724 GIT binary patch literal 741 zcmZ{h&u-H|5XQerOq>{#H0d8op>0A7q^*PxJ#a|X3l%2|AqC~WO_s9Av8&An)H}DH zdhemf9$OBr#DNFkS;8wIW^F@3DY88BH~Yz@7SnmB!x^M`sDbJo79Y*5lkBv~;QL!?+gynYlKYM4RM{r&y1L>iNijO-e5o)1| zxpj^5C4Uv*arCk* zJ6+smy^w1k_gJwXRn(Zln?OBhby5vfHm}j(ckTvPO`Cgg7*>X#B7L^AnUzHr?5cCn d3s&jb7u;_wUt#qIl+9ITNbME~;Yo^m`U~{Iod5s; literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/RoadDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/RoadDisplay.class new file mode 100644 index 0000000000000000000000000000000000000000..18d1fb20c9170e4f5708aa00ab36bd35388bd327 GIT binary patch literal 533 zcmZvYJ5K^Z5Xb+^>)<>EdH5EwLkq8l=O5}E5RG(IHnk~Z@t_8L$A=ky6E3@3m@0r_sgz{8O#}&Wyt)~Xki`;3`R3x zxgOz*L;i5Qru1<+xPe*q+o~>hWboV6ul?5oDwaX}(fNT8z350}4T@~?jC^$U3Gusu yY?2LRP{SBmYgj;joFaya@8K+HO(NF=g6^2~noo6lok-u$@$u!&bL973fnTZtAX(V^%V zsW-!2Ejk_5+PSN{$d8iksNO*&j{nODg)J2;vrSm6)`zH>ytdvXRquHNkX}vv_#YtTG>1+=FKP7BdiY7A9}74rZWq&osA|e3^(4{VpDA` zjtIHxded5)2{4V455io4d6Wp_R*((y@E8j&p75B@;!uQbpVY#K&O(XAEnoKW)qo_)Xma`x}^>+iJHDe=_*!T@~78|wZZ-rV#iGz$l{zBeJKa^41 z-)~%~W+KqPp(CAa3ZxgSb%D%Q+)^&m$a&~Pzrb*yBei#Z*-++4HbNyZ62wgz)}_%l z|9H$K=ei>>8T`dxBle}#kw9tjH2BhSm>3kD9&M38Ww>2}xgH26Fv*@Q3Yfw) QDT?f$VPqB0vXVmO9RdM_%m4rY literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/RoadDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/RoadDisplay.class new file mode 100644 index 0000000000000000000000000000000000000000..01ed899e08297205aeac782999e62eb8e67d3d4a GIT binary patch literal 527 zcmaKoyH3ME5Jm4M0msHbNO->jU7)~16cj-;ASw$GLG){TfkloNZ5&W~ItoOehCkpT z0ixgo_!I)afEWkFLqaq&J3BLH@7|}kherSlC>lsHOa#JLn#W2zp4e4d%sX3(2dlDn z81jaJ3`6dKA8{w-(Vny69SA>W=vs3$a zZSIAFA@3@mhdW%$r2f3j#QU{lt#{CPoQR$-6+Hzd zC7~b^1rNZpm{&lYv5nkVF7}+6Isf_onX}KYk52%;W6eW~@VO?d+6b#nSdqut$Zz4H z7PURqIFH4}FJ(_7kw_02!ool)A-Am(Wp@ba^^GG!W>?pwk2DGavd9reB9+J=&3Z+e zpP~{=!g!>sB0dsExqbIAV^39s@Ff~(_kOby8`X^X_3po?#?AQOu|KmjpK1Ww}(jksPN5HwrJ8~1^=$cEMovy&mBm9l^ x0K;v!EHW(4v$zK;bU`UM;4Wy3ZQG!GOpebz;A0QubBP@o;`f0NR=AqN>Km(0hW-Em literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..579b143222916c193c16867d26725fd639181a51 GIT binary patch literal 582 zcmaJ;T}uK%6g{JBtLyqvmYHSIn-;WCk47&>5J*9a5k1ZBjykgL#<&*!tX>id`T_l@ z=&l9|SugkOnb~vhxpzLl-aY`FU{^8bf}-AGzgm zzh_+S~GCC*WpS= z{O3>$`*OrkZvNH3PToTADns?R{3hV;xg0%s{P|Xf{kG!W zu5=9KkutE3qK*xQ%D*}jo6#tmtN0TES3QbaSdxOqRn%^w55wM)krp!1Tt+JxD@R<& zXglfIx{sm>u@BlSy$%qgFWM(notQ<)2onbrBwwc22G!^qBuG;=XFm{Th^3H4j!q)+ xC7HztGw;aXP3SoeUs0HwWTzbyNRpjNg2=2m6QG1GVo6F;#x~h8>=2Kk@(mN0fmQ$j literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplay.class new file mode 100644 index 0000000000000000000000000000000000000000..ae2e16b47694019055062d71f9afd35943ad811d GIT binary patch literal 527 zcmaKozfJ-{5XQen;NV0-1pg!0sfCwlVS%yHSP?a1=oeUZ$#F}TLt}4eVeDyq1OFsS zEPMbTMf4SnbB6&&dzVX{a!zxUjVEjYaqaosfvoy+*R5tizB7Qs&$}vbz3$Y zHa|BIWJuKbDYtCy99w(kny9!8;SK3XcavdgajC=*+)`CxVhGU~LI^X&3(^t0t$JDL zLteH8L$aVM+%9n~z54qy=$^g*h&(N*YJL_)0!ag7zZ4bEo35zGFpdh~q>8R)_C@Fyg zBnm!&ZwbGE7;ktq5zWkw$M@Xv?EB~I8-O(w9V8g$Yoe+&H%j{zajdjh_4gI8ZOi6a z$S;qiISF_q93&a0|GmnPUYC(H8w@>*ONR`}Emad4^q|j03TcL1AS1EcYE*|lWf+EoxGj~xr)6ZyMho63^{Yd_q#ukPkPZf@Jxw;4=e%E2VVU>Ajp zY0NMm|F7Oj)&bRqROn^06*UUa@o(K?Bkc0uuB^i=*gJ@~ina|B^iy;@7btsFF}nA{ zpBDqc(4SW&9vpBj?YgxYGsm*Vu$2GT?$6MAkd-rvH=VA&o4yG9fIy8BhMTWsSwVWU%bhgQES{vFv%GqhT1y$E2u`TUfCOW^u zvNb@4E*GUo1Vv^iOVOc~Pnl7UFTEi7KtB<<6m8i`yC`~10p)I5F*_=XwmC=H>QdC) zOJ83b(9>{>BSzvRiQAx53ly=FZh_XwwgGy?VE_0tCfgvFO5{Kgw*!P>j;ayN{{meC Bjv@d6 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..344bc7cd7a26d7708a45374c8bf1e5c457504e5a GIT binary patch literal 590 zcmaJ;O;5r=5Pb`ULitn_5k=z-)Yt<@j2DcFNu!AnjPbOz3oI$ES&GJ=$RIGUsQ6D6+tWVf)w2~`!fT=a4ly%_dajP}DD&1bay ziL%9o47Ze;ul*#P6bGRF(k}rKI?-M!>V!G=c78A3^9 zk)ujTz9g{-<;*+scT@V7qgND`BH3BT7!o9xCPFAyoD)#OHlYMLDPxD^7LaQ1FGPG>?>aT(PgTSaNn0_t#~k z9`Kfd3`6daA8{w(Vb$4k4}}*obg#%zMym|z;`|;%W=;9RLK>!xE_5^Wmt`n6n>APH zUG4^gAzxM=5B9j0as7Fji4J6gVW#}Ah!QREH9t0yL*Br^FGZDBBN8{ZgXD8_BjKo3Rx;{oMfsu=pdhL;ll zT~z-3Iv@Q!_py!*53dR3IUNBis1m%MgTx7Qww#&?Ps)vBbfOr?5u!KyCo!On)dET9!@4vo&1F(gpuRUYyv z`Itdbpc3j>JsS4g%IwH?qy(yA(veY18g0*6u#oQQfxu>XrrbXdY*4Rj-I3ypIbuIBSDheXHxZ@;f z9i9SuK|gcn3*3*~yIzcmw6KQTWM|aHod)9W^sk<9M|FmQl%Ejv_-fq z@M$N&at6%VL1e(Yl()drCtR#9ea7+x<}n4n%_1g{(q9NiJPmSt3S^Fu$`pveIwf+b F{RSTZqs;&S literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithTraffic.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithTraffic.class new file mode 100644 index 0000000000000000000000000000000000000000..034ca5114a57d10c39e790eb0ac9f212fdbbeb55 GIT binary patch literal 676 zcmaKpxlRKy5Qcx}+GJTE-1kipDAcxgx0 zYXQGFmgeM8^Kw}h9mE)B{#7$1Hf1Qy7DF_%a>NkZRwdygij;>q5)A!08H&9|wIK8% zF9d>NFsF(wRp@pSWj`Sf{z zHUE8k_jP^eVg_>#W*LUMG-3nNg0fz99KPKM}YTZP`kDD0(dc6tR(^b literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/AirBagDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/AirBagDecorator.class new file mode 100644 index 0000000000000000000000000000000000000000..e88eec5fe73bb832300987de237917d7839f54e1 GIT binary patch literal 1188 zcmb7DTW=CU6#j-wmo5u!DJ^QTrCut#SXQl<2dYVnF(DzMX+z?h!!o7YEW2b~sz1sH zO|%$I`~m(b;~92s3289C%+8$oF6W#%`|J1jp8$67L_v(9(iN8H^T6{>@qzaTjxa6m zdxOCCTyxL%_j&L6Uxb1LLvPFMKS z`G$t;SXXfiTMBM7EKXxJ+(DT^Ipxk!w2m0I$`dxN&WW&s+9l2^HekqCtT3!hQliZC zb_&}JnbLbZI4)7CB^pIZGBw=8eVQUZ7znpJo`LD4E-{R1s!53*4G*zSoesRvjX^!| zhQ1|U*m4r`Qx95|`q-rQ$LZH$h{+M6U4r%sQnb#~={3dWecGsupc=)m$b6<_3=6bo z$5(SiRG<=Nkz%C~jwR&iL_{njPhxT>4PvyXXOH9$Bl)Z`LSdJdt54U8Z$A=x(m^F= znjA6{4%x^dNof{Im#U@ILx-3gr^vyiuXIluUy!*FmIRQTOj!#7ksy<^K@nN~9u*^T ng&){>L)mS9!_5)&+}$%&&+y$(_W7Ok6xFiW% literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/BasicCar.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/BasicCar.class new file mode 100644 index 0000000000000000000000000000000000000000..29db7e3fb137f8b97c2b41bcfc0759c15ae64ecc GIT binary patch literal 571 zcmaJ-%Sr<=6g`wE-Nl96beOzO84nB*2pv|=~VnE7Yd5t!VmDH z#5*&sh>I?gd+*6PCnx#({`drNhI$?r!_i2D+VEJLKs@rvG!j9`jh@C*tKgE)WZ32= z4~M~D#UxT&Po`Q46*IU~BSXQ!x(vBK04k4YSpWb4 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/CarComponent.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/CarComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..adc8ae1e5adfb64982006e6adc424b877bbd557b GIT binary patch literal 386 zcma)2yH3L}6g@Xhn-U6bp+CTub|3>Ih$RwIr3jFUx;w53t`fU4F5p^t)wUPF0|49lF-SfOF~@Ol}gdU-T+;`TKQY2CGX_V=Y*6Kta)zkEn$*P%U`(*@3g6TC|%gClj=$b zDdWEmPeXTn0^Y_40wVWv9N;oJlk5#&aNJIB!3Sq2Rh{Ga; z%av{tgp7qKVuWm4x$=B6>Pd4YdP7ObwY4LLU15};&x#T6M%@t(7u`PhM%;R0AiYbY z9CqfrTYfJE3+u=eQhda3(Q>afAz!YvZ^gZ^hr%7$9nUCtQ1{ha7K$jbx}zt?kxk_{ zS^WDyYCerUo-NEjl@Rg=90^{NoHe-~;yqP;=WqWN>1WPD$nu&A$S5MrC7D^} zT4Acj8giU57q}9;@dz`|Bi@P664e)^->~t>@zgOE)RTdeHPy_Vcm$NV;`cPiZ$8cO L*1!CApxXHXJW!fk literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..f8c26835e754acb35ff191ba9f0801bbca5f7003 GIT binary patch literal 1499 zcma)6%Tg0T6g^D>10g)aQvm@%6F`EXCB@~8`2&|O zEZ4dqRZ_(V_$7XYcscT%1Kj%5e+H!_t@ z>cP0Qt+ZoUW-y#Ibkot`7O35l+cKDxW+J$}v8BfyfwBq1G@MBRmp`y7;0{}xx(6;) zcu|Tnftsjc>Py+whHgKV8%bTDK5E5fa#h-fIv;{==cSPm=!sseBt({!G)#de|9bR~ zqL^bFW+D_=)lkPs#RAR9j1dn@+k;y8l+Xso^hW}#$Ud(;LG+R>?mbqNgmix)-OVJnrk zOg1T$PvI(?F&7JK=oRo6Bc;&^#vXK*!_Pu2$!$YJpFp6Pv$8tj9Z=pk$Q%okId}mx zjZXLuqO$_SxTRs_bg|!N96ja5ZHzLomF2iK7RqZ_!4-DfVLNo03VCoB;~K^;U}eXT zOXWof69VN4-C?9STgL&8crb}64fh3n`N2BPe{Ku52+av7+Z-MWev8Fy=NrArq9|nP{;|4Ct6jQ7}D~m=kN5)?* z%5?rJYFJ=4F)M4w^?5_x*UG{JFsKTGE>H+x4xofzyy09mo`T#3_tL%`%D?7+d$_9K zpg|>9Z^3|j6;BnYMhy`-* z;{yWutUL4N+Cc;hj8n;fj}T?vZCIi263e(udFd{qUZpkiC3tK!E)(L^gIO&ZaZH1W;pb|^!(JI%61{ZBq< zqSR>O5Aa7B@3bpy8UpcUcIM8x=bU@z?(aW8egW9RV*@dUd`mdW=YjHV@qu@`uCN{M zt8O5bXYbT2FaBK{NHCNxLRYxIJIFiDVHg)j&TC&ff`L^T#x zgcp>ng$6^SqFTa494QM1EQZbhU??;uz>v0(#2CX=O?u*0uhSI%9&fs2ZKkFi?l!nD z^*IbCf&+QPP`uD+v_oYED=bR1s2P{#66CB%YE@eVVXNZ#LRHs##lk!mO!9us!Xg$J zQUoH+5SNL{g)x&5#9a0E6~kP{6^jv+f5e%_OAOZZxL&BApo zo4AQ}1GgBaN3j-eBhO$QbGIjU_Zimn5t-fQp>TroIm#whP}J|Y!7v|937r)hn(=ZuG1ANqDX5{pfPOyhl1Wpfg!6Qjs(M8!?eZzu-_K$A#YohTCU-AxYgpW zDbGPL<{g{w7%DRpz0ji?gBDaJy3`Ja@=P*8&Z}fd_JkMoDq7O(ve+vcma(Ez^4B!1 zVucI{BuxY0Lf9{esRSYEx_#s@ES2=e2_JF8;&#tC@LbdG)f5yN^3&lLL(}RCSNh)2 za2;zZZedfwZHD=2tcE)%F(@N$4Mp>aVY3vnX|_*9$E#i9tYRHy`GOUOAWuS49coWiERxJu|}=-9N&;ZJ#dC@ zN4zvAgK*(Jt5O{s)cq*^GYk0}gwgW8L?ljXa`lI}y ziGtC@AK;HN-f0)u5CZYb?982W&pG$b-9LYS{syptrv_3CrMB>-;*nI2_{2NiKsX*( zvK#p_begXF>iF6~hGG38w98dvkav>9knMTiTjhI#fz=pBH~r9$o)b~2ehHN;J6#!y zFsjzdEryIM+rmT|ISU3XhPD4-D7VJIkhd^`QHF`SABs2q&bClnd^;d(g}U^3(BjJ1 z=Qx;&_WT}0#M>5Qm%JqGIz@31HyG}Dwez;pTu*^_A8-CgMgSJrG z!A%R-v1H;l?ig5Mm^_QMP(qo(IN(8FGN(0LY^>_1yvs0~Oo^S9 zTUo3#%-bLRXwPnTxQc97_5Gf(T^TAFXo7nd?&ATC74LRM*d7eUS%c?@$Msb;#X}2^ zuteRDtsZ_FlZJ?0S^A#&N^wsJkm2Vh7CDsWbI&Ik+ z0%Ag@hlC=!`WIA;#ub0TeoyXh{J^avR0?Z{a1OEYg|3D^hjh~ky5b4l;{oc)Ki8cL AZU6uP literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/BasicEMailContent.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/BasicEMailContent.class new file mode 100644 index 0000000000000000000000000000000000000000..7f379bf4f407b342fe4d0b26482826b2bdeaf3dd GIT binary patch literal 529 zcmZ{g&q~8U5XQerV`F1#wbpnRJTxtsgGZ$Yi=LvFO77cqi7RO$=~jF!1x4`S1Nczl z9(HzS_cz~uv)@0TUjWW`LY$0v5u;ajj zLud`Xumi%bgDtcPy+Eb%cDbJG!qW z)8p7?2HdsB(XA-#qt6xdr5Z7DfI+S0^Imq0-q3wv$iSbBRmwOOP|NV=mz4Vp>5p`z literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..d17c2aae93b020e808760388185408fe4dbd9a04 GIT binary patch literal 1090 zcma)+TTc@~6vzM53tN^dm7Ai1RS~w7vS__hW1$11UaSOK%%wMQO`D-&&jU?{i zE^FYoSd!VUv*X(bqzcKVWTRkW5orVW1eQkO4U;8t9}fh~x(a)&0y9?TUoI0%ST^uT zV7gO}i(!*k(FqwRn#A=CWUeUB_GzdBPr6(ENibm{t821GFKc9PhPgXESQl6sm1J4f zT7eo0kwcbUl|h~TpT4B2oUx{(=TTt!{}2Qcs+Wp(?gZr9-NV~YOtPOT3taYFK~3#A z`u&OStgq`rvi@u+KM)|o6Nj0rLCNMWxW`x9NPO#2+{?g!^c9ZpTPF;n`Eo7pogoZ;a)tix;@tGiUK^;J2oviGRU4ODAXZN{jZk9Cy; zj%CIp9840;Ab|zSE2P>W%_d2<$gBW+d-7S#9s=pfnNWe(i^4>P$>smC z0iAHTPJMOFOpXv5xlB%$qa%M4v`Z+Rt578u1jpVCafSrF7foaZ1#DR`U=a$oGc-Y{ zStz1JsQW6EH}ly@#>JI3x^g;pomr#zFiR6%qv>z(*n0 z5D7|}nSG4q+4=ZhfA}=4@aaGNgq4m44Ey z(Y98%<%+97=v^3V!j#Y%PZor9=9ZkJgY7=L=n)2mv3#>`OZIoVY?v@AT&0_Z_9ph5 zVH)nuBjLFCkC$^oUUS$uBOHt;#jmq@@W$3rGk0rW@s)|c4*wo=8rA6`#I@uABvOf6 o!Av?OOv2rhS8Tm}uXDk;hCJ92?EeUacM*fx!$77IkYIx07bFc)(f|Me literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/ExternalDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/ExternalDecorator.class new file mode 100644 index 0000000000000000000000000000000000000000..12f8cc74cb624f31cba37752bd62a8d70aecef71 GIT binary patch literal 1065 zcmZ`%OK;Oa5dJnz;?!~4rZp)Lpy5@Vgw`OAK|PQbaY*SQC=$nwy@ahCJ93?>{42OL z2qb<0KMFA$FQLlAmR9?i`5rU#`_GSG0AAsxfeb_47hV+eB#K>e#fPInxMIj<;GSG1 zA`W?Q{O{dBmcdyS-j2dVgvl(LA^%#2GC3j&r?V>S zn;jX7_v2w-#2O$NN@Xwy zBAI2`PQ7!^FS#4=aNu^6ScZd^aJ$p)CmwD*~TWFw3L&HZS5&8@V%PHWvJ6L5>n7^Yrs%Gi9BIo1*;}1s4{Hy z{7}42$3qdngy}MDDpSH!1{n62!v8bMV2ngE zLs@pKcge4~6Yy~4^pn^RM_rlWhKWto4KUm^v5g%DO@wazd6JNnJ&##HLl8IbtPDP< zLMasEEQN-<3_Hcjm#H6kA~tXzO%1z*D^{3zfQKY^#e-CwUlbgk4=;tAbQd@@(7+>k zS&u2^qEG`J2h_3VX&zm8645fzMu#2=pG-vPF&r*}&IML6sJjgunm9t8K~JK*=OogP z(%2QRefdtT!j&J%#1xXz&B$+sX7t2p)M#~#68%86-I+rFO0yCS8jWnXl2z7dy`5LV z#2T%r9_!d34(cfCimOjGQe&+>rAw29*4dLUw2@P;XNNjbuA)W)lD3%x6m11MZs9i3 z)d+KkX3`wJASLjIs-;=$2O94?-*9h=y{-Lg*w^?+M@AzP8Gmlun%TA#KZBF`din!A=4(5QhIQ$O;3E(yv^(Q61a<>#p(Icn>V$5W^N{Sl3S&wyGLeeM%IY-FH;e93F9c49|80y- zR;J|gHU*mP&ZbjlMrLUvy4I@pLfn-fKXLioa`F`fi{QmRv7k~zy8%Qv$9Sb)Ixe7u@obkb_Cmb>0 z(sO#^QxFQL5$-4yvj8;>P=iJN;bET| zT3pZ`x->(n?-@fquHSP#qSmLyR6N68T>T=S1hG7f#M3#&0nEFka#hJKX83>jJso0F0dZu>_f_JjZuwqwJ5iBM7hUf&{w%6wIa|IOrkF# w4U5QZl29k=eInOlY7;_ilXB3`26nJZaxA*Cb($q8X7L1jB#q%I?MdL-Ur|aN!7sV(@nC58 z<46X>PV&@B;ocdKq>8g-KK?An46l2) zXj*2b!=O2-FU7u~i@_L*ICIWmHJXbUC3(}tI;sZ9orx`MGgP?izLjIg` zBi>2%(6wcc^-@{H4h?yQb{KRrwJ3CI6dfW*A5d(yr_jIAUk(PHMv^Tg$TG!SDGDYk z6cHY)SR)P^A*vZypD?ONr8T9kP=waW-d9Sbl&i_5PLw5-sez)crv({p0eVJTrkcCd yK#8Np$QrySv=VFmMD0`iJMK@hv+?8_&#uw9>7%TXh=f0tZOvp`GuiD#*WO?KL*x1Y literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/SecureEMailContent.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/SecureEMailContent.class new file mode 100644 index 0000000000000000000000000000000000000000..b49d9fdf58e2c3cbb43c90348d8f552b50d9e60c GIT binary patch literal 967 zcma))+iuf95QhIvlh|?GLyBn##}wLBC z8Uzv#z(XNsZ7ZOpQchZMb+L!SiJ`=KNKGZ}d*&XdLXqjxE=-@k=v z(MnH1b23*-dx1*87*U-27O-0F#To^C$HW?H2H2a44b)kd0w?-Bi3N6Ua=R!au$H%w zJGrN9v6#k~SrQ1a+6%>I=6|om!MT~!Hyriwtq%DM&8sZN#l%XB6-Nosaq;KOZ z$PY<0@d11&nAOB=GBf8pXTI~zIcI%XQSCE8LEAZ1NLV zs4cT#NnyJhLJaX!e$Gvc+ii3A=v1^^hRAbiOZNpsFr8^KgbL2F&=Ew`Ko}8*nToVU zt=~Nos=<#e!7y8KTHI=KB|Uo#hTM+qF)Ua9At6unT`p~g`SknBm6W=xq}|SEni_60 ztokyPEOE~1ZB=gbwop+dFsI=bL&i6}-s*_szD2Y|&Rx+Sl#2%DahqX!zf|Abt<_5( z8s%zqUcNxrd`9E%Eno%qvsbQHR=_|P?6*WXUwt;(CVF(=TF|7Ef z_#Hb`bl<=OtWv9#_}CXccTy{=<=-@35qQE9STpd*D~{gS+21{QyR&!D@ZgMrtOskw z!`ka=xj+r%s!e@P`1FrqNp#;yx3e#LXO7(y4cQfHTt}f8*8CqckvncJP07NDr_oVP zzuh_OyVpqON50~~=3Uvk=Fsa-U$w*=Y0-?vMnk{p4H;6P>89TV2+)b9npTZ0lXgaX zID3hy&qKFPtLFw?h|y|{0%)HmD~cPKA;i1<2_gD`SKkmn3}0aO5_c-OxPF1fFG!8S zhXhvF{{Yhj);1>KRo>)~H%z%An8Oswj#Bkwct*%e%J1pPj&dT0b+QaR#RfJ>QHo~9 Tq*H*Rbv&k1kkBoP3E;^ug5V4s literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..726375252a722dfbbfda36deb6fd08b7da44096c GIT binary patch literal 1017 zcmah{-*3`T6#gy+3SDK0jyX2x=B7e7A^7VBvdnClEHW@67~<2VE38XtO({$GuarG( z(YW~RA7wnZL+Fdrhu(YcIp24`@1FDP_qS^R&yklAVp#8T-E-Vg-|$YIlLGI0hFdHg zny#UHren(pGbGOVIWJh;?iDKbu+I=`zGK*^{vTRm2p`rz))*ElwdV15>vgqRX)tVl znh%VXb<4C(Z;wIB=32yb;G7sSL=-SAsz~BCL$o|8NoT7wg$>U&?Oy39*NRi^9TgEo zV~|CVRv{xQcK1}o5GSgtX&bd+zhk%`c*imrQdLLiR*So)i2Xwa5*A5n+(Z-!qLDp`YN`t%@F6V%SXENdBmUvebhT=)PmAcz}nv<^2Q+h zI_h197eUy>es10y3sYGYkC0<{86-Hc_+U^9+&X2PIS^Ao?Nu7i(AAAMrg*r-bY}9R zkeoHlp3S|XOUY*eJ^?PzlebseFH)Z*npA0jMf4D$mD&d+GopEv3Dc@zf$CI>-cu~T z{CBW+>Xvkg#064*a5wA+OOYRxlEz3i+Tk&l8W&jpN{A3v=&#T!I5Tu>#y=GqnzRXj zk-agH(SnV@(Jpk@vAafxjXX0-hdYx&2nsuG?jy=2%+2!h_u} pl(~^{!^Wl(;?$$Z6Aq1P#9c~?X;*mi6YSr(5Hz222fP0I^baog;4Al!g=I^TwxYIGs@4M9u5JA+r4NElnh1*UYGWrr+7lfL_h zG?pfs_yhb=#ybm?Xlr67xpU`!o_ps0{PpbzfGzAA2r;Z4I!z`0(+*chvSmAmiu)V( zYnPumWG+ij`O^uI(AMR+jYFQeb6}OO~nurEe5vF5Nr1RJy%MfA-W?xp>`P} zx&3^duCi=#6Jb~uVwh$K=koP97-lR?A*!`&77RqmQWYM5)9*C6|ITT+oFQG6O~THF`|w{k0D?EPxM8Gcv~tN0F2`XZW*}w$2_&up5h$~3s@w4vQMMUSA%hdwBP!| zQ#Ivtr&Ba=n;|nHg3Q8ezv>IO#r+tv4Ca`<><1G|xT}Z0N9A(EdI5dItYW^dBUUUt zz$)?Pbi3RmJ{O6%OTnWS#TfE5&Btso%XU^5c&H0JVpzMX#Xk$_%ykPk9@FnBIfTS8 zm%H4%Xkrsj3~VvXUO|e5r+UJvuI4F*=cHy!rCq|diI*0(wbKZkuE&sQ@tzW%qlBcF zS(AOg$@hf*?97Oc+epsd*3Deq!=+Mdp8ZAt46ME(nuG$<*CB*|H_T&F}z!yM-6)|zfZt4*G9@lTYcqbgsJ`HrRc={x6G zE__9Dfcxp(00q)hqz|w*z=rOg8b>}GMqYSd{EaAq6<8=>8fC&XK~%XwR6%isXooO_ GQ2GtemDH;M literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorManager.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorManager.class new file mode 100644 index 0000000000000000000000000000000000000000..ad4b21fcc71d68c46bd2ac36c8a1fecf01f72d38 GIT binary patch literal 2006 zcmb7ETUQfT7~LnCG9(!Z0zo7N#aoj=h}KJ6LuoBa8yoNvjm4)Pl0z6BX6$6*TDb8OFbEK9jf z8k7TzmSC0mB2#Z@j`iT>UFi@xGK!O)QeqQWT<%4bET&m+okIQ zvwglD*p=F*s<$lDZd7{4bRAeQZPQy6C}c|S;h3!oXiH9A#Sul)Kmx-8(M-0gV?H%!qpQ_5Cj5IAPw0}SXmE|B@Z6~{4wu>?NEw2mo(p)i-9#=r@j zBotY%3#2k_UUvyo%s%uJpE3|bTp(FCZME9kT37Bpxo%O4k+M^hR#m#DzwT^m-lj6jPD?&a(drRm;O zUZ}jle5Nn?A>Kt_?xd@JXsM>xt(Nm~P|I95UCw~%*mR8J60YdDEO7QPw8~v>51WBc z@Tq{&Al!D#Dp%nCd!gOGvM%sm*kTMj#UaH+jrc=1> znzm1)l3T?%zQk8Lu66r;@3Da;a2oX|zK3NW(2Ugtmhp{_ui0Gt((?{z10~#K+c%X( zj=RSKHxFQ_Ytgx`iU&;jF3C#%aFq?LV3h<=2OoPW`|c?DlX%;}9e<=_4aakqEytl) zi8|ZFqL46lMHZ~O=!UPN5!!D^6e-VgkbaxVdc-y>YThDJM}nA^cn?iG%%rFSs;4CB$o zUoia&6Khl2_dA%ps^xyi_;Kw8(h)rPF)F6gKfnDuH}?!PzXm~1^Lq+|{0=c>62p8_ zydh^Wf;|5(V~o9-!WmjzYNy0moa2hg@ewiv1d+E4 zqUjJqN1iT|^ef!%Ji zc~(C22QIGuhR^cP@kKtDo_m2C8m4~m>5C27(zMWE9x n;lwTi^1bwV-0cvMM+Ns7VUTC{Q6&MB7{vpgYJ~M&5Pj`mjH?St literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..0061fbb5bb5552edf13a870ecc03f59e698607cb GIT binary patch literal 238 zcmX^0Z`VEs1_omWPId++Mh3OC#N?9vqRQOVl8pQm{lv7A)FMND*PPU{M4)hRaz<)O zX-;YpI|B!dNML_1?QI*C8xS&=A<$*h`}s@J4z4a9yUe>Mh0e}j~Eyjfo^1F OU<0uj*nuPy0|x-v;zy1E literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ResponseTimeScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ResponseTimeScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..14c6d36d3dfa82162dd22e364ec6da4e91a15c79 GIT binary patch literal 674 zcmZvaOH0E*5Xb+M#>PH;)pt*Nk+z6IJXXB;0HrEe>3y4w?Up=?7f*r*KY$-f zoTNrUa@d*7?0{S4cVc_(=);mp~{V>p&+bgi@>~b+P3vS;B&R*JlDO zVo4(T2e2YGExr<{9 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/SchedulerFactory.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/SchedulerFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..ad6b58d46b82e55cbccd87815e5746cf2486f775 GIT binary patch literal 1538 zcmaJ>T~iZR7=BI?vShPp)M6_lRU0q~mT0xwir8XIWXAvwS!5VHb(Z9qtX+1Q&4w9& zN^g7POs}Y&QKs#9*^A!x-#Cu#b2bplu=V16yzhBGp7-ng_5Qav0Ip#{LqcHksof0y z;Q6KuJASKdKMiGYwcKcSWUJ@Opw@rYkP^r}v$yTCYkTeT^2RgS3p~khiv8hw(@(n9IxF713Q%M=jJ_u#A8z+ecSPz@Qy&TP<$kis`xFbBZ;g54Z{M* z>y9UvdYcdI}Ki5!@n)gf@ozz{xSWQF2mQ^#q1qTyqK;)j49a%bQS#soA!XgQwkMwv1- zj0==vZLG-dmhW|? z+;YWsrPs0p1Cy8%$TF3t*9~p2$?}{o6zfMtnTm@j7$~B|0H~l6Viwr|diOsqF&&@T zxc*@cGu{0jWmxf=M{7dI9lsX{2s$5Wgm&|XMSCl1BMsLCregDR#7>5#{Zf@St!jGH zz*qR1-MnqPJ;_F#VYTBC#m17MjadV?ahZj_x4tyLXjT;Oj)89!Z)By~c(}aOs6MgG z#j1LlH*i(-QU4M;p^%v?o!RvWmCwFln zmwkmxbK^PVCmcHv%I*tI??jdqs;S89Fui7whfeTW+#<#bv6)0?5!rVbjZmNOBf~T< zQ!_#S=a?a?3P-SvE96`y{{)8KsiF8n*Wclccnd8ztY&;Kz#pS*0dp^Lef>|QcGh-r zy)F;+|#q}K;$&*|ld(8%eyrb2&s^x8l*;1`pU2APsnkAJX`)Ml8a8W1YrnA8yB~vYi!1kbR zgb|E_A*SF4;tZkUgpx>BE+bJ`id-nCS`p&jR1icc3|WBN3SGIV20m+;R=NSx=^>Nf^Z%p2~Pa zVSLU4PsLhO|Fl{ou&ZokH0c`Co}L(*!(A^+Set{f{aV`=9}WvX0~g|#VZ>&M%%$WifEUpcR;fLi{;GoUr(9{Q%SA^U^66 zPO#{KTLBLwJa8xIfu+z-;z?sHs#;)-gsKI{6!8Qr-$-Nzcj+1;X^@$FUPV-Cb0?3> zQ(f4U)0x#%+`qa>cq0lP2;b!TAs$WI-%vKuo)}|A`zWQ)wW9D-l~&I1IQy0U@mpXQ i79upz^h6^~9HAeLv-BAe4u1ejbf^~q literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..d96bde2dc71893ebd979264ebaa4c0b57401d939 GIT binary patch literal 1062 zcmb7D>rN9v6#k|cmM)7_DplknRm5I^RWSak@shSmleUoF4Dp8<%Fqtk?&5Sy(zo#y zQIFf5($mg}fNSGXPL*yJa! zP&;PMlEQX1gczcy{G6K>x7+6a(Wz*;3{%ggE!`Ik!DOn*5Xw2nLPro017S=t%$1}q zD*f(}P<4J}35NNS)8bZ>E9u!|FywY*k71?s4+&YK?{aA~#FOt!6Dc)UNxPj*H8tF1 zSodWpSmK=1+sfSLZJ{EFVL`(!hLmr3t<@37eT!&`oV%huDCP~sahqYbTBsfDS89b1 z^*6Fs%8f z_#Hb`bl<=OtW&F$_}CXc_o`M@%fD%y5O~63*f8+OD~?{@tL``6?j1Dh9-K0e_Fyf4 zSb1G8=BR;OwW-fBpZ+l{i|#w=cB-Ox=GZ+^mtCR8brgzW!~Zc?a>uQuDOnux)H}-Q zw>xKj_ZmrjB!xxyp#GO(ms$XE~3ld}S zA%W%1Kfok`m8~mql6Q5;8>U=SSim&Nj!^Yy@Qjd`l;6{n9_2&^n`9YyiY;uDq6E#1 TNv8ls>v&A3AfZnvCV-t^o$d@K literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..4d5d328680cb79a07dc29c98b23362bb73715882 GIT binary patch literal 1017 zcmah{-*3`T6#gy+3SDK0jyX2x=B5Ihkj)=2kY#4WWElfv1w(wgbcJ;(ttn**|CO?b zEgBb}{iBTMb_jh@`p|pNJ?H!G_uX@T{r+|X-~|dYLJX@Nu6vF<>>1vfb6Vsb&v18( zho)=jp6S>!!VHOXe!+_tx4XrPJ?Jrn8t)j^s{eFqH{*<6#D4xCdXhKK@&c@;_AWr&u?CFyK+s!;P>)9#jza?Lo^-cu1l zGzM7&X%#Y}V)sBr3~{2Wnzm6J^xB5|fwwJ#AysvBZZ)}Uir7C?AYq;)cxPsxZoS~v zz@W`WHaF9Wf;BvrvCfbTC>-`Zqo-m6n+$R8x_qcRpN9z7Vq~4-QAEf$w87o34iF}CFG5j@|5b*Q}i>+fRf72=pH7C;YH6Cq$ qq0Fs}TQ)Y45T_nJ9dqQVM%<;OSpFK%euDiQ7ee0W+`_iMKK}zhzu+l!~3| z?&lhGRb-pT5QJ$Wf?0-OHrI%PVa~)1!dkm#!a$fTHR19%gKm?1@9d_-8B#UbvYm$Q z3H=@$L+VKM8FID%L|#ZkT zRaYLjyF~-H8PZcC$SmB>?m#$g?nRJch)vkbe28HMclFTss9bhb&!=ycRm?SX#F~i* zSSQ}>UXQ!P=Q8njDR|tX7(tGv`Izx%+0N(!4|Rb@3>#Oq_-7%VxoN_}WBNTMN01m6 zvX^@oV<_OMfh~slD@ZZ%Oiwt|(>z7+g49f@R3>Z%yfU$^ordppT!wg?_myyMB_zFK zbvf`_d{5}lPEV+tF5af@hgI5z1AURK#>y$`oSimCPTGMT4waGIn{)w`5RP_te-?8#Ob>|$b z`L9R}aX*zEB2Rjf^dUBec%r)}Cy~!bkr&>VegoY?LwNtCuQVpgB4FvJY)8vp2PG|7sgthwa zyT8FFpLGcpS<5A_{0;wy_)V?_)1oUYv(7pD_U*mDy`TU6`yT)<;wu|5fm8Qn&4hYq zTbZq}UX=HY(ie)?eDzTBd0hswp|lN4VEn#(D2u)f8pRu%_f^dZq-tScbm;p^H>pr= zYqX5#7t3DLxB`ia*9fF(X(iykB3>#V7<#4e+FhonWYcJARAZ;KDsXPNX{ENM>Mh?3 z8kN2>O%E-3foGNlirLctFw9j2td+2?l89r>K?>sn@ocVYV?tnZkn2^g3DolYUidFS>UhEwkmZhi8Tt=oLP&sAGfH zuY|3DWDq6(J$7m!5y&0vZ%>m24p)qvN^}@i-Rg<`YOExYFoIWU+(rcYTac~(|1e}I4T^vda+|CY9bQo0kHAU&WbrX0W zi#9%ZY4|ETO{2CQxL6_!!WK)P?vTI>i#N3w7_wiv8q;QBrl>S=UWjl0i??rB*m8jb4? zK1Z1aU>_pvrQE*Q zGEvuGlTyDXoR{%VJygAyF9)R(wscLcc|M17s`uWl!})0FG0#Dcb6dyw;}+q~Zr?_D z=XAHv%m)r7hk1Jji+X^Y-^FPDDURID>|*i}rsK;$;rLU`+?}(&*~RRlmH!pf$E+vF z#Bk^PxR}fQ_~Nhp!XwQ8O!GM2=JzB<_)XF!S06*98DbuzDDZrlFN<7vr>JqM6B4I! zhBpSsS!4+)Iz=F3n4rHL-{Q1)kjFXtT%ddcu@`h}*$~1;fhMzjE#jSSIzM#NDG=@a zZ+Lg(7ra+^j1LR>%)%3_Sh&*8Bh5TYG5m>{%ww!a3B=k7Ot*neGL0#WVVcg5GVIJA k(1kwe0&aFe7w`qXq=ym8D!4_^vzWwfN-e^ww!Po^2P0DNSO5S3 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..fe86b17e18084fc139624f9afce1917681824689 GIT binary patch literal 238 zcmX^0Z`VEs1_omWPId++Mh3OC#N?9vqRQOVl8pQm{lv7A)FLB&*PPU{M4)hRaz<)O zX-;YpI|B!dNML_1?QI*C8xS&=A<$*h`}s@J4z4a9yUe>Mh0e}j~Eyjfo^1F OU<0uj*nuPy0|x-xct?={ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ResponseTimeScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ResponseTimeScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..67fbd63ecdf6ba9d0aab40f8aba3fb3e271a3c1d GIT binary patch literal 910 zcma))OK;Oa5Xb)$yD@g1G?elxua*N!B7`M4262HRrAk2}RV9uadz)-=)|I`f#CPJr z<4_4Cu1I_+#H$i`ZoO`?)l;EQ!Rik@@53 zjVw+xUC2WD?MI&@a z|Cco&G@mN1%rk=1?Hv)^=UE~HIB13N5fC;;O3PP^`9$W2Vv|JCil2jOZ650?VgTKtZUh~FKE)75_3g-m&b zRVHEoA2T@+T1;g=7}js$g~}PHGCk-G3Eq4e&Bs$8Ue&Fr+-f2VqqMLL0x`r-Dkfp4 z9&=HZ5R9`$9?O?1cwPHeCquJjHrv*lwGSJ-2d_c+=;`VGkozoM8{mE@!!9-xmWlo4Uk2IDSkN|ZagNn)<4y@~;4bc!eeab1 F-QQmv-q!#C literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/SchedulerFactory.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/SchedulerFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..100502f41059dbaa22e4959eab4e80cf6ce5fa8c GIT binary patch literal 1572 zcmb7E(QX?>6g^`*yYXg2O-l-dq%`29wgWa4NC7v6#Ift8j#I@>qo@zn#-7?+HoMV! z9jTwfD=(FJ3PmawLVZEvfloqJ%b9iR62(;FVQ1#vnS1X!ch1gV&wqOg;4^%uBPOtT z-)@C|@bEx}UB6wh?}swDT4=PovfX!OP#Ny(NC>1J*hhB3wY^SZYyW|4g#y>oja{o* zs@`j^t=G!wQ@PT^T&9+wp8S z>J$^r;gXJdf!x?c+p>4)dp+574&(@riT80?V2ac&uNT^0i|x#1{s)~8RM8IwGGmK2 zyMf>DbPxNlI%{ANS9C1#+9K)nL&q(YY*%`1J5YEs0vCzk>?WJHh@6RKd_>BGtXgPg zDH)^pFA*(|zl(8-v+wDtAH&1Lj8k~vmQ+(4ev*x0MDZCWMe`_{yo@=b4- z8@IRWjq<&wwOLj>B@-KJ$7oi!w{~t;Z|^j9R0L*U{nK^7(QkDtj&$4QAn*en8qYUK zz9lP;OSR05#8eqR3wafd1#*k?Nf9YS5#%aP4}V~eNm>QYg7ZY~R~SEY5rfH5i<}y! zxi*If@CMG&N+N|f=~2Od@U%)^7qtP-=bm6D{}WBD^HWLH-YmZbewhK@t35(`fCWzT z1Ef<^Pmo=mOPN2y7;frnbNM)mR4A6BDwC{|L>dMaH-)RjR3w%)qNx%|4KoqS%R?mi z7$Etw%`g()fl(;-#@pV`6CR{eqQaCQ0#Wm_r%!%@?=;!C4Ju+!_r8SdDmD{{X|Jeb)d0 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/SchedulingStrategyID.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/SchedulingStrategyID.class new file mode 100644 index 0000000000000000000000000000000000000000..9303e3148e962aa1ba94fb6d5bf8634f7124eb0b GIT binary patch literal 1157 zcmb7DU2oE07(Fiq3SGA$QrR-vh z#>H!Yl<|2R+GSm0?{60XUSdmzhaqvub$e({`i6Zp>}2?%ZCG0w zO+PX^%J4EQ9rF{O>G44~Qyh%@42uUvZNFC4il6GGN|9ls{NI9E z2Bp4tP;0#3+i%nvf>CRft*gpO?#U`iYJ;3-omhB z1mIJ^5K?giVFrJ0Mv27BSCJ?zMb4HI%^-1as_?-dfGogm6|w*U0ajH6;1_pmDuPfL zmdobAsE+$>!>aRk&tM3bhdS>yxn&CM6ctDakstfW9Fc_+-WwZqla43mNvL2QPh~uz zFfQklk!|!0LJ6m!^{#&BVGy%s_?U3QEyKVMb5_60} zL`|tk;5ox9w^pIYN29FEz@_+A7_nJmIke%}(v5efc%9MfRx&MmD6eLA2izW8#CzkC z7CN~(OmAm*Hfg33eIDMOs2Dy#C(YeCY2-j?RSaA(XayFa5`U2pCoF#X?_jO)l5~dU zQ>-}Pme&Ch2i);FAnN}?JZXv*t>v8}qP2Weig=3HR}%5yE?xa34Kj1jsfa3V?(A`! zR2Meovkz(g~occolxGk_t i3qcxaa;A|aj?h=aEP0NNpJ4y)^C0bLX7Iu}H~#>)5DRMn literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ThroughputScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ThroughputScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..0bbb65c86c051a1108c391f9832e9c7c56c4eee8 GIT binary patch literal 904 zcma))O>fgc5Qg80)3|n>G%W?ncgq1KIbf+AgSbGEQl)T6Rf*%q-o{%TyRz4n_)i?# za;O9nS0sKEV%CZ20ZU+cJs+NVW@mPP{`&eIzzaOJ(IE6rM4;2`(_HE(4SjK_T+=d_UYkihN^&idfU$#Kzdre|UWX0{w>{Wcby;ikJJBNecqq=6yXoXI<^fij zgoA%f)U<$S|5 zd3VbQ>N0E__m;>5mQ532eJ;apHsh6vgT-G4navo`eLUbCqdml<65POJJSqF$DgC>@ E0eWTJGCA@$pBn6GFHO8mucIXb-3r=@Q_$B@h zeUL;Fe}F&Ac%~PN*eEY^&YW}R`_65C{QUMEz!oe6F^0ksx5Gf4c_MUzp2d$sp|-4D zR|-EgkYLCj^HXlQ-0xejy2ru}8B*KQm*EaWyi)BjBzA+IFcC*OgCtT63r*>Z!^rCj z)#hDSFf29$o4XyZq`r@hiO`V)hLz?&QfLso$EDAZuY71uQ)z`t`u#?=W8fCU&P;?C zt~ljX+X44^U#NF7bl!-;N#GAeTY92pJE9l41Y;tLoX-6=u~qh~oiy^eXW%YFaVGMf zRMZF=_!%tWK11y7YlhX?b^MNPm{>;9zzRcoChC=ZGkAbiYNiq&BQXdkUV2^G{~wj^ z%R`3k>+tBlv>g>hedieHliGbYHeEWE3u zQDX$57}jRjI%&svxU?rrBb>iV(IEMe@6Y_S!)yhSvc*g3(w5GT*1oRS3? cjXJ7iqc2Z;xItQsqD^d)7AI?sVq&QO0xxtGWdHyG literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..3b75f44515de40f23f19133ae74bb776ec9914e8 GIT binary patch literal 1017 zcmah{QE$>v6#gy+3SDK0jyX2x=B5IhkU8}QvdnClEMs7-V2DqbuCOkpHKi=!UnzUo zqH*!rA7wnZL+Fdrhu(YcIp24`@1FDP_qQ7WyC}#AF|2mD?m6zTXLx7MX_0q4!`&?& zny#UHren(pGbGOW1ut6M?iMTdpvMquykl6a{vTRm2p`rz))?k0wZ_S2^G&r;(HPc0 z%?8HGx@Fp?x5pr5b4_A8a88XFA_^GhRU~njAzB`nq_fqjLd|ncyIVTSHRDu!PelaL z7-SKoRmg~n-2)Xd#EGhE+D2{AYa8wd-nI;eRMpYB)#R=zV*gNqgn5$Sotb^Q^@3Xi zgEkx4+)O75*6>)yIzuv`aM<^Zo{9}@GQ_#-@}cg09x~*EKI-jrYC-8JVD0Y_d1H`$ z9rX^w%OGrQKR4@*g{iEHC&)3p3KASxyx%VcZk;er9f&EQ_9~h)aCPIYDIP8{nVEtp zBxjo0wYfKNDfuG6C&1-d^7cymJJctMCRN&B5l!LAS}hcXrd^45^xI*-pdu zgno~WA$27B47u8WqAxN;J5os>U=%lS%fQV)=Bc0d74Mo@!ZP8L0~&3y=8r3+_0|)v zswY-eK+ffda$)6{MJWrYD@~X`Ui@L29N{DigLXyfU$^ordppT!wg?_myyMB_zFK zbvf`_d{5}lPEV+tF5af@hgI5z1AURK#>y$`oSimCPTGMT4waGIn{)w`5RP_te-?8#Ob>|$b z`L9R}aX*zEB2Rjf^dUBec%r)}Cy~!bkr&>Venn)pY2 zGCrCp1WAm~{ty3#dUpFolz?g4-MRP9xo6I~(;vUSeglxfk{^n|*rr}|EPHQ9I$KsL zt#3Ng&ZHlka#v?~MX%^(Y5SoHgtzrwJ#Ffha{B4Uwk$dV!J<`hY|AvIU1dSutEf4K zna&$kCo9lhFv=C(so7E>`&W7{e`@Qc7Ib!jNS$*=#c&n`)I=`1#>bLXk^%V8qoEtU z0=`6Y&5y7^f1AakZR>k3l>kDBxP^gk2n=ZGK&Kz)1SbBILjX}kg1CT~9~T9B+dW)( z4RKr|1-(=fh$iX>J*HGP`9dI+H!52Z z)~a>s+44t<=fe?pB^q2U_eGw8)-)}-ov z7$4z^9dQMtWD((djBg4vL0rW+F(;T0LHSJ}pC3X9U{F=vsq(g_2wbQCmY^Msji&Z7 zxjL1KO&(%e#jNVmjjD&3QScqn*go#KY!#1f#ADLOjs0XhKps(#;Y=N>#c&i^k0IeP Zhj~xQAuQlN8HTy{0plu(EPBWf{{R%xY>WT^ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithDynamicScheduling.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithDynamicScheduling.class new file mode 100644 index 0000000000000000000000000000000000000000..33a3a186166aa0271536813fb97a0900fb74e887 GIT binary patch literal 962 zcma)4O>fgc5Pj=}xOE(w76^fcQlJzkmB^td6zC;@6v^d4qH^9k+jzm*jqG)$-uNwC zxWWY@4*UTA6Nqt~Mo2_eWNFtk`{up*`t|3>PXLEFuwgMgJL7@T@x@q}P!HSu%!v4~ z{VEdYoZQD;@sWt%NfW-jP<$+deh`Xb8c8*>QDoR#C7hx3TqZu6c|uoL4~2sQ z)?HjfiDAQ+O1w$Ory?Hk(?~FE`8wdy36EuF&z(gR%7mfguOhoN>kerJTA5f!k%+rG zRfd7}7~GLC^WsFz(DIsBi!87m2RCrb#!brkJwNB|)X1pa<&jWB9=oXFHba@%dnz$p z1yoy&$p44Vi0-(!i*1Gi1?27OIk<=WHg+hfrDeYr$waF}4CGiWvdVNf9X!Y)A2N7L zBL`uu(@{7{|E+vI$w!=Z!CSQllxnC`im3Dr4?Z08$!uaaJcj+H+LtS~$e6+D6Gb3i z%WVG5OTbk-_%!Px6-oV~odzuWqkW>&ChLf7i|$fu`#aXY&fXn5otf7ry${u|#L4 xRHn}*o(k&3+91wMb2n$3Yg*)gggw$K(=t6KoQ3^7{x|A2p0EPFHOXV4^%pyI^Nauh literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.class new file mode 100644 index 0000000000000000000000000000000000000000..ee85789c1faef9dffb99a1e23b82e9c53a74b4d7 GIT binary patch literal 711 zcma)3%TB{E5FCfl&`=)b{Wu|UC?L^8k3|&{0;y8r00_<|T^gg*MvjBTU%?5)fe+xL z5ZknHp`iF+d)Biv>)nsfw|4*yYzFWITDLNC#y zx%iyYd!tjjRDHULV(Mmz(!Bt_z;+Q0fzpA}%C!XiT6^b;k0aBi5ECd@Fo}}DTt{g- z%lbEDFXc@_0t+1z$>d5}HNc~w?_!k-9CnJ>{#|;L4I`tSHAzDD$Yk0Hh_*nbM{e{( zvI4uco&TMFxXloYSPrnnNn>jp(?hZqte`3|&8}^oI;kW6csU)mcu+vCsJ%dVVKN)h zi5fI-zwi|I@8pBT76cDtuspu;M0gJvwHSMRmUcH^F!h|jhrEY*bTVg7GhP|8P{9l% t=3^Fftl?uG)gLV}WWDli_nw&LvCg;F6m!e?t>rUo6>F>^u%72^d;wWFxbOe~ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithThroughputScheduling.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithThroughputScheduling.class new file mode 100644 index 0000000000000000000000000000000000000000..fba3c63f57b078af2de6200ea2a553a37429af5d GIT binary patch literal 703 zcma)3%T5A85Uj?Pl?6q7;DeKi2S6hSju0+H6B6_S!Sk>T?3!iA46`Kum7X*n`~W}7 z*vrF8G(Yo*God&`4daTnBP0IDIQZF_QY; zH(uA%DjIo@k?FXe97KU1j%-+j^K}#m$+{o=T8WY_BytIeZ0nYt_qD-K_GQgMWG>3i;x+~Wqnc; z%Ei+EK8s#RU30LHLmLN#;>w@>>YvmZgmvRrt@*30bP;oX^MnQ0@$iAmRc$1IxDm+W*y;}H3%oOH>ckojka6> literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..5bd296a4c7152c6747aa2421963c42e06b9d6c19 GIT binary patch literal 238 zcmX^0Z`VEs1_omWPId++Mh3OC#N?9vqRQOVl8pQm{lv7A)FNYj*PPU{M4)hRaz<)O zX-;YpI|B!dNML_1?QI*C8xS&=A<$*h`}s@J4z4a9yUe>Mh0e}j~Eyjfo^1F OU<0uj*nuPy0|x-z4o8## literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ResponseTimeScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ResponseTimeScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..5ee80a2e1d8caa46556566288f0dcec5578f63b0 GIT binary patch literal 910 zcma))OK;Oa5Xb)$yD@g1G?elxua*N!B7_e;262HRrAk2}RV9uadz)-=)|I`f#CPJr z<4_4Cu1I_+#H-|rL~OGB{al(^mPF#j$b2t) zBa5?47xGBWoElOb>cPf;V4A^YPS&S9L2Yx0=YpC@n05Kn(Gdib>e1 z$6Qt=1mkRx$MU60c~slA6MbTD5O#SY4zD#{fgKUwNe2ykoa|X=D`H73*ZLO-Ke5t4 zo4?Ja6C13DE4_oOZ28#4HTKx#eU7%z)@N+}KA-#ev$ F_cwEz-rxWL literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ThroughputScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ThroughputScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..d8dd2b366f62f081b46f6b66ce990b4fe59ab198 GIT binary patch literal 904 zcma))OK;Oa5Xb)$r*Z8%Y5D-lyXAnA9PpvXATCg(R4E)%RpPj@xA7LouIzOsz7q!u zhf1x)6^Rdpm~~=$z!F$q&%-mn*_qv+zplRn*vB&)4MOi!1Uk(=&83dg&=;p#X8Zne zl%>TiIxqAjh-6sAGPBVnbkD?v@MDq8{P)u{8E6|V!t+|jK`bu>qyG>HPF~Tt@c93- zhJ@Bjl_>p+VDtmJ3cg1`vvtu!hC1G=%1|mKYnKJg$+0>EB z34{8=H7#@LwVBkTB-bJd7(3|o>y!WLb?AU_$AgVkm$f#(6D@*|N8)_Bn@%oc9$=M8 zIQ+*%jzl76G8>NSx9~<~j8kbc?2iccd=bruQy*T{t*G2;D08h6VHgBrh!a*!!frk0 zwkpA$q(v6Uw<_jQ?bOWkg}FW0<9S%TR(QE)Kzti5G|W-5XN@hNC9zx?T*13!rGXBA zTMH-FS@)KD7aMFj*u)llO!5Ion`iqgwtt{~1Nv}*^B`_z(dY4+9NzJ!3{jY)3Wc~(!ci` Dj>p{X literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..c2ff048b18c4181f0f88caf33431fcb3111d3057 GIT binary patch literal 704 zcmah{$w~u35Pdx+88b$WM&rK31rr4a@fh*q0zzCs4Tz^s(#Dp_47L-&&(ec}f*;^V ziEk2@OVmqMS9iTvud4d({rMHZIu>nM0+ScA8V2UBp~B0c=2p~2VAPts2rW|x3nL->1f&P;A)j_jSQRYNeJS8w# z3aZj8OQWOs^D-7*>KlRS(q9^ir5`QFq0xT5SSZ^V5LoO?vE!**$@cc8 zFYC%UNFx(z93p9cuTV}Ri%}aR0yCWnwzXl$I`C5%!?=KTdL)qhMeuiWF)B2f!W5=C z45O}_>L&csLb3V1e;HbHm8Q=5WID7>C8{B?^b5~dt9=FlcUhir& zP2|8m@<#v`Puw4^&B&z}^zr2KW`%NAu}xc%nQYF2}z&v9M3m>%0rKbP@ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..f56b432012cd85afa3de32d2901d819d23226b51 GIT binary patch literal 1023 zcma)4?{Csj6g`gug|2RhjyX2n4^e?l2wC(CWSQA8S!7_WV2Ga{U142HYf4$df2Hih z7LALa{iBTcbqI}#!G7p__uYHWJLlc|^VioK0DCCN2r+DQx$ZgcsBd^@&S|k@bRE|y z6^~5U&^^G0<6*0t#s%F|oec109?t9*`42ERQ(Ye*)t|?;wP=SOclHi@01G@Es zTSJ33nQU&p6$P8vma)Z<2uK_aJfpATF)|Es?z()WJD)}j`Jj<4l9~7bamskDV}a|IyVJT zNY*s7XLE1pQgScAC%~1t`u58QC2EyK^C}&ziZ%kYQU`%VTJ(=HVOkX|P@PKAJBr0u z_y*Qa-jS}bc!{JR+zNTSepT(R6sI)km~PctP7ze@*y5g;4jI9fTzY-X}^*3H|>g0b0V!>V`KL- pWo~8MvazXzI5p|%gdp> zq>++n;sf|l#yi`VM#02Pa_7$dJon7~`Rm&c0Grq`5Mr!UYwz}j+v0unSyt|L}V zJitRD&gpi!M}#gCahHNeEs8PZX_}9@V3w_%F7QYfc+9YRRf~TX(wS=}3V1@_r{oY4 z!<==wcQJttJTl!iIX)2%h#hIX4g~8nSdW;_6<^IIpYl4g$|8fwZbc`t*kA(&UoJ+>8k5y zQZr|ouKOSTjqEIfI40%nu3ZCx1?P*i>YY|5woIo~-gfMjMlw&f zW%P<}X9c|R#YCQe^JY={;XzPE0Nnzfcp~pZNT9dbz?@}iyKWbL^q|j8R68JWRmByw z`7j_5zbt(}`q39a1Ti0?0$t4_F20HzxJeFLu_zFZpA6~Dl+%efJ`4#YE-rUL%YFz_BB z3I!n+`O^jb&4@tqKY(WzEzr4QYlU}9+IF2((30;RS+yJ0DcSg93&0n;MOo@*C7sB- zL%6F_=l3}Asx%mALgeBt5E?0U-KQ^6Y0=&60~HVPh+8a4P9aR4{k=z522WI^p;F8x z(>50j)1;UKMYgB&Eg^A6ij5`&hFY*}_Q{v-q&Hb?Q0MShOvft71>NAL`x^dwOH;1; zFhq5D_!&@mQO~q|HLIOAB~yDQGpLMo()tQ7FW_nN0A0x=^sGe=(7T7QXZ91KN9bRR zdfy)4+H&#>!jp%%uHf|tMMNVXkAE?JaP0uYdl>ml2oFYiA4WUx9R&5Gn}xzGHONxq ze4arNS$c0XBY9F5V~Eot0VL?7fZ4)0pA?=7U;>lGonkx)<(Oa|AA}IV09`5Esduqe z?;=K)Bgx3bKBluS;n*SWEBJx_$UYvs9F-c!uG)w~#P3BEeP{T@PWi-;sqq0~m?dk4 P*&(t_@~ptK8rIw&>$G4P literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ThroughputScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ThroughputScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..2a99a380c17e21879cacb2e5f96ca7182f3ae9ef GIT binary patch literal 628 zcma)3%TB^T6g?M;$U{MVv1KJ-Vq;ul-1tZ^s0#@Dp&jUu(wdt@Es9$C>@zsOXB2ZMKF4>pFC05m^+<$YG06>8U_I#;SYsYhOZ8-$WwE|Y46_;>JWD4(&tCq`f?%oF9^M6ihnJ65P_IT-RY+2 zZj|Og6$YJFmyn+=<%E+I{qI~t$(8d+1;T_7h*JvgI+V~z$=TdXDE7lxJMvEXJgoX3 zt2i@TKm$B;UL}y>FP=4Ho|(;+xaQjL*nUgeMMl#G8%m7jrGV=WGoB+VjK+M=)#94T kz8b{FnM<7QWq0K?iYoS!v}pE3swnIZ}9mju=Dc zhTn73;ht^Q8#kgEFeG-QCxcyvp>oAyi0%0;VPFWUG~!4wjMbzkPC9NwsB_+M1Vgsw zH@RbRCByjpG8SCRJBDKIFAi10ce(T!^5v`AFPF1GNzblUEFI$vtNkGk9C6QSykqWh zTPOn=v6#gy+3SDK0jyX1+o2bxD$XxUVvdnClEHW@wFvO<|E38XtO({$GSIQo? zXk2{uM;XuU5E>JMedxXCp7VY8`|deEe|^0Mu#19>5W{+xcRa@(^$qXTIVrY{uHzcd zi-)FbbUf3sWrP_LXZ)NOEpGRU6?@oc2sPd^Y*go9OAO(|`iC0BLZ#L?&Ng3F8x@^l z^W%RYW95!z+NQV1Am#E+qB?L+j2I#c7#39|ahoApo|L3>)tN@!b4|NfI?6ZWRC`B7 z1ko5|5u{bfh>G1k6*0t#s%qLsZP;%c?t9+042D$I>2RybT~oyVp#lkuB*8m12XyN> zw}u97vbp?xD+(TBQ^p2EG9Ym@@Ql8SN60e7x$E*#$N4m3(1J$l?KA2^=_ugs&k>np zkbNQbF2jo;Y~nvZ_mzdMoQlWD|HW`%@xh=JxOPf8vmhpcI;`l<(CrwnP4RSz>D&}V zAz9PSp3S|XOUc~;p8%KV>f0;r?@+5GnpbImMYIv1l{yF{GopW#3Dc@zf$CI>-cc;R z!Z)y1>Xvkg#064*a5wA+OOfxClEz5st?(F2`URH15F&&X`YW^w&J5j}@lQpDhHb*X zL+3(|tZl7bVs!?LQUS^IL8`x(u_lC)$oqIOfxjdZ0-hdYx%EcUu3KfH=2%+2!us}S p%G}7fVPjJXaca_&35P~C;w~k{v@1OQ0rqcP2%68ig>8R*_8Yh4;(h=C literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorController.class new file mode 100644 index 0000000000000000000000000000000000000000..3a97665da1be94fad76245800500062640c11ae9 GIT binary patch literal 972 zcma)4U2hUW6g>l!1-hk3TT$C8RjbQti&8&J;X$xT6Jkv;B*yr#z?4q2?2u(>(s%!m z#?nL+e}F&AcxQnUZB5K1ckbNJbI;tLzrOtdu!XXL5QBB#w3PHux?CN~cD~6Eq|Xca z*DgPH$X=12@}=u?-#~;Rb>tj7dDrne`Tgb*Zz+b5Xfv=qhFELh@48a@4AC9o2~}o@ zSbMn!T@~5p34~#qh+&Q)Y~>npFwC2nK~!s3Oc;ogr6xT7X3%YN|DDrxIYYW8TaMds ze4*cCV?-T_K7(ERU-(6actIM9bvWmHej#xKw z5BG^Ur`O{i5xPReT?ihxD8`VZX+CCyS+=vfzyn?2A;ZRHE&f?ZXKtFv;}LzIk|RhA zi`K>7#RLj?VqlA5;Sy3zJk=A<^fXT~JSR0wpJCQsK1I@w zoFer(2uzbqBSJDt(x9Xmk|Y<%a+MM(4U1T!TWh)v?KXKP#XnJ&j;ek^<~vs3r*EBM z&Hjqy5O>qo5H{&4(udd>;<4_YnnXSuMV@o8$s4i&;QMN~aUR7G)&XooO_ GQ2Gs^^3`zw literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorManager.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorManager.class new file mode 100644 index 0000000000000000000000000000000000000000..7e73fc7e68ca2e8e6808093bc0c38f0267e44f93 GIT binary patch literal 1719 zcma)6UvJw~96i@@YU(&m)-K&jvW-H=l5|~ITe?BILYu8DkY+%uqVj~B+$A2aT^xJT z-uWW%GVzE6E2R?RneV~NKE%p#5+~J2rOER3{qy^G&hK3R^XkvP04(7v4T`|^$7aKK zy=Mo~Z@bOXzI^O@a`QOQ+_%ZeWX)}u_O9t! z;kv)6`fZDJ-WbWx|9V4eQo}Y>+`wUDM3t{4pbt+3iX#J#BwQf5?VFA7x6H$SQ7KRU z5Xg=nDTC6itn`E!ViO#0WZ z{00P9LrJcOyljNRtM<7&E4@&;_YFLN&I{RceRtD#U5~Uk*-wktlbzy8GwPba>^b!f z8%z66#3-3O$3DU{V1!~-+it+*=^iPv8QEy43tSt`>>w`{y-oLq+_Y>;t<8 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..24214f66ca3f443cc90a27deef7715a9ba9d7e37 GIT binary patch literal 241 zcmaKnJqp4=6olvblcv1iYGs2k=nhrih(3!!Qi< zzV~`Ro&ffkx)=~vsgSic_bb=APP~{?ZFuJ$6}Q6Xk<2-16dM;K!lD$d@RX=B?-G|R zYr_1-%9_4U2-o5N$+M_L#>NkR^bUowgN3gAO+c7Mx-pVZg<`_8Kl8=fc0>+=Ftkqr OWGTmRItSP40Fw{l$4IvT literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ResponseTimeScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ResponseTimeScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..22422467600519f910b36d160090206f3fddaccb GIT binary patch literal 681 zcmZ{iO;5r=5Qg7@LghnI{N~0<(P$GrV!Zf~V5%l!yf5ttYf5X{LgIh&;>pB=KfoVl zoEFf;l*7(+X5V>sI=f%rAD;k@(J+xC>^~|e4#Jlq$AiGNdi)rKd}Q5m^c?sR-|HcF zodLTek3$m%VfjgomE|eFZ{7Bu*ojRP2|L-C3y;T2@V^K`@kIMNJ|*OLTMq=|EO5Du zJStU~SRmAF?eooO*yHeC^*koj?Z8pqg9>#LPm@MG&=KLl&OSJ^|2APMVo!RW^+m9E z=MZL+YvrpxhwaWB-MJ10r~|*<>JZG~L@pDVqyNt(R9uc??W+VrAfc4p8I;hR!}&Xx zQ0@k!(BVt%$+#Ms|9+TU8=8>0%PPnV$cdMUi!DiHi6`-ey?2z~((S6)Vw%ijQNF7a z0hUmcNL~U~#3sd8;tlaR<2A9OoK+Um%Du_%v@%iDv6|9ySi`!+Np1t1X>(g?wEY7d C-K@O; literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ThroughputScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ThroughputScheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..c8f200756aa1cfbf3480ef651310cc6ad6c2da1c GIT binary patch literal 675 zcmZ`%O;5r=5PbuM%7>!(h2A&`nAk**7%zS#n5qW|_oZFvlG2)`CGkIb@nqt`AK;HN zP77#a;IK1&v+uo~o$c56$0vXb9Gl1xnnU44p?;aj$O~O-Acvur=T^_tVLbAl>K`4~?IQuoBbmxQVvI>PS@trEN_8j+`_gj0L{4)-riA($pTBbn z#cmjDN8Tx)hgDl~^Rwj1PzTSPSB~F4!D;?JNDK{p*>m^abDr~@^PKbh&(B`~?x3K+#}IpGlpV|dSmVyIRY~&?My*lh z>9S$htO`$O4O@YqVf4g!Z=|b6{V2VAc*4sLL!jByiO$VyxGs9377L}9Z%ezmZSlUKK^5-|iyFcRF^m+=I^Q|19di4Xaabi?$BS0k zs2&)$DgM1nzjJIh8REUkklcgRj3OysB0WijMBgPaC{5W%3QP6d#*CPqK+_#cf77uV zVcf)R1-BTM`_odx8Z_#aob{Y_R;OW16p{x5XkDW%x=TelhAl*P*I|O!kEn5Z!>sa3 zjytp~ydvBmX?P&86p8g(a(S#FBOr#|pgrC&OxtyTs$o;O%lUDkX&DMaA)4j@g7hR> z;yw)#fgQPnZfnE))~Q|Qc_Kl6w8d*;ff1wV0or~)d;)?_J~0;3lKj$=_+$sklU9ws zL-hBCq8Qn@{vE^mSB&aEFm;Y79p~I*OxM35dXD%P39>}rDM}%L`~)*XFtZrO0-cuW zRsa(mZXiLHAqm|}l_o3R0)!X)Oa~tXSWsS$wFL)S!6~eG!JFjm6W)62A1YyaJ3)jd zCBl^JPVb@>m3h)Dbb>C3`gv}x+xOdFq2iw{kOhq2}HQ3Xci0{1#W zB9u1TMoDc^QgL4v&BWAnr}VHBZH_3-ccnyA_8&?cogguyw9tbRO=fpWPdd>SiPBP6 zN?Um5VYEx0{nR0OqAmDR^6geVmy$=$k?l;MBFR_UiV3#*8t zrmV8`>uyC^ThcEEGEfGh0)zYVy|il5sanr>_fljSnmQUU_~CVCMQ7%13|de*G(D*u(-tto+_f?JlglJsr8?*ya4 zp4|{QL)p+QwMH9(>m@OYaRXxl=~MlgIFAW|ctZt6PpJwiGCSHsqM^6j?guA1ZMBv+Y_heA@|%fv;peXW)v!cy|H}+fH?}Y1b;skK?L< z5f)yZP9lw2-LN@wW!hxn(Ap`vY)Ko-nwZA|6<3cHv%5Pw`G$!_SR9!2Jmt{J6s?@# z>6Fgtj9VsdV~J#e+b$w7k~x_|>@rpi+!Yx9k4F>twB}w<+m2(E%jxy?4H{a;nu&FN zXoQC~N1!i|epkEL5lC@*<#$h|*BQGJw*Iw8G0Lg(rsSnv<1AFbyQ@dk-wwZ2p0s@( zNEY3uUsid-NOyGk7q!-Cn)fckUk)d$FCSMit_;K(NpP1(4?jS1{*d2=??`>&t_K5r z_J^6h#K(v=Fv!?g8;x@q;*NPCt03Dj%ns)YF@k4_`EN)?S{Uh4Cd2du%O^uRokC!T zPT&G2IwYT1Rtqb9#pF+<-we$h;+iIGA=AS37H+n1XR;Icj6S`ZWUV9k{gd#V))5J< zjZrozcnT@Z(Wpf=PiU!Yv2bj$fDJsLs)u2=u%ZHwC{zEpY?4C1xAdEkZ9aSO_%GF+ B1c literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarStateFactory.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarStateFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..4071b8cd61deb83c8523cfc4f1bb9b3c035e1d0b GIT binary patch literal 1482 zcmb7ET~8B16g|_gZI?wVAPNE&DbNVYZ(g@6cu0ZRc&paQE!8 zYP{i<1Iti#?o{lup)PW#RUu9qdl>qLvUb4!`#o|$BGA1`o5 z21A#EAi634L~<)9qX)Mn++;|!mQHR-K`;6kB-<&QRc?9ZB%FQ>N*G{BUX4?*oeH-+ zHVW<_#?VG($yELr-S}V;|JapN|<06y*j0f`HxV~Cq>UgqS;dl?%_T?h9hp( z44UIKjX{evD9;E%JW%iuBMgyzPJ6zs6_=KU^^tL?kfxGk zB!j6hkU!GF2Zi>KXY`|;&Pv?@*U&*)1W{Zki@5xryal+*v@>+3KI6vZ2U0OiOMv=l z_0Sp|Kf`V97-5n_+QbQ&{9c$I;zY5@F@zYgN)WF!WG`&24vjcQ$VV_8#Tdc*$RmLy z$rM@X1Nw=WgmEbl4HHs#gW5YUPhjd4>CNv5oNSyyJ^v=JrcNAGPefl}T@wXfJx+^YxtPeEk0N{Sv@y6l8=LvWMLChVGdg8Xoto`mT&H!{RYN-ENm&yCh@ zjbWkI+;6P6cl7<5!I1xS8=P3#bnJocRT!jfuFVjx66qKs3K$Y9lDJD0%d?PlR-e;1 zJl7udO7&bjPOL1kPL90j6AEa;yKo7cHDLO#2lVXXz0O? zTHRyI^h)(WlmATAC4=lUY8^6Ef@!ls_?bxt-ksr z1b;?fQc&;*_@l%#yFy=t%EG;K?z!K0fBpXc6TmjQ4oU)#KFA$dA&GWHRwzk55#P2~>7MR~Bb0o)+61X``0~w8^(H8$Tma}7hD$pJNPcJ*H6HA>4w0rM|S3MnOMkkY< z{>VX7pmR+sY3lG$vtr4`Ewlxk)2UM7+bQ$+UiL?pT5)mPQnj4gPtOx;z2oApoo-1b z6V7)ab)>?5m2o91v<_=7?pue&!r_gYN^Mlg#L`SSXzL$+bBEly!1{GdkcJzmAEsv} zPzS6muuvRn)9wNtFca?!l=$KmC>f`uPud?=E@7K@(qRXic9)F!CSM~+sfa$WrlkNcU5#VFIPd8UxS6( s#H%d&fT)WmHqgQrkMa!5*u_fj-7XrSPlt_E@e~iS&i42R6PNJ#4{xrW00000 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/LimpState.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/LimpState.class new file mode 100644 index 0000000000000000000000000000000000000000..b309cb934234feeae4dd850070b3dd93aea75141 GIT binary patch literal 1691 zcma)6U2hvj6g`u~S=-szNg5}#2_|DxzG}r*ruQ~ z#*wu#1zR9nbv(7-@4i&wQ~Ad6Zi^aVn2pvm-=GvG? zE{!~j777BZBj;md4Ic<350#EOk#D|GG2L$2DB(j+P6mPUIs(hod#3S_YuO+^wz;OC zvY7U%k3t0I^JgKVMHbZ(U#lz z(#Ac5up)%(2~24jo(P)elDEID$zZr3^U6EqChbYbRh=EBRa+~{qi$~96mgYk^xlwxR%J7xij5S~X+C8IGBJ~e3ZxUNjuBh4v5&`m@5p1{54+N>@ih=A(#Vm+ zjN6zpPi!>MG}}tgv}A#`b4ZEt#)fp$?}u%*M~g`F_+7bW=7m+VH~$1<-2DV58Cg-3 zMB0esbAoq#XL&QtXp7Mpe(-@MdvX z>jz9kS&cV%=PfS3m|Ho*mEv!>Ho%PmZVvF#0P9P`gP$<-DU@lcr0iDu&#h&FnS zKPDm8o5CI*FfxwS$;8~{-r(V%$h?JkQ9Qy|zv3Yee&$6?G!u7c2eHMYc7RR^e_kcYgXorAFBpwU92t8wWx7rm1zrY{x z&Id4n90?>|k@zUYsdk503c`M|Yq{s#bMC#>-@bqP0^lMxEF=VS&tz5m;j4zy&;43K zy_Aiht_oEdHvF0@todO>)+<_SWuaf-^zXx0WEjN?3^WZ!AnWvoC<+WNx}K|-nWP6$ zF}Equze0^^^dV!zLQ-JFaXq!R-FT|P$MR{N`Ntf;D(jmvbj?0K?AOoTrociMZ5`$* zua7kmIMD^e3NY4c21?a70!qx5a+@hkV%ox#!05m7g)G#iw^gXTYHHQ6aS(?{?r&>> zNhi8?{la?adb*-RB^yNxGXm2cK+Vgoo7--^rotqSFkQu@yE>P~VH`81m?KxVP1ep8 zL0GdC1diJn#epFV7w`|WjnC2=YFx)Q4BNa$DRJ9}?@od9WF9Q~4?)D4iafs6ue><$I zRTho&-tmUcn?7QmRDJvaG0-q`HGqV9y*x>Ax6ECF|AYC39i;!~Dgm3n>FCsAbP_|{ zPqm{kj1le_Z-$y2eDWBNx!#~ZigMm#;xi6E8Jpd~(fmiuw{W6`Tnpz~_;V&cc#Di# z&9rc7H~gRd;YFjUFH$r`Ek@TYGJGFqtcP%)diK;gKh-((b&aa7M`%&t@&<0kGG9}s z;KllG-e1Wy+C~?L{fiz$q5!1}5-;A0;EzZs(4rrf9*5b*9y<*f(^p}M*S+oTLjk=U20dXKOSTn7vQ8}^= zTMFp8e%VgJra+`puGYQkaPi#o!r)f9R<^eV2GW_lfPa_Dq8PxihCyf{To+jB>#D=H zyeMKARrO;6OX$Op+aDpQ_vuITEhE-P2-b=rIT5bqr``66HoJd)Q~n~ zRn3u1Vz8YzSYHCxX0RXo`Eohq%M$dH|EmfoL!#VKboeyGk4ED_ndoY_xGP4zW^*@$3R42VNX^9*FS8iVBf7;>Z5FU zb!Ang-*BtSDyu!$SJsyFi-8Q3ftbM1fqXBmx^!yRi}Hc01Oidw1#*R6$?^j6HQTX+ z4Jyd=o|Y{M#I`6bg(&(>7%*8plPx77Fkqq&ae={t?WpIiMp^l*)=Sd2 z^}ZX71^aeW!0Ner*a0e!H3Qd6VGI)n#sxCHnl^DBlLCpR3W}amRWfCEwWDNHZ@1kK zP7>3&WZ>dIO)efb1Jy8b88bBNw%G5nLO284wO;zR6BGkq$wuD56@iJ<=`d_Nwau1Y zuPQ%*YXU}Ccy%U)S=`X=nvid@CHGLT>-$=wbj`~j)l5&!ew zk^aJ61cST|gqeNB$B8vC#MpQTjdK|0j(H)gAlnGcF6Rm{g3pqCrSF7n I^BTdEzfhwS7ytkO literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..39fad41874ba93ab646c806787ba21162fbb142a GIT binary patch literal 756 zcmb7BO-~b16g{t$PFqGgwO9}p1(mc^nFOO7&<%vdq|rpMiDC6Rb16fnGtFc0W9yGF z@n^Uxi6;I4f0XgO851@xFfY0Ho%?z2y}y2c{|Vp;)*X}-ddE7*QuApn*-0Au@==c` zvG{>D<1`e1D95Q0e>aXK$sCjwyi@&N`>{?&{_EkX1ero*CrYC1g~CjyJ5VU^GP8~u z)LhJ>qR{9^iM%==55*knVJr&Q`)Q!#fi{uFe~snrBsx=g-2V?s+iW-1QKHc99Q7}$ z9b_g-M%&$igQh~~Y8ADq!$ZxA1s6BaR&dTHBH`N!+jL%b2iCRZ;-+=ga@St^A+gq5 zE^gad7bF>R+I=0x67EUH1xaWFR$Sb*0rN$`8=2_HNXWw4j5v1dAN09V9ztQ`iYw8E z`=}qJ=O&PS5>S{cF1KkngH^B~Zx59C<7p@zBA;4O&u(0x`Ym_YDXkk!n4@%y0P1T* zHO!+yi%tH@VkPS5Kj6K);AMMFe3_y}^?8cL-W1C{FSG`4#bR$O|L2w|?i9Yurki=Y y3aWe!Hfj?uv*|sebu{q^Eo|{N&#;IcEalPdf&gPyNu-LWSi^nNQ+PmJ!oxovbf=^M literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/LimpState.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/LimpState.class new file mode 100644 index 0000000000000000000000000000000000000000..7845e8db5b3d018b017e01a34a81ab6568146550 GIT binary patch literal 1485 zcma)5>rN9v7(D}pg|ZbWH?dX03zj03s~1YEP(Z6KAk{{Hk)a*R>UMXtof>%>6XOeL zOi48H0emRqH`}F<;E(?3Zoip1=R4=@H-G;A{0(3UyBaze=8kwt+U`kJ$YZ;l5TAI} zF-4-p-Kt#{i9>N@yCRV@s!l<2DKrEaX4}GKxa&a}hH}~b-a&qMbL$|#{`R1-x3#s& zz_JXXjBV8))>0i49k#d>J!Vg+bKC+WC&zPauA&e>F7m}p+9F>Vy9j` z6z*$&XbOgK&MtAY$X!F#{$fBL8#RXc_PVvQNHTO%P7Lw(fD{Npw3;JC`He$zW7+9q zFUByg;VQ$xd;XCpOm0;Yg_D{TRUOw5p&oW!GK}QBZNpCNxrQYR(iOa#)Nq|)>;h2I zW@V#pm}TMi;3l;zsCKIpK}0dBV!1_Ju_jrwmj|Kzdckl9z(3%{B=wt z&d^g4(rZYvW7ApH^uCT+%+Xinjw7rxLzHY^>hDWVD#W~w1uPPow8!&LgTf~4O5gig%l+z$R7EoQM}UJ+!qcvTv1m2w{<+jbDDXg+_Bv% zH}f>E3=8C~-I%=#MaHM_LdQ$w)HsnF$%$vN{oB%{Q96SKyY806HhCb?t`V$)uVnrfI+J0 zyc#y*pzn(jpX)PmE3W^Ez}gq|sXEfY zqcc$QGAN~VbwcSHB}E|pQBpWd4pyM!6+#y@?&D13KAw8c*F7{_A(hk*VLg wXO$8Nt^DfEO`nTlvjt3%M|G}W32&O&Y9M<~(~K@ma)&NZ^|z?<1n$7jKOm!8cmMzZ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/NormalState.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/NormalState.class new file mode 100644 index 0000000000000000000000000000000000000000..ad176d79922a809dfd6538a144ba4b1cbf23a79d GIT binary patch literal 1533 zcma)6>rN9v7(D}p?PUclP%of@Hwuc2c&C8MO_2qORT6&=?SQN8?q)j}eFfjZ|Gt36 zltdFBz=txP*%oMmiOnXPxqRn*=X~?c{QmRf7l2#Xu+SkewIfS9h(1=8eiM`(^+8s{ zigHRass?4{Y^$9hQqD#YRb{29rB)Ua0+Vf_7G)Ge1iEKE-_!F1=G}Ioh4C$c#3EIs z(TS9eE_4g@x}L8#_Nv<|dMURnN+9b7C0W^$k!R-3#e{z2)dZ&7%hqDAAkazk0u${) z>5&kt7AjSK6;g11b$ly@ehgX|5a@d=-%F<={avT{v8GkkMh>T#BiPddgKoU-1Ls-ES1V(K1 zpf`<+xNPB)K)&4*uyF-f1(Lf;#|bGrKfY>`=535)g6As3Q2AwnVcI^HzbUz35Z7%? z;s(idK%4X53DvK8r7RC!5hRnm$U>3z$jT(Gf- zB@&Uv^{U}IJ5=B%&9qzB_)^g6MXcC(f~Tf`C|^tROt*hQ8Z_pX^fVN|P@(i9RZe1! zYp;CuA*Aw=<@d^Gv!#o{UQ|*mbj7}GY55zb&=_T>bn;;U5*+ca@o#Z9j}Cr7_r$e* zB)@Xhfi(Z=c(p5z%y6D-M8U=h&KPf+jvUN|lTEJAlmx!S{=?%bKwgzW;9gC?St@p$HN~OMV+yt9JK&R3?qdxt~khGje3sMxrgdp%wmqJ z=3}&QIDCjlO_`tK5&)YAdH*HTXzQE(k2n+5u=BW%<)h*?r1ns1FYj0%9wUqAd^C(y pn<|*QDOF(gP}e;c&+MhBEBmaD*n8_~4AOnBg(P)I;u6+@^}o!NXwU!v literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..1c9d09f3b9a6835dfeb352af7f0d7f73349c2804 GIT binary patch literal 1100 zcmb7D+fEZv6kVsCc6u41fL1Gbp&-oA%Lw>Hjfp8%n+(+iZ9;sSw#RnJbjFNRA|K_0 zJc!Z65AdUmYbX(orp1@D&%Um8_TK0Fk1yWp$bJHcW58krfYkB^Lgh`c0+;WL&tN%M*?x(XbUKHzb7+@BdsBUq`<7@ zc(OGbc4Y9)9Zw*yzqT$I?T3Nm^=n2u zjX5l+m=`c6RojbR*Op$-51P9guHu?N%z7$Nnn>c0v|0w&QBZM1K%a`$7&lqNO)Lte z`Z7GLCGbN34@6^nY)!>2f$AhePh5Fq^Zj+-3j^PEWst!V?nFboE3mFNFM(pTqnx6K z6|4%R`|M}K_5FbJ(VOEjtZ7(}`l>!Vc-7i{+@#A6`W*DaKPJa8w}0M}l}q3YWV^rU zZwlO>nDh6Gxk%dJc;xkL=N$F7dRqdSeSZ{mWy5i~wb}7Es7CvSWpLm5e}EWo+;g5P zHIq_MCN@ry`grEf@QmDGLYAjC4xqe3EsYt>(h?xL5sYMT5rFr zw`vAM@ypEkOx1L3&klDPq++Q}g!}%nl|f1Y!-9$&?lPpSb7S!25#31KJl(&G34vM$(=S2Y+*-E1rioWLU?NT zDeDDy1{PhkVrkZb6ghLXt^q$W1S((gMbfB|9mKjW92lvXEYc6@D>-9 z$RI~@nkNi;95(JkX~vF=5{oJ}P-1u;=h=67zpuxVPl%_5hz+5cD~3M^OzXWZ+BiSi zr?Lp70u8(8@o*5(Ki1W(wq1#6;;ONvDE2ic`sI zkS)IQPq0q@j&z0jOXMTtelju^Q@`j*8X<3Vk|Qh{mst8vhy<4DpC%s4hLy-8ytH~_ z?j7#`I#$p^+dVP{}jx8k@ht{*OyQi#WHi9i1=#0f7+mWdHyG literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/ElevatorController.class new file mode 100644 index 0000000000000000000000000000000000000000..b0bfceea85e0da4b783bed55bc5bd11ba199058d GIT binary patch literal 1589 zcma)6?{gDX6g@B5vPoFlkOr!@XeuD-QW_9{5?Ym(YBWi!fgm8lOY&?NH@lh5rqFNj zpZLKUKhvRMMrZs3{F{{FyiH1nDQ5Vxd*6Nc-t*3R_r8Cg|M@q7i)fgL2`u~~o1q_U zw^g|5w+iZ^Y)uDWVV(pdJrFz{Vh1ttuE^nJM{3$FAw3Tut~su>EzoR)wn z2_%}mVAb{gKwvB?B5<-i3ZtTtiUNl&JDw9R37pB7-XLMFE?_MCEtNtX;}%kw5QyjJ z>PZM3wP50qwk9o%4Xk4p5=aV6lpRl1d+mk_uE~b01Ttm6Dc!mZ9K9Yojd0WH3Y;H# zl!N+^NOFUWh7uV0l0MN1yl3KFfzzXeSaAYM>G+<79A+u$^>vCd68~jNQDdC6a7rf{ zD{D8ZDSUvui8BJTqd+6|EzH4YUfbWI9CrQC7t@ma)PC2>rp41hV;q*u@l9@r{YE*_*Es#X?Cl9P4PE68Mg0ZgFubmq3NAau1wv zljn?M&B8jqC)$PzmtEOqt4_Xx7C8x4!*vta*!KH6M_U%^`m`qVtFp~0TE&kRZfbBd z0(U*#Lbomaq$kVhhJHuja7%SV$CJ8EDP3!?Wd)AZLfQPaB0IzRN!9#b&{V6Ap0KIC zd)$9W7W8>A%Mp$9HHssq=ag1VPj2+*v_^ln0S+_H;;O-Y9iO$I;fQVQB5hCaB4f|* zBKstYKF;rP)&lDo{3ki}gJKx9Y9i06O7j9-QKEucKW%~FmbGeTtol3ipull&E z&zs(h{B{tjcQfTdWVVlLA3tyr#oy4y`?#ga#YqgXNdy!li3uD*87fgc5Pg#-abgT@(>CFo1X}8(v_5b&;s6M72oxzO630!vv|HKU$lX-rXTc$r zK;j4RqY$%>5s``_E<2u`d2iml_0M15egJriBL^jd|4EFE&Sr@;r#cGcXOT=|86=u7 zgEzBj8VU8*CJxGk&Z_RbjZl52Qe~bK*8J{}P=2W+>0%9a4;54i>wT5Vchh7fvkzhv zOG2Zs$08nzOxe7+ESpnxPU!Vlja(KO66%S*kcEt%zY_UMWpZqkPQ&i7j!kSiXb?8e z#DxfAk)8yD*}0L4hi&ZeDtc-NJN>+@bnre?sTr6|iX?QLjA zmX*~mw6=47Z5K`4v5wqjUVlNnn47~{mF>9i;Q`w0shCV;8W9ecTaQO)yhGT%f-Z)K zmg1p@N7yCQjAp^CjIixrg>dg<_zw12?mxEl(6vgPiCsKS+3M(zfrS14beiA}^fVjG z*UCQo=JM+u*`erwz2?6YDDfBnE_^zi1ssWErFV(im%QxqY0F^1H9oyX1IO!}m2m^> zd}G1KoRv7XzGCA$njafCFLC=|j(c--=Ggm7=jLq{Hm#adHW#phk_phm0h1D*FkK0U FzXAJj(`Ntx literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/LGMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..864ac09e931e3f4fec3e290ace217c8faa046ff7 GIT binary patch literal 824 zcma)4O>fgc5Pg#-abiqA(l+6ngtpX4X?@@r!~qb!7>blC630!vv|HKU$lX-*XTc$r zK;j4RqY$%>5tWJ}E;~Cr^WMCDyFY(@`vKrN4jhySTc5<(=oMrGpQdO3lDzQY3u`Ekf%W&~WkO)l|ii%xbtxShlj- z;bA+M)^^dvee1&mru65W^N~4{1=)^A9v-93PKwDyrV(NPdh5~XjOF*cH_*l0zNL8L zVGG-Yn$fJ4MG-dqn-K1O3g5vlVf`N$^w70Ror%43oU+T&AMXge|7kM89q4H`mT#4P zY_E8;13M2Lu*3WlffDcdfAH#X7H}kvmEILm?`_{4&b zI4f~%eZ}f`G(R@(T;bl{3=e1M%&_y9&du8@>{m6XY|dc?B@>{BJtieQW4aRde*+`= B%2xmY literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Motor.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Motor.class new file mode 100644 index 0000000000000000000000000000000000000000..bcac48474bdf03973e485cf22169841bdbca0629 GIT binary patch literal 1114 zcmb7CO>fgc5Pj=7apE{%1yULcZCXkbC*T7Tm!e)MAf%+Jlqz?}F|FG;jvOa~Kg5|< z&`KQm0sJO}n6aIf52*oJTJO%zyf^RdeEad`D}bkXtUwZ|zBR4D^WVF6aO@2X`<>~I zhqmE*6g1krDv$+=C+5sFhUVzV==4u)D-g(rIo-evrW1jBYavjSx+9Q!?u?vZS0GWV z_XOk@-oRFoKvsi-bOt#T6yycA{}EC{5h($sd)PTRc)6E>z>`aEzdHCJ=1si90%p#*dY;{i$zfT`6D|BotbNI)c!|(e)30ov$mKv_Aa!`^=70) zzqxA9@#&QuZ?seIsbt6l4a>O8-mYt?vNfr8r}t+6HD7LOc!*Vj3`2*~IQmG#3Mv#G z%(3W6Zfy0MR3Jw!Tc>SvJhylfcw+&z>rH*je&z66s3F%Ao-Mgbj0qY{0g0cEb}8D^ zJkXk<(=NpY{Wbj(s(udbGfHQ4mT-&Kd{~==OjTK`y3LtUKJK7QC&Bt-EQ9`xmDE3> z^pQ3Z2or+Hu8Wg#vBXZq#oUNQc`3c|TMKF!<+;m+2<0d%MqoKCi;3@HHO87z4vVhn z7r5VUo@4C;JLb>9qU>h~!;QpCa vLY=b6%J0Z2$jLIlH$`ZSt_*%gS*$<(m${L$GTFNPi#O?*O`t(l5}H2&6z$?z literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..10218fb6f240c3f68f28c6983f49586e30d2f57b GIT binary patch literal 1267 zcmaizOHUI~6vzL!uc6aH%EKy83smewTNDrt#sq=Vh5<~9kcNdB+7Sk)9Wu5=R<8Xd zB(4w>A!1m%@G}|pKhuJ;p^Lfqo-^n1JLjJJ^Y^!N026pB!6OiVqm^oweNfSBJ61WP zzt<{zrk<%-RA!c)HQO+d;1dY%YWrHo)T-N=)vaBYHuD03XGYbiJs0rC6YB!LIjgM8@FJu@LYqK`YE<==dSy$u z*R(BD7wA&0l4h=Jw&BQ4rLVSQyc0;OSMpy|&Wu3YwqA3Q1YX8lJ6?d#BwE|f$PnmO z;71Q@iYGSnG9tJw;g&$6CE`UU1-QC`A;!02@`)J3-{8T|-JxYOc} za|iWmSu>h0LkO`k`LW1O()QRkure)-XAsoi1p$@odtLCx%Jw<*O56*+J*Y zOAQB{YmicgyWs9mo>mLlB*LT>U%BLV9e zp^b<7QN$ShE+xL!Ux-Q=lcjJQ{d<~NAKV&&@ngh`Kj1ssI7RaOyS$VUP6L-#R zv+Q`}EH}kp4|p&f$cQt{pYn5Fwz=Cc*W97QkZiU)_0|W5LSsgp3WKa4wD@dd}^kNta^2FuNoLkMKmsV}?wG>Sz#{j*6#PXGnA3=Oe>A8&R*Kg4(@P z(+Dc{h{iuI5=jjY3AK+I-bB+TeVBc8LS|mYGZYwJMUi%GJ{VLY`iSP6zjgi&6@i7+l3oL!1j2M>bpClZr zhLzAGytIN7>@D&OF0!_{c8S%$C#fNTj5R@$2;RqoN&0INAkuSVEOqxJ?YdhPOq$Z_ s6&@BphXtn;*bRj=jq3RXLnA_hpps?U6*hi={W~uPEyUbJF+5-V27iD1H~;_u literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorVendorID.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorVendorID.class new file mode 100644 index 0000000000000000000000000000000000000000..d5046f9793170b3038c618e2928c732522394921 GIT binary patch literal 1086 zcmb7CU2hUW6g|TN3v_J}EwvwhSLI7cWAp{AZCX^~LLXL0h))Ad={C!5vn-ALE2R%@ zG&Vl_ql|YpSk^=nnTMIVckVrN&b{}?&o7q%o}s8B#E?DYUC(jH1K}Mxy^{FI2Pc*& z4IFZo>T+)hyXUyIeHCGb#bbWTOBT2LrK&v|Fog6s40-*(QOXSJ+jg_DzguHis5YAQ z&DO5otQri34|Bo9DqYL8O>dh)$z)p$;XS7(Vu&Qbu%sc0>kQG#G$ftTXVeYPHSK=6 zmTko;_J)QCqA{q_NNZ3LmA6|OVu%xzZrY+T8gzvFo_8$4kkXwlw_4marR_TtP_RT4 zyd!f+zn*eyBAUhs zwSdasE|N(__bDA5GQ0|=O)HU|qw-Q}M#Cdy8J-8R_AEXemIDN?z-MCQ(9j4Z3}@ta z#cR_q=O1HMl))s_F#9(5MlRL+WdKtGROVp2UEbNEW-2uD%Fe26G(acy7)Y+k4%17R z&IA@HP9v*9wp_)pVC~d3<(ELqCd+Q zn@Hjh;71Y9v_u~CVSTwXckaFCo-_AeUj6(9;3b~}c^hW0=Om_xmZ zc~k`!BAuxZXX#kwpXAsmfp%nLX+|>F&cA;2iX(k0(2vS9+G4j<>P(>9`yAac+beRN zC0pwwA9n;c%K%32cb((_E!2J76?j#q>YY*Nl4V1i6}dG=5uk&v6TT!c=MGEP|Ii-@ye?J!w{i|6 z*t2JOthTk`kQ=kDdEv%_Rd7AHc0h$Ut_7`6FXSnB&TmXm`#uc^v@Q&IXwWui2|RDn ztK&8n_~MGcFvEc^U!b)=;Z|Lsv+r$Au(;c={lL9`mF5Pt%f1e}#^N^Z62TrJm^N9N b0nuM(P7RBAj3;csum=ghtH>-V=C0I!i(5n|Zs@{Z@YqrUJ?ofBPr=KXU^ z=zWKrdRufIR}}OE(-j@hbZix2hQ%{}!F7w{c59PFueRUH%_e7u}s_ab{UjRwn@Nc=S0L1Nq}KVLlU?vEo#GlTeu&1+Y$_^s?*_Cle?z0eP;p+ zmWYCPY7VIC1-FKRHm@?-d4(nL2v1ZzW=IAIj|QITYj}!HhB$X!KI%BT**R0h?jRqryCgK3l7$j;dTDLJFz8L|v-f_P<%4+g~miD`kEAUQ!a3kky+ zx*hS(l-IgAowvLUB%y}cv$;2P>2N=QCzDHavfVB26{x8Sy#Zx!RW=-;m3j>%*JP*Z zBur}p3lyi3RU=z|`R`z@)Gg%-ilNg{Y34<_kvNq|gGkFnA^QgSz~l4NqM utY72d_7}h4i~^fdh*P_sPcU*sND@q>Sne7xeuDi!FNBW-nNAeLoNwi-HN9E{}p$zERQGMS%mC9nT3D1?Kamw{o4W3m8j&OQjIU zxP=rZ1mgMGdJ+PMEtoi{f#dz`H!b=&epZX7Zxr-51{OHl*fUdVT<+|41%-@=Xx`8%TRzv#^9^u21L>QWD7K_hT1RSix5&Zg7gy*GZ6mts; zi@5|UWR?5H2{)K$9IF=A@Ga5SRk-BJE{A&ZHMB@cuo`ZexXA_Ct8;W^p{}zv>0gy? z?%N8!w{S;;n-RF{>7lx7;YYoLMmO|30tZ{F8#G!gCxd z7&}N8rgxAj%y6_C?-(WnAgx`_c#!Tf8nA`ZE!mI3DA0KVw)L)ptlR5Vs=c&u|aWQkb zk45cDxsNaVxUTa}?^=F6u++Di^1w3NN41adc!=z8>)?I-pvlEa3@DHYSd1hla2RP4 z$zX;wPV%-yidAa1NZ~O_Xu<_jAc0qepWq$~%q3#H`)ojr-fAd4pe3g(IsP}|Cf^u= JpQwpJ{s*exl&Js! literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/LGMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..d892198dcc8bf331d9f541331c23711dc3570579 GIT binary patch literal 1472 zcmb7D*-qO)6g^{-I0+6rfv%*xlK?JD=@Lp?phcAuKnjY~M<*G;)Jx~7X;#x`UWkeVT_Vj&SGj)4M+o$cj_vN%WvsfsA+pDfG+eW6-WhtzZB#2D!YovAOwnH35bp1yK>} zFB&#qZ&_9DZs}E%(@D{(>1IWD4Y3b{5pUNZQBz%s3Vk9$eLLLikjOBnX1k*3012Ar z1)6#F$}GO2ma|U^XS+kM8ZPzKaO^_1k|fJ+D;UGL=t4%p9bsOqv{8A#zLvl}Jdkn! z+*FhgnjW_lJj5gFr_-VV87=xlV>sHTYuH}dbGdF6WMmn}&c=zthP|`gGR!)6fllGnl0s^+to+b?RMbYA~~f>?L$~Z$Vr# zuiyz57~-B2P&15B|1OqFxzF%I#&d?@{|Ho25S7Xeq1m*BlP?uq!*zy4{lsFL>8?6@ z))R&ly_?#{lHNF((Wd7#7?NeD<<|H+!=zR#;Ve#z!l-G~3VQVnl9+z_i_$+mEm{+_ zTcS9luaY}PGIs>!I|dJFFJYM0J|7!Jgpj?28WEX6K1PwI9rY38A(uv9!4=JY!{Ar? z2}ojoFwp^yhG0o}5`sk`5@BMw{J9d6epEc&l+Tb3vO)&R_hpHTZ{TLg^_dD5qVu^n zZj~mFF!2SE!z0}N3H8GeDV@x>p|vsB##7Qfag0TwxyRR>CPJW})&aV5kOqASIXV&A zGXd@C<$3b&6S7Au*yHL$!L1|^eiF@(#`k%%FZ0K<}oByJMj(ljKU zsm-Jqo@)(y#cH+{r`TH>B8bMIN+Yd7MO5zYXow+BP&I2H8l!$kxCgvr3x-t9F}dC1 zt|e{XnSg>NqTn4{L#lel?UA6(t4wx&X$d^QBNY!Bk^#!&p(pwp9%GXs&Rv&}P3LsX zkP8ZHc20!p6{`WQe_SM%8sHOab{Q(cwCR0h=k9`(ozd_FS%%j^#IntY!(xEOb%~iI zIZ!kd3Bwt=rg(43t4#(5FfT(%tYP&AG>|SGmjj40y)-xDo#JkRnyb*mPkA%a<*Jwxak^KPnV-wSL6d>I<>839Sz`B#lo4Okta0$E-_Zf0gk? z5=s04{wU)aXskvb)`z{b_nv$2Id|rM|MB%3fJdmiNC>PQ%3fr`laY#srthhba`av+ zZ)6zsy6Vt`YTavTUj>m1N1%8lkEN$&F!0`Vk5n%bNN@UqAH5Vv*6JMrr)Byoha|EE zq>vU^Z2N)Q8;`mwd@H+J36$EVCv``LzV%OoPBipC2sGRA6>X4hB>g~OsrIgYrffe7 z{a~R7U@Wr8R)S}QgvW62J_Ea264VhuB6 zrdnHDDc~}$2xJG8v!#s*Ib&_dj&fDtK^#%9PsTxC`ls_$k!1%N4tTfae_WD)s|T}O z-qe4{70CB~P5n^dS*+T>FN|+k82+aCkG|^yxqUMZduq$qT%7!T6Ytxn#tOJ{TxB4^ zKdu_BOV8sec&64S$b6o`Ia&(?4)U~xc>>RK^s-pMA|tl=6EjjgUrbRvm~d04C?7bD z2`=t7GhcA2nWmYdO6=O6#Zvc(J$EXOOQ7NuEq+G2%I20j!{#O0W%^Z0xJ_!0q1$P)rvUUNh^c~`NnVmrGCrH}(RsaA1 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..c08be77dc3aa620a0ccb0af5cf7023d9a62fab1d GIT binary patch literal 1103 zcmb7DU2hUW6g|TN3v{K3mf8=$s{(CVTcasum=ghtH>-V=C0IyI`5n|Zx@{Z@YqrUJ?ofBPr=KXU^ z=zWKrdRufISM2JCrYkz0>DVg549PQo!F7w?vEo#GlTeu&1+Y$`vs?*_Cle?z0eP;p+ z7Kws)Y7VIC1-FKRHoMu}yuuQAgeNKe@Due3Ns&^U6!L-S3h?UZ1;-$JJeK#-hi^dA{!3SO1%bBtFqH{ z5~ekQ1&Y(is*x?f!gsJ%`j&EqPa^TH!I4j7uzkrHl|(=pQ8< zs)kkHBfT_|6YL%GOD<}DbNvcy|4!0;02S+!BoVxi2b1(SBtWKT##nB>Q}Q>hl4NqM utX<>b))&9vi~^fdh*P_sPcZUCND@q>S^gR?euDi!FND00xrr@*-Tnh4uLGO_ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/ElevatorController.class new file mode 100644 index 0000000000000000000000000000000000000000..4a1d467cfb58c96da958b0c65096b42260685950 GIT binary patch literal 1653 zcmb7EZF3V<6n<{9Ws|V9Aq`Y*m7u6eD6AAkB(x$e)ku<70s%z8O>$`$H+wUiO|{?T zpZLKUKhv>cMrZs1{w8&N?k1(f6lTJg-E+@9=RD^*FZb{N{`d>Pc{EML1TH*sTA>QI zJ2Ko5dOEF_Q=n5wwGto1uh8QgT5o)pMbRLk)iPT=bENNI$d zZcpIiSScN>8;K=1$Z%8|BVX2;y^Rwl-Vr!6PJve3fTeboZy|@1EcvZ<7HO<}p1YPb z=6e=S=>W#c+U;5jA0ThyLxI9LNkm<;P(YFX9ks=BE#zM_2hDsQXHA@WVU+6Iy-;>6 z*!YN@Q+-a=u}U;)uCmty*AMGqAe~Oh#Dc)g{tQy>`WsjKuGf}90v`*c_8O48m%=$* z(Btqa!{vwZqRAb4l?n}Q@tK87(8K3+yVB<<&#^%Vj7Jcq1QyxO`?;u@mvTD5=Q_X@ zcJgHquMDI;uUc5f3Ku6-!;}QF`GeS{6jt$-i7z?BFDZ(JvSv8Z)pbhXI>p@L;!-Yw zDp}=zbi+;N8ONH1b$mm#4H+(bPLCr!{Q_E~Bv>7{Ox)yp?AJNEve3}kn)I(Z9d6qy z?pV01!OaNV^YuvGv+$kXK%*C`uE628?1irH=<#Lg+IyocaHJkOtskmRceH1zy6Oil zx$5dooZ0K+{sVMY=Yx}6uE$ z%NQE($!zg=quUgVTTF+}+IiXZVD=%m5cNmj_tV zu9OG(Vt{Kp-}Ij4*F#Hvo2d*fvjfxyxWPkYe_ID1;9E^DPGUfjM8IMsF@>W@lSl@0 zq;ZP3Wm2qBvrP&=lY}N*Bn1+9PWTD#v%p*;#(Tg9#ON(Y(nDHux{{OsAa3%75%`{( H7@YqBUr&fgc5Pg#-abgT@(>CFoluxInH3~-~4uBAcKr01B;<$;o?N+uoayJ$ES#U@t zkoW=oD8#H|M5J;Eml@B;d-GO35Y??@OqN6~57Rfl4L83Vs z4CRr|WH)#>ourXa?`_gSnb27VmA4bBFI1|`OTvoZ84${^btGM^pzfi9Dq*#!Qu$$$ z3}yCF3}Z=X^z=x?1Cc2k7s;|YQD=m1Z<*1Hfk7XJW_7+{}1)4vSi-pBAAJYl*2*wRDCDs{$o@i^s^M}H1T2>$cp z1h=mz*+{-s_BpIC{>^QcDmtD5D3&+Y3 zU*)KbYgpxs1s`x!V&D3TweM(tYFxj-&D|O9%&=0d}y< Lq=ctTSHj+JhH>Gu literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/LGMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..ddeb3f9a90ffc6f9f0133102cc865e180474f82b GIT binary patch literal 864 zcmb7C%Wl&^6g@Xh;>4J?q;0~Rl&9U$S}MyR7J%r+P^46mSWe<;JC*H;+(|`03l^ya z5+A@vA?`RvR4R+Gnd|#F=bky9pTEBS0Pq4k4l0D+p%@#TpQq9s>o}C3MLJ1jm})MD zBYCKExf@1%?``g&N(dGK6yt>YOO+|}im>DdLqhe9j-`twG(FT%C#*y&lOLw(NahD( zlt@A=(qoYfMXqdK7OUo1of5XAMOK$u`-Eny&t$1&*Ix+yR^@VRl+OCWu!$R3bI>BJ zo`^FMCL%iu2j{0orXJR@!MD;=L)eIlw$kCpTxDipaw*cjgASo{323-^^m?k2Smq7f zA}m{Z-Ds~{NbI_3rq*&iTp$$%5>}eGd=NWoN}?BD0uHxjec*I$`Xsl@ITEaxC1@S z$MT)BkH9Pc;f~#lO|aAaVu1>O@w?&E;Vk4x9BW$_XnZN!E}ymy23+IQn-6fj&RG@9 zSmBBV?{ik+*!hap?`VH&-Mql<-VFC<*qq_XUpluKtFdqOg0ek_m6S|?E%ca_@SN!? G*!~T5(Ac8@ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Motor.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Motor.class new file mode 100644 index 0000000000000000000000000000000000000000..671e03f2357b08877658a7afd9d7cfb255fecdfd GIT binary patch literal 1178 zcmb7DU2hUW6g{&nEG)}cRcf)?4{e2|y0JCB)bz!wF@e&AhW7=g?N(sPvJm}4KHEmy z#0P(XzsVTy-Cd|3FEk{xbMM@H&YW|HAHTkR2e5-D8We%bvEA`q?_*#3r*7AhAMF0H zC#}9qNvkc7T~BUXb&fQs0{Jt0Vp~0XaAGyuXR_l9q=VX~Z~Nnsz_Z%ifMLt7K;oq{ zaQr=iSh>;?P+z%SsUwE80S(C%GRSGj3RpLUHjqa`Kx-Z~4i8`Nry#IkAkMj5%^App zalb9SBfH&`bW(FWcCTf74#!ba^-moVRh?fH$;qBbKX7d7$xgX4KfuhD?C2ku=j9ut z1a|h_3F+IOuY2F|XsV7o*sZj5GVFnYMcm~XtQuHj>k{=w>)pXyK74545tao~Oc6-t z?52SwlqlPsV$ta4y81P_K!%Lyysz8C=_p3NI~35H?%3g|cev|4NF~{g( z3n)Bd+9haD?}yeDMSGMN^fk;Y=;j5CuPB^Ttl$={*`PNLmAcZ@b(<^0dfY*gBEddH zSQdR5D{g*4;WKSQ5GDkXT{p+0W`!Mzn)xCM)g{d8UsuqBEWgi8fKUvpA_SJhvY7ZD zmLseQ)v)N2d5Qb=tqZJtf_iRNFR@M%SFW(Z5@UhHBJ~3~TJywEzykf2=!9>(8lud& zN_dPiaq#__RY8TS$jYC{XvnB4&z&*?=FH$1RK@y}|Ct*qE0V2?e|VFO*y!&?T?)2- E1IUZ{H~;_u literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/MotorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..544fe9f2c6934d920910054024b235cda6d7d210 GIT binary patch literal 1124 zcmbVLTW=CU6#j+<7Ugm8DnblKmv=nJ9ruNI>>L^56Yrne z!st8XG}@x;xMIhsNz3%OHyWx4Gc2C)Gj7;?&@;+|QJ*1NYcwnM_YC>!oOlHW)jVkI z@0Z^)ER^eqwaw<6>S5Vr*!lP$V6kGywg#5B%b;YkO@?sEITA5M5@1-;ki<=*TbzcZ zGu4?C({rssuTaT0;}m;KLj=(nRB5C&sEEql9St$W394!hM19n63-^GxZNZSLIvs8| zxob(=cP5}j2Us?hW@JPi&hGc;9c<70~hR4`sh;!HFUr>$*WBU1~4Z>Nvvu01~iZ^9hU-#GQBuA!B!%+5CW#a)_ zspmj)O?I44!n7u^Kyeybb+YA``v%rZ-B2#Dc#f2B+z$K3a^yQ5DHEj3R(OJC^BgN* zC?kYb`bP zMZanlC6k)6eu?|rpZ$U}3hbIfoLcsDilGxBNidOO`X!$I0Q+}d2)d8Cg>8R*{u`Wa B3~vAc literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..b2fcb99f6bfc5d8501108df28c7d3196acdc4614 GIT binary patch literal 1387 zcmaJ=T~8B16g>lNx0C{vQu!9}16!&VM5|C#6hzP#j5Uqui_`81i|v*y3*x&!#l&ZQ zpot{@0Dpi#M?AA7@=-#vnZ2`n@0oMYJ@fnT&tCv0v0|V};9|A7rJNn*q~r%zITNY5 zvZZX-fKMQ@A$Me|EbX<_N^wJ#T!FxhWn1n;f#!IkAmE#;nks~5w1nYDK%gUQ*=l*a zQdG`sSu87o&TO?L%LVCJdVl!Q=dN2@0zKKYPtOp!A}yQr;_tFYEb^{n*=w0Z!N3K9 z{?oLmqpDVvg&jDfg7_h~hsY+GehIYEpG7>`Yp0uP699XE6z zH;ENLYXCYU6~;IwH2KX@x-uwD)0-I$L^9f;(pjU^qG#AhpmpoWG1UIt@e8z@ z$DK1NFw{_R!drCl$r5%Rs{A(#^=ha;vJ#8^mTjtC0kOo`V=B;=r%yiS}YQfUCt+jrAZ)w>u0vdvM9cW_2`^nYdF2%Rt+do!A@Voar#8v+W3tG8`>j`|f zao2)&bnpv{#V~vx$i_Y*t2JKleMDE2ff`~tFA6eR-bc@BvWC8CU-HHt29r1S((B{u zOZ&fJEas1d*3*F>7}>}5)y_l>$yi_yxAt&*4{0yXeDRBzKlt_Fk7n2m%`ok;@gqpC zon$eYjYD-7=F$sWOLajZCVOKBB@Z#MMx36ky?}@8VwW(hSn?F0-`PuTefV=TM<|&zA&<0Y6(PFosLW*f{cL_rUfF! zQY!(0tN|TywVN}LKvE#nuxxo_xV0(WJLYCj(x>6H&0foNE%hEAM!g5tK;YCN?6Ja- zcWl`2m>$7TBCjJSaPkE@4ZMs~0_m>w4yY%EVyWSmcj#HYYQq|MwIn$&78F^2k(BL>$WGm(ygti{xq$wZF)nO z6)R2RKR<}15~$#;j@QSoPjhGB$t?rtP-Ul_Av=CFK((CeP1mx$rsqm?tES_;z_I;% z$79RxUKv`wj&$R=AP`rzDmeEGNi5+_)%>@ZETrda2x4lbmhyPVz`MA_rkVY|w0SFY z#d=uz1I{5pEskY@WI@`5m4iz@#)`^tS>WvRFb2Vmm4?p^e4$2B_o?=5x?8-;P0wt9d)@4Z zbCzs6L$@ujS^gxB4c9p(2Me5o2>(Z*@yB82S4&f)%%?g}!QeW@w+)_0_{@}dkuFyr zVWymWgxO#GfTLWqh;mJEO>#{k&Cq$C6oN1u!*RYbfe$16odVJb@Dip&n0xfrXv>y= z!^{XL8s!Riv%4rLqzDvJ+RvCK*$ieFsZi#Fs1PO2yl1e;oUhWRBm^g~ai^)N=USvi zL&+ES4_Pbr>%XG>2bMOnZ|ve?ZiKh9wGrMM;r$V=Mpk~tVrbt*y^?>7Pc)2hGuzzr z`5_|mxt}nVuRO+Q0zdxuHv>l4P~4+F_Y;V5pXK*#mX(>qWj=3_{arFwI?4f$y=tw8 pI>^m$i-tTd;!Em_>}gZBGf>*TVg_2Cpdc3hWt{}R=81-H{s)yRelP$4 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after1/MinMaxView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/MinMaxView.class new file mode 100644 index 0000000000000000000000000000000000000000..bf1f4db64f491f8b07f8eb305d02678d7905fbf0 GIT binary patch literal 1538 zcmaJ>+j0^?5IqAV3uFV4T-8M5B?{z%nyAr@F&d4cBvFZ2R{1gsBaXG~Qp=*|XZ!~( zC6-oMKKoIYJ-ZuO(DGr2>6z}+=k#>*^Viq!02c8~Lxka&z1tMd8{riAOIJ7-3!Bo~ zGw?C@PvFl0*h z9ycr8k;)DZW9}>2WSIObVMn@R)@oF_OZmoeRKo9QZ?a*^ilq7uH+T4 zaWX;#*X??PJKVJ$BdAxX;S3G)3`aVB7|>5*4h0<-aFHP{Ew{qW7KxyyC@Ox7 zI+lDA{9OW9u&m)~S38&Yo35zqxQ6Q#Ww%^X<8zXB;gLg#W!DkBPWe|D#yk1xSX#B) zEooMT69+YKA3fmp=_CxSsn)zjNP%cihaX_5x*1s4aR+zlRe7T!EEX9rGFn~C!j`QfUFHVkI-*2 ze*ir{`x)sEWJPd<))e`Id}HLDAny!WW4nz6dZ=`AHS{vEAX8@o+Mfa~Kn(@ha(3 my7NB%AKl9VKb0@JL0ICAo#lXM_ RG>esi4a8z#2a-$-8~`-HABq3~ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after1/ScoreRecord.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/ScoreRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..fff3c988700deec4560356f6dae102731c9c28d8 GIT binary patch literal 880 zcmZ`%Yikoh6g{(fY_r+sY2zbSZENjj)h^=4l!6LEU@>4MqTeRTByL%EVX_~fGt8NL&pqef`|J1jp8y`iGhr~aBKiLj8vwv7@j6IF)hs?ZZD`MIiQp@Qua7#cPTC^A(2 zAQCUq_ah-+@li+$8h$+H;gHKfy)!VMybDPDuD@Y$)d5nq#U~Tp6H?^#IztOLaMMJa zp{~WO+pw{VTMXuchpFgK8CsO_54UC9!M=$-hRVv2@?zrvcc}qXlVQhMOYQ5XcROz_ za(d6k5iD{V#Yr$d?`I<ulnx}|7 zF;t1^3Sl;7Qx0~}qMOzd*D}67)i4Nax}Q*Qf5r80xNYFI`vr%WDb=c!(I7HK*;=M$ sltcgr9U^6Lai9K{@*il?p2mTKD)NDn4GM>Lsr0TC7XB)HsH2Ym08-nyZ~y=R literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Subject.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Subject.class new file mode 100644 index 0000000000000000000000000000000000000000..16c82becb0196cc37a0a169c6d48d762c7f66518 GIT binary patch literal 1131 zcmah|+fEZv6kU5-J20KzxPzkN1=@lX#CwqhH6|tn9%?Z9cG@0buyn}uw2@!&2Yfcs zkZNLl_EY=_ai8f7Z9wA7%$&3LS!?aJ&iwlG?FWDrJT+ku#@$L&dTr?y#Ez2Qa-rO+ z?8~Y$5hbMeMOzf=qOn`p@^=Y?VSkg$CBNQMPQ6fanySdJ;HSMT-T}e+;$vO zxMJcmA=%TXrP-LqRh~!GYJ|~j*N#3ni@A4%fzTAf)Ws|;rY5x*O?K19Ee#y=5)BmEVb&wlqXKa)OAjL-2^W26z@v%6<7iZNdC&w_~n?*(%hx+DJunfVST4ZP`L zS$@r8=D3eD*6j^&H10KAXC%VRg@`x)ftX;tO>Y}j6g@AQ@i@-3HF4Y|t_Jl%JPh2g+a0uh(7W1r`i}_+$A*=Ihd{<+pbqt7;$+x#fCp@PWX1CR-6O)|-xs zVH^`SOhg3E6kShk?KgIn|48oEmB3W7S(WvQ^j*C_Iy8bkw=FPRJUM!S$PMXwq?h@k zc+8?4_^wwgWJ&!sf%C)8ky2k*cZrevS4VlghoEzp)a=ns#+9Qy{f+mm_NRJ}* z6UbI3@H*bK@Ww!E%HOpE)v$39m)Mr(KD(6c)y!??AFyBn%cf+bU?C$gGhEHJeYfr? zKZ+#*>yG2F!08w+3Kl`V@hbtwxZ?BYXmOY4EI6A>9Yp^OuVWnbHRv$O(e4>= zKE>SxPU8$u=q!GL5rRDLBEHk%@6knKCl~1;S;}2Gz-$+(om>YOwsKdwGggg1u#`07 zvAtFEFD!O(d1oryK`v|#x$+`Vb!=8O=>)HtTb zi45RG`f#`|JTpbo)Hph^ap=Uh_=hlCL`i&#;|x#JO!Fd>%Q3ZOCbvnEZgc-RZNI`a zYDl6%%Qj~5J?8KeKb4=k{|%|IKwq*bz;k?r4bD;gihH=v5>4SpVtvetr||2&m#LUAuBt6qY*+Sex!a|A-x^zh7NdKXQ OHGR(DkLWgr&t3uD=zEC( literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after2/DataSheetView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/DataSheetView.class new file mode 100644 index 0000000000000000000000000000000000000000..8211b258ba0295926193048b0a96af8e5fef3648 GIT binary patch literal 1681 zcmaJ>YjYD-7=F$sWOLajZCVOKBB@Z#MMwp_ky?}@8VwW(hSn?F0-`PuTefV=TM<|&zA&<0Y6(PFosLW*f{cL_rUfF! zQY!(0tN|TywVN}LKvE#nuxxo_xV0(WJLYCj(x>6H&0foNE%hEAM!g5tK;YCN?6Ja- zcWl`2m>$7TBCjJSaPkE@4ZMs~0_m>w4yY%EVyWSmcj#HYYQq|MwIn$&78F^2k(BL>$WGm(ygti{xq$wZF)nO z6)R2RKR<}15~$#;j@QSoPjhGB$t?rtP-Ul_Av=CFK((CeP1mx$rsqm?tES@(fn)pk zj>neWy)v|V9qGn#K_ISbRdDVXl32o<5X96i!fp>9AD+iZ+j1`sPvcTErVH_yk7*#fN2_G1^f>l!XoWQ91co>|% zAL1h&*92yL<>NIm@UfD3q_4`P(q>Zl6xVe$c&)~-kbxUmV}W_uR87W&1{3V_x}_A| zo=_Cp57XPP%^l8ZL4mgn+{HSFaA1AU%fZpBD-E9;_(F}M?o;jAbhmhwo1WSJ_PW^* z=PcQDhHhJ4v;0XM8?JLo4i-2E5&n-r4pnNM||g28o)ZyP+1@R=#^B3-UL z!b~~$2(!QV0Y|xJ5#^fTn&g^7nxXSNDFk6ShU0u=0v|^BI|ZZ>;3Z6lF!$)K(UvX$ zhM5sgG|Cn3W_M9gND(Ncw4X6evKh=UQlZQTQ6Wm4dCy>xIbWqsNeE6}<4#jk&$UR4 zhLSJtAF@{L*MCL%4=inD&+p=5ZiKh9wGrMM;r$V=Mpk~tVrbt*y^?>7Pc)2hGuzzr z`5_|mxt}nVuRO+Q0zdxuHv>l4P~4+F_Y;V5pXK*#mX(>qWj=3_{arFwI?4f$y=tw8 pI>^m$i-tTd;!Em_>}gZBGf>*TVg_2Cpdc3hWt{}R=81-H{s*`}el`FA literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after2/MinMaxView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/MinMaxView.class new file mode 100644 index 0000000000000000000000000000000000000000..87d4552b6bb31dffa422d0c8bab3dfb6359af992 GIT binary patch literal 1538 zcmaJ>ZBx@g5Pq&Lq%EPv;tL`uzMySUtAK(A5kb*v0kvAk8NVF#tjDBDCruIljQ>GL zi=#7+pZ!sedr7cqW&Duq?cMIP&$GANU%$Wo05F4B8X^p%_GVK!JHjdOx2|xe3v1F^ zaUB8eylbtI5th-Pz@1c;*!4RMBaNm^pPRo@iO3%+RzhD^!c z;%0?AQrW>_%zY=D3}gQ!>_}J4T8%1qDc=d4)G)$u>OV?!jN%kSswUi!KFXiXmAnGB zTxk|cvgsO0B0R3+G|n&#R%Nqc@;yH>!*I6OTj}n1f?^K!-ZC8T7P!|q5INc7yWrd2 zLl!Mp)P!R!lFUR|)-3L}9I95fH~ry3xk?h3kkgQ5IMz|OVw)!QhqSGxjy$I5ed^L; zSPG+doQx2`6}#Tx4tH(G2wc3Q~m{p6P^5YEUnsd zOPW>T#6iv5M-O;=A_)Uasx|KsQXtyX;RhJ1ZU$C#+{XiYRo-X_i$-KDTMUctLO0@g zNUjq!kv@J=ML%Y^au|N-iMvr$-ja?rtW&96+rMNudeEI=mPtIta}Cd^8$HS0#n4e! z^0bDkk4dk~iVVrJ-Ey|Xs#GJF?o82D1%R{E@KO5u=!>X9rGFn~C!j`QfUH$IkI-*2 zzYje>^#$pVWJPd<))e`Id}HLDAny!W$9-=M<0x4a=b;i893y`p^G$%6%6~?>O>>f; z+Q*o}jfQXsiA@@V7z*L00^B(IG2yX4M^QTA`X}dU7g6&|>jk=rVA50ZfjGvCXH3e|66X{B)XxJYEo!5jvTrT@(kLi4UDA&I~U-wv|73I%JXn literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Observer.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Observer.class new file mode 100644 index 0000000000000000000000000000000000000000..9d3cfb011c16008f93edcdc8bddb717caa8c8356 GIT binary patch literal 136 zcmX^0Z`VEs1_omWPId++Mh1!eq~g?~veY8|#I%ysA|ri&D4(5yg^@uZE3qt5KPNFS z9Vnianq0!jz*bt2l30?;$iS?j8OF%K6`WsMl$`38nFAE!g=y9U>0@JL0ICAo#lXM_ RG>esi4a8z#2a-$-8~`;cABzA0 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after2/ScoreRecord.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/ScoreRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..3b34df4ffe13fd1bab4044895c8172d59e3cfc9d GIT binary patch literal 880 zcmZ`%Yikoh6g{(fY_r|GZG6P4ZLQs`+6DcXQcyt%EC!53^xGtv#4YPCOm+kPR|;x< zfIq+=CEl4VCN%nGhBr;FQqVau zk!QHN5s;3~#5iFn&Q<7~q2{0Q1^3b<2t7ZTCtZfpAecowNu^*oy!3ste1|-mdA%qR zGa@QDtbZ3O$jMpQ~yXDkzu0(6CWJk)i4b zk$9259|`%2k3v$=@Z&KLhg=5goq_q}T|nY@{SAYw4v?xXKAGsAkRqqo8Ctl3ntQsH_YrFE$Qvml{Ad8Frkt)V^+dxAWE_ zr}u0e!6K(ooCMSJel|jKQ_wSEU_IiViDYe>)CMOLvp%V#4e)>Su?BG}$KrXQT3TCU zK2|2MN5XQnSqz4n1KlRQ3~Uif3jrm3n~8U|ra_Y>;vuekmVw+*~@zu@pPrCJpm4U{!yYnhf& r5&;}^h?K#_efnF?RFYf6y0|q86XpqCQUyKN%12Vh%K7NuaHFB8Wg2T4H0dv+5v9KR2Wz@Lp44? zAHo;#x2{T7buE{_eGz~74%U5VCh}qJ4~Dt-p0m&1d(OFk{Qb*s0ItB&p$RN^YOZu1 zNGEUJ^Q5zuuXv_sxt>*btCsvmM^s?;zWKn+w@ka4->co1bx+5nz`60vy%0%Y%B^=C zxi9%_2rQMyBP)aBg23daWn131Ksxix$ZS<0dcD(-2}Ce$AdaL!B$KViL5>D=!~|x_ zmMwRC?V5BB%vwtd%#}NJvsE=6ORdArsCQ_&toYx8Bk~oyUbkU-ta%pab(|Aee1;kW z&tXv@*_7UpMsmnx%f5*{&uZn%^tX^8=_LcpxFB$+Jsz((X z$YE6=X0feIuj7#5hzq4~zc7VM$m_UFn+6Ccrv_fdYy9rE{MHjVeS$F5j0GK6XyKqo zLrDp&;dKLV;7vus_Nr#9M`3K3lB)Q&felc!erUS8J~&TqD>YjNwpCKpwZ4;ayo+l( zu8vGW<;eA9+rV|aN5D>x%oYMqtxo=?!(tWBk!G9JiUMZ`)VOWg&1*fY)sRjM9|%lT zdhLyL0z3Fnb@WF>3Z3^Q1__01RYlw|u!}u5f!Xa!o0FBwl)}Cm3J%c=F?=kLNMGe_ zn@t(is3?R3flE)TG1L_!JlU!{sH)6QRmtN2msEkb4BW=&wA||iDC1u(l$5|1_)5o@ z>~!CsQRfWYRbJ>_WoFB!%WkhNAWC%1zg&1`2Fkcglcza5^{;Q3-EhDYl}^v8%c7;O zfce2-sY~s$Dv0MffD!&C_|w$o!CO(S<4~hH#Z{5}8vhfyV;H&BpE2_zR~k<7nPe;& z8)bBy(Q{m#38FEN(_AsnM3)QnZYz>hj5c2 zZVZ!1`|Mv}mOOSG~C7x(l@m2gqjuTuTM7CBR<7I)3=nq&pAAO8h1b)X_ zAM4wxrMp{d=PiNnpZuA6$iPj3hj#HNyz?t|Zq2=aj8dwP^4!fn_E-A&q>s<~xTAPS zecsE|3bNJ6a*_Hk@IOo4>vW~UyHokI9`N|rpMy|`hJBc*F?W$@b-qOyn??hYZzn3L ffO|^iJz_0DdqRUIbO;?6*$o_N5)o+fP{ZLroT`{H literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Subject.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Subject.class new file mode 100644 index 0000000000000000000000000000000000000000..3f3a09d9700541c1955607e035fc31a651d7eca8 GIT binary patch literal 1131 zcmah|+fEZv6kU5-J20KzxPzkN1=@lX!F!PeH6|tn9%?Z9cG@0buyn}uw2@!&2Yfcs zkZNLl_EY=_ai8f7Z9wA7%$&3LS!?aJ&iwlG?FWDrJT+ku#@$L&dTr?y#Ez2Qa-rO+ z?8~Y$5hbMeMOzf=qOn`p@^=Y?VSkg$CBNQMPQ6fanySdJ;HSMT-T}e+;$vO zxMJcmA=%TXrP-LqRh~!GYJ|~j*N#3ni@A4%fzTAf)Ws|;rY5x*O?K19Ee#y=E-V5e1bVvRRGV>iw8hF#g zvizFG%yA!QtlJylXxwYK&Parr3lVSp12MsP$^RhUKApME_}ZH}t+9hy!p0{IFLaP6 z{KQg;WiRtz+QEIo$CKY$egxWzuKYA+k?A9w3*?WpIgfq$Pq;S&;{*vrOeQlqSN4uj IiNj{Ovn{1#Ic?35+gSjw|Og z8)Zw{o(@eQa$p=9nX+N;Wu6xgWXTigU9oJ-TNUspQw0HS!!czDegwnlL9f6-&a&mR zdZj4cS4Occ1)@2pWRwerYbpK2sCoNVO<*+lkMvnWR}9M*7*4*#-N`4Ve*DJjhmA_(dj6u8>uwrO}qeqTzjV99qO#4xPrj|e1^-Hgs)X17xXg*zI? zWn5u{YSQb#5|}&(p~HpbgBZg#9alR#oc~bsWF?GoOt8C7oy{IG#)|%H&kUwVkOUOqw<&uBaK;()~HscZL+P&?NpcZ z34T^Z%!QG`ErEdNvyQQ@$4v+q}235hm{$ zrMEjq^<<|*d8h7{Xi>pGp%DsrdW6Vsli%zJvE6iU6GJ=c*#<6YtDlh?i-h)TW=dh7(HXVS=-q-iQA^o+GUdx@P)>dmRlWCXxdVPdv$RWZendu-7U_pwO$8> zXZ{Gh@C>4k3KBnnM;`bw2vN?=E=lZEm8J2_e3x^+GvBv={QK+g0M6q}12KWqUTYxz zZRuB9@`2~ebCoN0U^gC088jXFje&%~+#`G2uJmlTTe;PGB-??&^q@`WyOL{%N$Q8P zH1_RPfz&p0t$Rb4p`s=*wd%M|uqLoncz$TD*c3>tdmWiZ95W_T$Oyy>#byd5X5t8@ z)GlknKvH0~?zr;iaH}Q#dv>cQX{mc{yVtaRN1da~MDWlV2v~=~$EqjusbRlk2Sk4n zrwp7F$UU!A6FKAsGF=%Q5P&2K#kv-87&yI3-5CVcG+Do7!os4!Ovf4Yd-jfwA+KYF zNpG#glppCmH)$4F7%y|D|9`2=6TYkAS-)n@4P;mP)iw1*4X5kc!O*8>#Yy~U2a!|? zMU)Mc#+szDGYI6CiPvzJZ{-d7=*L4;$E)1-9XDtMzO=Wh1}Xw4_PdMMj@!LFbb1}> zCvi?7skE}Z2UZ#@IIo`n0+U7bbPZulwb)c1Z<%--@9@>^eqXxm%v_-sDSyB@0;nc& zQ6Ozem#}hhQDdyC4DSh?eHO+6>Bgw?F;{TO#QXSwlmjm`s&_mLPTzH0HE>1XsIGim z6BE}|iAVZMCY5$(8Z~@u;3Kxxcng`R;|2w0vnfr+3JvE}^SY%fx;;@*WIs%AUz@ue zRZD^2Gw})37!I6o*&H0cnyO*L#HJcXLsRX!ba&XwjlgbyeZ%fYla_9HL%%JrIeHey zrfWr&gGJ6koFAkZe;j7L<0$h#PD=`EPNsR{qk%5V0ys^SC9LEArOrT+e-YK9M0Z!06g!zizG1{`FUobnu3-wZ&yZK$5R!DIu zq>Rp(VeBmCF{e=$!l(!(Ne)Xm!<;YE-{gOIv&>yg%{gz5-uBV3NJ{fOnrzKajb`6sv@!w5ICclLa~i;H~j2h8NlPtXwf z{^_3#7~#I+p3vM+YKgNr#gj$mm-v5&%G{?0O081JV^6J(s19;dUsy8E;{rbAF1}Zr avMoW?_8BwqL;VjdvG}*v^mE?C@Wp=xM|FPy literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before1/ScoreRecord.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before1/ScoreRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..409cf33ea6c20327fef11c4f8b2bd5ed90c23714 GIT binary patch literal 1107 zcmaJ>Yi|-!5IvXImhBdnBI|=%TWc*)?OLB7Xqxy)6B1&RVlet`fm^x_f>{=f|4I{U zeI)(>f0Xg;WmC4IhU8vm?#!7pXD0je*S8-4?%|P!n84DYHI&|1dUi`54m`PSH`=@o zB+rh9gn)VMj2*k@^t<+c>sYpZfz&XF8S<^J9!I|0v+M5AuL`6aZny9FBTovf|M9#t zu@zRW@5`?As=Lft=s3R9IFizDy7HaCN_~davuFfUQaf(n^>+p0rE*gs@pRCUI^xJ0 zn1`VuCy<|Vd+d46`+%Sh6WKHbE*MB6C6KMVeffO!rX{@>POC@Ki}gX<=`|hC4eZdF z@Q+;fyF5!QA{S|yL+PKRDzH|XO*$7+EjI&3O9s-=1?HSiM}e}dQmx$7v4ZOwRt0j? zNrdVdSi=ngZS3?$a{o}kV#Z%Yp2tm;G;9cDrlJIT7$~Dc5m{59P>Q5ZW?e16)^Q74 z8g8@u|4+q$4TF;zz2!J5WKwO3fT*!-SNaj9sB$Uf8Qqb9vR;g#4TOQ+&W2U7kYmPQW=KlnJToj%Qw4N|p@HQ)_$W*?=e07S&6XZXttOC!B z!b>qvLzajZeL*&Ja1oby3tYyP5N}si22z#H6BMT?I{jeXBy$40b-#l_mu{= c@&n1B&Igi<5hkD%G?|YyoIGpzfr@(g8yAr1O8@`> literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..eaecf524738b48277806ae2f382214059898e026 GIT binary patch literal 1168 zcmaJ=-A)rh6#k}N*ml`Uq5N8k6a}{wSp`J22m*>BY1LTMgm|^>jxgBnHrp-Yy^mtz zwO+J|BtC%g0el+tOiL_S^ybW*ne+3V^PThk^y@bOOW08nU>J3aHSQg8&n)scuE!V6 z?XuvGuR>vn9$H71S+<;g^Lg=*mwblaHQ@+AMF7fXClXDmeTvIW5p|AP(HJ?{>Od&}y)7VXQ8K1?^NRI^_ zCT=r?e78*l!;sPKLbi)oRp7wm|B&!l^xm9dpcHep8{L9-Rd`yPhjMD zS>8U4N$iplVCbuL$Yz-QKX(jTJVbcjw@PnwR`qO# zwY*#RN_vHInihS5Xvi=FFL{vLiQNCc}1k-ziH=39o zRvJh(aI1kkX?b7y5M+ta$6r5X`XFTbSxQ5g5F#K0BuD5qPGFJ*VwGU5lfFYRB)sJ| z1Ux{7v=BD1hKB@j04rp-LG_Md0gtdrv6D3KTXa*fO|}sPP7zlTRS{z|+j0^?5IqB!h0W$hF5Z$DFHs;W8gGdkV-$^|BvDbStny`m5yx6~sbx{~Gya2? z5=*NrpZzGyp54`jB$Wq-o|*2`=k#>%??2yv0=R+~8e$B`ooZXS?}VGLir0=S7V{g@ z-ryf9QoPrYU>JSN-|@V~?M8m9`c~9DhQW4?Jf8_#>kPA{JrL#S-eee9k+$?!8BS&n zcFk585(TF&bi^@eK!d>$&txkpFbo?wgaL+;lC;HUr&$&5b6&LsL%QVDxK-hbFfu-1zj zIhj2K3r@4eUG6!q8P=?)wM-2QRIaGwLi###xM1KS@(f97dlhbVNCdS;QSrNMU@;)U zKcsLK*EL-0Yuxg7+Y?O#H?TxePKSDUGT>E-C<=q^6J4$AuxLhLx;1*&33xrf9cL=P~-%b361~ z_==%Vw2NVc)?q&~g#>i+9mFV|O$FW%xi1*%Vxp8=*ugP{ z8}Gp#A`T-MBGd?XIK)j7(^;G#yg7nXa4;k2*fBXLa7erbVy!m zb#eZdvM&Yp>StW}f#sKJa|gGkyI4!#>tcO|j4p~@Y((7BK2Dl)j?2PcNRd)1H7E$)Hpw=)N*(0b0saak zO1VgU03U@IZ>-oNfFkW?W@pZvIWzwG>)Q_ickxg~ieY8c9Sd(FJi9B7N1oWT+daCD z1f6{q83yBoPq;ng?!Z3mo`{~$pp3(qF}=0qW8gbOyXB1iIzz7Q3|#I9o?zJe<9UB- zORT2ri-GX!4a(6@9ru90>p0>q!)j}e(!uPRf|Y&8b^HcH+NyRKGEYW*p&^Zejz#Dy ziVUTg)g#a2??Y-D3>0!;xS%5og`v=LT=6V8?F#QX?+%IXa%grk0}X0@YX16NgSG8AL=BgJ%F z!*vFA!iRx4JZ3N{<1fN4;sz`g+YI?wj!+35Rn$m6s>x8c5~2sg-%gVK2U`?ty5Pm`+64#1ICYNP<&iT(3X^#T0C!RXtpo|3aZrB_) zNz62@b&7s8U9wbZEs#wL)Bgr@eb+eQkBAC)vA_R(;>_{@KVlBct zim=SuCzL8*u>KWWDZC)7@)MXfn7}t@_$F@S4&gHF(I=mZRJkWLu%#c! ahIKv=xfH>Kl)@%UiH5VYhVRR$2fqQ?DdKbh literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before3/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..6c48d876d446f41e4a877f741e75172b08be5727 GIT binary patch literal 1477 zcmah}ZBr6a7(Ew(Mck4kO3g~M3`C={D8pWS>BR!IXqc=oE$mI#U~!h!?0Y|@nLgJC zn8}%bKtG_LQ=Pjw1wl2lbN9J>pXc0jpL6zp{r>q2fEna9_ymqui#6%&N+(s6ud0rm zNiCKwX}cQy0+B6a*GQEOdn2`4+>#|%AUJ2)mU~N}C!Qz>_!q0D45J6VIsym^^k*$w zuIyBb(s^nW%Tiz1gs8hO{T?2SyK zpy7zXNJn+P#4|jR9L+Ey=+$sk;8aK2lHnTpO)1@iCEtV*#W6+yxWJisC!-e3%(B{f zsN2ptvdtNLO~65%P=F%>WB&n66co=>I!PC&t!%57-qA6S1p-qQ&jd6j$tc?! z&Iaup?P5)VzS?gS(tQ6ml)z!L)r>O&qn#D)g8x~=ZiOo?l6Tp%RdIoUWt(zOKrA!% z*wQz7*C@Tt8Qb0;s$q$s`Ra~SlJ_k28}~Kug$t^67z0hgTLkbi;*ZZ!<1EFu;5#tc zKOF&O-~=%rGsA}`KLK(wV`l&W literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before3/DataSheetView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before3/DataSheetView.class new file mode 100644 index 0000000000000000000000000000000000000000..f903921415f2d3f46b39f727188867fbafa4b2cf GIT binary patch literal 1654 zcmaJ>TW=dh7(HXVS=-q-iQA^o+GP_6_(EeKhXn<yY?tDelKhW(Bm5dC?a zF>qQS_pDM)srKN;PfhWXAo4=Wc`8(3yT6X9cR$**}FQ1yiOD* zy|oTgex&!@q*-8Lyv*JH|D`TZ_^yR#{hBp5kX`9l*VPj>oUUsJL!X)zC-I*iL{cdf zQ8rK-Ym&z9AduT8Ud1`Sl{e(0pA1nQuX59O+@KNo(%!Bbs0f@o=q_G6Zuj!g>2;)^ z#One{rIqE~v(i|>s(SwOOcv48HH0zMVpDm%W#VnT!&kHWed)3@bA?)@{2}KEpqj)5 zfwU!E!pgw~jj^UOyeDw(X&8s38>7m{T){;Xm+(F*2VQ7Y?|2lPz8mxQc6=0ru2{V2TyZEkZ^ zEd_qZ#HUbWIB>pWb8z@-s)kJyTWS~$O||FJ-C-*?0=xaqHM<{8TDsv4{kFX7=vf?_ zt`$`d7C8rTevo4PahUavqs;#}Eh(rundWJWcI7u)+JjjtKjbF&5c5Clfa6@VNN`PY zO>><_1}0AM#tOr55(_*rfrb%!r+{JvI7ROe=4*P#Xv>y<#q0>r)k|gW=J#+`A;qDP zGCE_1v9p-RoJLs)qau_fIV|Bt=6s3%CjY~mW$t2X=DEI1OAN2*;{GIS#eVY_6n@9b zR`#_$ypbE>&Fs4)R7Y4J;c|TaCoD(yJ$zWsKf*^bjBq`BYv1SlxX9;z#7w^Y2n~TB z{{4diBivQo6Po*JEpZlSc(Ta+BL8nunY+|LsZ|Pj?5njI)j@9R3rog%oX2O}#rJDd awk4?AK4%7gsQ-o~7XQ+ke!-g+foxj5IvIwHd!`Y!o?dXUeF|{QSkySB7&mPfJ!h`R{1g^V;pO$ z(qL(o<+C4U*|WQv4N^X2GTqaC=A54H{rT(bcK~yEt|7)S=~P?7eJk8TRlIUsF<02& z(%#^^6)E0nNH7e);ct1t;&r20necnkxr9SYqNwAL6-mj1ygch60R{v~NkZ<*nA z_Wz-|3PWPesReU0FvPRDN(u~v2Kvy?FjSJZ*lahd!rkUoOE6?g&JMRK+?C1> zoeA%?Y#mB2B2bZQH*4IZ8^>`(!^B|~iKsDf6vv25U3d{MQOM>>ex2H$vPt=e$!%7sj8)QZZ zt~re+ce&@dW>~LCUzr+a8AiJ87Sh*|$0Y-oQD8_)+pBP^O(Li-ii+P=1J?o)d^d&b zxT)brPuG_BTApYaxP^Jja@y3u;{hk>6rQ?-SoU1O8+897!;$X&j)A|RksD)HL!{`dR5+R3Y+F+GFyy_?m;(`xKE+eGhp9l$X8CW2^;AVU`A`KUw%qcB3umm%h0{u9z2jFs}U`#7#};}P66 zaTr3HP`kK;A#ReGp2R7_o2D#<8+eqOm>OSN&(KK>XMGj#iDQE7`C0Y_=YAmH!NuEZ ze7dxbMweU0$H~y0qx4xBqXr%K`Q-!rzq;o` eeg-bmyloMaqr~+Z?c#qq6Ca9FoEgeK+wI>)mR&Uf literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before3/ScoreRecord.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before3/ScoreRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..90e8495f2f77ed0745675e49f54cf388e86dc961 GIT binary patch literal 1671 zcmah}+foxj5IvLILRcXQAS#NWqDfGr;FTcW@DfcxjTKAZCdmk^F|jrq)L-%0DqpqA zyH%FYev99rp4lwPVz7M3?DS0cnbUo`^W)c-Zvf_S+dx2Icca`?_PVk&W%aOOtGP_E z!p|MWwQ3+F5PKxoWu_+UtC^MZBUNz(B2Den>^_ZtJ0ChHKm-ArJfOYwkNQM=8`|eMTtJK>IL~+LkLXddm;+5 zbI&&;3s&8776pRIR7oIoxlvV71Q9o}4TA=T1%|uHU9@faLT4C70`YzbY&Q``MDKQ( z=to3gC~wu(a_dQ1*>`2R#{3icMn%?2(zdki9fq7Wiz#kF&{ug9jLB+sQ<4Jvlf7AO za>=Gj1DM1<15>POm%e6hVm}TrUBU{CCVf)0WzD7@2yEM=guvwg9%M*UIfYJT1*Wzj z=`Ve%q>Gj|F#uDbk96F;DM2!qDn)S=#|&fy;@!UUdd0+X%nBImver^752*noe0glN zlrF&u6DM(s_?Dw==`?KZ?K!*cn)A-H12}_u17|5$w_qE$CbC!{wYqxFz8~2@@J&P3 z0Gnu{r`tB^62&=OFmVxsY`oS}7Fp?MFPm7x6=t+1o6GJCY{mysT*Cze*S8u@Um*p; z?idP)991YfvhuhfpL$(3xT+jqKQXxt?*3st)N}Z+5selbExV$wTDq@eKIEgiXqcj; zLH?}-5zu2n%b*oNAAcNv7f+MY(E}u; zakhJQ8%N(v;~F+iy|@o6;&IZfb^01>28TVYSH#j8&6C~e z_$M4`6VzNkV@_cCHR3!wE$|)Z3Wq=7JgrLtFMt1}PwE4%>i2`twb8WzhFRDVvK~c> z-&tmK7Go}-Nmr)%4xf4CaDzOi$v|frz)i*{5co}(kO85UJOfrnAddp?+rlopvSoOx aWeaQOZ@3A#B(&b(t}9BoBg%^Fb?XmAY;2wY literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before4/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before4/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..725f62cea12ec0345499cd562c35e0438f6558a0 GIT binary patch literal 1525 zcmaJ>+fGwK6kP+SoKlWjDFsnbC|+8s)GG@03W%aDBGpD>e3bRBuLtJQ!atAHW`{+SbR5zamd8MCWdn_E52H{FoIFCTiztu(K>RcoLVAm zpWu~TPn#HH-~Q%gX45Iz$_wI%fO*ZfNz+IOF&xv#;>;CqN2B%_w~)kfwpMOzDAy*f z@r6W-^RN7A9Wh}cg_8n7zg%yKKwrEygubV7*2EcsNUhvvAQsN)!psegt>kK6&s(^F zDJCYbHQFfy7Q=2+5Ut(LQXyISqTa-5T+&b}&Cxb3Xl!D=hgU6J!;HYLit@9+^R$m{ zxQOjzQPNwbd?Rh7DbQ2-BSMPr|AG?OZ8wUMT#d9wGz&-|;JCJWAs`mGu3g7G6<_*J z#dnGoO-S3D8*vbM&X>ifS-DYrlqTi`Lb>v$S5)(kez`sMuV6y=4x^wd`EdXpT=A`Q zG-;(c3(kS@DuN$t$03gT7!2s)Xw@A!@1oU>-Ppq&28%~9=n1^rMtG&luVNdKm1I{H z(QNYg7WNsJKOiw24y{cZpD?tI*h=r=Dvm~tEhM&ZVhg8|dOi83Qw(>#-}%0c>6K&^ z7Z;N}yJAclA21#@bbO#GKF|=)_2e5vM2*1voo^aICp3T=%8{rLWTCwr2e>;#I5EPQ zB9JSzZ_sB6dvTvX$V2p@fGA#~AFpV?#b6EmGGhr4vzX%?#A{r~JmL4^Ipc4V%|T3H z0k?Q>jQ_%It_)_KLIzpxJ;2G@sln{^(*PEkDF)*QhD?M_M8uID>_foBow{ven(QCt KElc$5z}=scfNgsK literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before4/DataSheetView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before4/DataSheetView.class new file mode 100644 index 0000000000000000000000000000000000000000..b6b4751d1780e19fdd6ab18fdb3d7b9e5441af1b GIT binary patch literal 1654 zcmaJ>TW=dh7(HXVS=-q-iQA^o+GP_6_(Ef#;Z}#VG^Jp0uP$!FO|0#yyT#eH*6X0~ z%pZXlojvmRvhbQa_TV zabT|sq;{BV!yCE`6*YmWHOF;=b%CYAvqNjera)rD>&P_Xm@$z;Mj&1&Hd7!m6UQ*6 zc3Be!k^-}J$CcNI+b!wev0FV!OWkYRy{7Fu>Kt7rg8R-uz&Z*(Ry~B``c03=Z;*0qSk!0A=$&LF6!$@&Eo78V6&I?kZqvv+k2d7UUs zdTSk~{7CP)NwdJhc$vHX|4Ut-@Ldbf`Za5AAiL79uB#_%I9=BchCVebPU1g3h@?^| zqHLfv)+CMHK_ItHyoz&tD{sh0KN+GrUgf6mxIrWErM+D>P!TwF&|SQC-0tO})9Xk- ziPr^^N-N8|XQi=%^XmCmnJl8GYY1bi#isIj%f#Dwhp%S$`_g4+<_fh)`9sbTKsAXA z0%=RSgq4E}8e>gmcu(Nm(=ZN6H%66@xq^!(F5!Jr4!qE)-tj0neK+udfhz*Xb>-ul zn7FD+Jl0n-skAfGsNoX>AG58-TgXHm*C;TXO=&V#XgH^u*9}$C&54R4`%!ua+T7-- zS_=G*iBF-%aNvB$=HT$vR1KRZw$v~hnrhFbyTev)1a|wIYj!`Hv~Hx* zn&vu<3{0HhjTMIBBo=sL0u3YdP65RTaEjg`%-8ge(UvX!irEpKtCz~$&F|r?LW)Bn zWpu_2V`njsIgPRqMnxz|a#+HP%=r@iP5y^B%iP7(%yWI2mKa{q#r;Xviv8v7~y*M*1pg8agopch?#u(5gGzN z{QCz3M!2iECp7odTH-9u@MMwsMgHHSGIyzgQmYj5*jH;as)O9r7nY3kSjA`D#rJDd awk4?AK4%7gsQ-o~7XQ+ke!-g+foxj5IvJbHd!`+;UX#^cum43iZ^fpQ51~^Z^2Yq<;#SOajea5YO_)K8UH~` zgQZoL&wi9;&+cM2NcoV-bWiu0b9%b>*Y9sX09?j%4KaoZr`i(kTj3U};+5lyD}^mC z?JfSkBE>rm35KCJ{4Fn7+^!cMSKo*okD;0XE{220WwkJ^o@aJPBY5)7G=v%{?lccrpJ zXTp0eTZfX12vp?S%^LUU#!(#8Fm_l)B5Dkb<2Z4t3oqg&3fWxAuT$HTR-q(Yo~aY( zlLjU*$&jweR@36UTYhO7hO-BwmGnM0tmx3eQ--l#jl0c#o#zh3t^~IKUPapzb>W(8 zq%&2Pb(?!_mkO3Wc>Uo?xr&Z+xS-)Y!)RCChGSXO2GX%x2C~S}6E&pGupUM22AL6p z8&0FiUG6!q8P+S(SEhzphNInf3+d~~W8T053JghUdlhcANd)ypQSrNEU@;)U-=}Z| z*EC%1>Duyc%M%R)*Re!dPMaEdG~gti!V{Me%bqKEgYLhhDI*AXO`s&31;W#Be8=v8^MDQudPiEJ?{x(D4%;x2_w)8Ga8 z_f+D$fZH8AkTIGs;rOBRtXYn7YxI+*=F-PnA5asp@0V z>#`z)UUu5V_h7w4e|$LmeNdZwo_AjVkTpwAYZNHAU7Y`D662=lAG0`vvKb zWW_K@>wuq`LIOI)_G5^AV?i{IB10DC`KUw%!!Sb3mm%gr{xi}YjFj@TdpMzR;}P66 zaTr9JP`kJTA#ReGPT>^cO;eV_4LnLsOpPzCr|BeyGro!s#4$nk(k%OmvpT=8YI2pQgm_92b)S#n2zkGoISNBrL e&%hkb+cRP^PFxph7yrwd_)wJM%ux2(ZvO#a=UqAg literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before4/ScoreRecord.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before4/ScoreRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..cfbbc44de9ff08c570c1c078cba3db5b4e194d11 GIT binary patch literal 1675 zcmah}+j0^?5Iw_f6S6_T#9N{!Y7~fy#(Ri(ix(6U6)Tp$4KOCF2-dPh{S}|B@>Q$6 zMXM~I{T9DLJ+o|JBeAShX11rNyHB6f!;fEIz5zIaI|c#*V>>mD##%EN2%hk5$zXh_v*b7JWt6*>j+s##IIBHqhxjbWHHR;Imic-#!rJghIOkZFh%z1xECritb4nbJemQEwEr`Q)& zl2)T6UuZw;M&_)B<>Uo|sq~US=t{Guq6i{kVi++4TLrfE8oXrN@}=%FiX;+)5ZGoS zjEMf)VPX&wfh|R=p%&UtE6TnnD|K>^EHfQA}W;fk}ZxPZf_z6Z>&Mz*v>_wpx5dbd1=9@F5&T%D^Gg-s?@bWg?9XxnNC! z(UdQ=qkAs>P{$rNaRf(+&2p42ou;iTd4=3TD0t_&AsoYuf#W2hS83gAas*GZt%iER zi5gkY;G46Yfz#xuPs0t$M{x>gO`JoFa<-pwkd!W)GckwrWMf6P7TgMy_@P$nf{7uR zQCz}V1D7{@0KOR!2)m;$APNG*8^%;%qJO?NV55M;Wk*(@l;kr{_}H>?d=itH^~U{g z=uqF`zg|w9Vr{4?us`)bSbElnTgoYQ--5v8CQ&{jaylkjZno{Jx@PIQj{Dj;s^!Hb z*$wiiC5V827PJgn0Sxe;kE3fxX;T9F!aU_7iu7t$=XpE8-PDavcY5y8sI>rgP>-E%o^74GUErn*SC=ng!ONKU fGDb4fACUh$*Em((?aLME=8Cwg>s*Vh8Nls7#6xb= literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Battery.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Battery.class new file mode 100644 index 0000000000000000000000000000000000000000..595171d6c72b8d551537dbc517643a2fc489a58e GIT binary patch literal 577 zcmaixxlY4C5QhKt5j&0{;R;76fGTl;3rdaxB%}xnil9i8Yi9vRK9FNa?*R6&sX=1cirtAwrXsP$JrC~!VY@s{MKZIG%Ugr; zSJfbM$HGe))Idx{z`*(pwF5u$(<27C+Z!?{C-F!akkK%qL9c^h&V-5@L(}miah`>) zNG`b>2!=%`_INPliJ!++Qb}+93B!)_pW1x}&5NT+77|M7_IpEvrmdK0L#Js`ochUkMTumVqTdiGlA(t0Tft1{3RW z_HN3tbY9y--w_iHDZ;fAF&361+`e_(Ig#B^Lz+;!ROdK0AZW2Pq1?O_9^2Ll=>yxf z!< z^AyHD!eb44gry4_G4MnM(|pyN;}RAewTc945cHNe3cB*hRzqCBU{z~M5hWgelAi^B z5^4u{^Ar4?h0f;{u8z1)@LR8*!l>?iL+*2gxz6VzbHUsc(#+71=W2C^#uApfVqT=m zp|HaEndS#(D9u9kD{@n;9(=*(50u~M@0{Z9#uSw)?oaXXf1@nN)3L>|&WsANQHFQw ODW0(b;Wm+}BP=#j%bq zoCDv}L2Mx-$e*c^a(or^oTJW}?#6=U7hd4SF9qpZy)DQbgrBsHG_pA?VOg;5dVxM1 z_B%RyuR6XKTzA8+^4lu%%sIKt#HZdsu zbANd?OUgzbSqmG2)*`B_N7{ew4bFXaVWWtWN$jRzuQuOnqB6B}OVF6B;f9|R?gteG z%)rJbO2*xt9PZ*C>r2C`dn%~@NAD=<9R*G7Ru0?P5m?V~cYf3#e}aPlcgh0$I2=Y@{l+unu{xW#N2a$-gM-B>1ybB` zpokVv4p-s2)EHys+w|EcnrARzm6)3mxL)Hai#4qC#sq&QBg6Ii1o@LO=W&AKNpp-F z?oy9^AwLA11q8MMtBOC_MA;$k z-W@WqU51geW49%@WtCeU5hhh>1|{HUSTF{n2Eqyq(V}Uaa*JUpbA5WY$`C0#4Us?? zH&l!u#SqS9t8p;gR51*dVazaX@ut(P33s2@EWwa6oI1Cv+%>&8*o??yv(2zJn6eKi4dKR+Wtc7orf+Ffh8FZ&+tdo^U42nl*<_WU(n3yjjA zF^YC*KSbX|?gGi&>UWHP@pC5VJxW+W6cIv-6V@a}lf7(AVVWX3=cCeP!!4u&%ujT} z!_;%%Fy6&XaWb=2NN5Iy6BxN)4VD?44FP0~^qO4(8>6%Z0q+CBso!P`x8XSx*i8gP@M8PU%suDKneq3ZpT7cF#UmXWVcMy*q}!3MC67eour95N z@I2{ut#Z3^Agi8^C?RtoI>M@p=AO0VM+x!pVvExyKi~H3x>d4UUXjyfd#@?Hwkrv1 zzopkp;oUz-cLFuV4aSJA+fCcsAVhNcT|)GUQt0?^I#|TuT)#n8+c|L^h9Jc#cb$%;g8h_B@Ce6IjGe9ZT$CzmYI& zVi^_>sws~=!gz=<*p7}{gqg6Pq4Q5*1*<0Rz+mO=!AItD_1~VsooXK8ofTM7)VVaTHzoCe;e?d$#Ug{r+H_m$QFuw9;L1{d} zJYnlS#+FV{Abi70iDlm=@Oh2!?(~O}AAz!>CqILEWCzF=0{K&H&I4cmL$1w2J4F%^ Qoyl~bD|<&MazexUFBoO}nE(I) literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/Battery.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/Battery.class new file mode 100644 index 0000000000000000000000000000000000000000..da5dd395f90ec6a72fb93aaac095e07ad266dffe GIT binary patch literal 1157 zcmbW0-EPxB5QWbsPSUt;uwdWk?OP*W8Mh;4yN-ye?xc_8qpb53kW zXTQqQo|3RHe{{{lZCG@E zGV05OX5ZDUb%BSoSZ7ocB8Sl=xxU2YMVSorvmw>!DX!ejkWeCOHb{>KUlg* z&AN(fIcqmH186$Chp<<5iOwM!$GFaA?HG4X@pTpo)QDK(Q%8fB=%O>p%@fH@v?yC& j(}t5@H<0$O literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/BatteryLevelDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/BatteryLevelDisplay.class new file mode 100644 index 0000000000000000000000000000000000000000..80d620d413a3f37d44e449fa59434134895a1e28 GIT binary patch literal 963 zcma)4+iuf95IvJiouuxC^pZjgNx9WdOAV9)A{7q>Rf-e=Qcxts(>htgR*r2sPDDNn z1gQiPAHYW;W}QeB+J`)Ny|bEgX3os{_51rz00($#AVoL`+`f#4GIHc6(F;B4xFU{a zG;&<|A&8`NJP8|eD7}}eA9`YBAVXL_6+_{8!tXk--Ba0)3C0vkup2Yd)(CS)%2)Ao z!k#rV%5D)dFM^INAdPtw224WQvRio&7ENR^M_6hoU%ndjTp7I;t|tk_M$i^sOGHY? z)5lEwQS}Ljvlc%;3Elo6?1-2fSwqRdI$>u<=_WRCm5}SoIH61g)brTHbpu=f47fS! z$FgVQ2Fjcj40zUSjb#2RaNb19kDGBMMXzRHn^5|@8GcrN_jsVZj*N1+#XCxBJ*yN@ z!5uxgyUb-x$dYAFAT_(CGb|G}sw`53q4Yb1Evs%{NS^Z7G-A)hJ?yirIG8XIR;`N= z&b^O^1|ASrE)im~Ke;g@)Y?3skoC0x2vjE&n!zAy%M+znx^am=_cbH7*$QcPIw7U~ zz_%3N4dnRDb9BOSivNY`8GpOqu<$v_S>kgsL1vL*T%Iw@{I)*H#uXGfVqC(?Enx-b zl=D3!G-tW`6$@jm9(}>JAE>-5-aNzY%`tYy*d4?9zfhi=D)4sa&lM_93*}J4BOG!8 K!egdR;mIG7L+3#N literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..666d4d0bc20e2644b163b581c3926acaa6dd65d1 GIT binary patch literal 1155 zcma)5+iuf95Ix(bb>fEBAtjV>DVLHaaay-j6r>^^C_<`a%0p35#nU=0!IfiIjuYtD z@D02q5|Q`-J_>Q17zz~0d70hW-I;Ud?9BHcU%vs^!M27OflAZuC@OwpwcnWcGu1O2;g6 zdCXy6V99oUb=d1TDts*+PYGPMgO>D~GIV1K+^#^?o{r5Pkvh`#1xnSo_BpGg zD0KbyUahI2Ah4d6?AfGJ9R_k5mIZdEjIdQ-dC%SMsVC2L6j6$+y(-X1FCf7jbG#<7 zorY)!ACr(bGW1!Ujun(*$~W@3iCY4CS49aIfyYxb__GGGi8J2L;|}glGA3vOyXhG( za7^;8<#8Vs0j(AI-Cl>EpQ#><+eC(Kes}Rdf5+EJ0}9kq+u@g*0*gu1ZzUd18~m3L z0tN41#n~6Bxh_gT8IOWq*itXtxa}7vbF>*ZD^=#ea0r1J?l>s48a<1v;5t_yBKu{0 zt<%QWV88-xe)53pC3-n5Vu>el@MpfraD6m_aXjRljZi!`hq&@`gq3(xJ~SHxTsJoc zST&910q&W`gR#|V&*3UeOAg2~ZGpB79jgRiBV?U`TZG(YyTo+r6G*J1N-xU_YCNNg VsK7*n^_AJB8`vZ{!P~gvt)B}yHSPca literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/LowBatteryWarning.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/LowBatteryWarning.class new file mode 100644 index 0000000000000000000000000000000000000000..23870b23fbb4136df11eca7d6d5382dcb25fb53f GIT binary patch literal 1152 zcma)5?M@Rx6g|@xwk->k@}+>a2ufQ%R>V(=C^V9gtYR!F;g^}VBP?!rH`^&ld>h|D zqb1SA2k@DU@y>P=Vv2$O*v`Fs_ndR@x%2DK_n!b(u%RKsu|t- z+h*u5xlU7ZM^?Dq5>aB!FlZq@L*BfMJ0vbL^sZTsCD$1ia##K;Utx%q+`332ia{NH zNHIin`APx|X&nh983s+u5wBW}s_=Jt)fV)|bZgwMaNkmKn2gCotI4o(DS6kpl=zlc z=aOVx$E1b{hPf*?u44)}7~%&)n&Md4f&A?RZem(P_8%9@r%fpuI&NWxs@xVCGHM1U zS+4Qgw;WlPzTl0bhT9C|=k`&WOx!%rRVB3!PriQa9PqgzRcIiCN^;918@V z>!1fK(7`C?E2?5a$0C-fYwmf%sWVLFw)0)ZAz?9&yJSMP+*j|VPl$BPF;WqCeVXkinJh#Q-=01IMWq^PH*}t+M;}f z{*#3>3>4$`bI86WwI!;0dNa_+vJtsFp Ya@rw04O(2MYHIbj+6IPa6h-j-FT@QNJpcdz literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..ff48fbb952e2012220a41c5c746d24cfdd887da6 GIT binary patch literal 1271 zcmbVLT~8B16g^Y=xvf$_D<6u2sD(lc)DQxuJ`@QgwKZaz5TB-XEK9aKWLX;hS-#N3 zCjJ0_fxpIhrmZcBKCC|MnLB&u-Z}TqJ>P$R{RW_j=P`r?)^y`ic^%~y)F;`#a8yA# zsv~{vHMQ$|+HvSAJGOHD7{UVSbJ>vvN4l*-t#PiJzCiSa?b?1xU?RI(7YLX22W4Rb zi4-D;3QSgPS5>dt4duO)4Mzz~S9DW4b?Mn=Kl~Z?&+JQq^-6F?`@F3!ZC40~2tuH)?WU?~pJ-tgnHcU1YzB!ubhP$HycbO9!+>oYw(G6d?NNe7WK8dtQ+SLO zj)(Mp**p{23f6|&a3EQ{N%J&?XUGa9TH4orrhN45aevaJ*W$#?{N?EdtnvH`?Edcq zaC(31VOXC)K2Wkz83M`9_-O=EA8)jqS{U-Y(L$0x(N|tm9oj}M$$|XxX1=im>WumY zLbRwaVvM^2SHU&1)mT!gd9vAE>Q`)~|)uu3D{H8Xu&RkPvIckQkp9nBX?c&Ssb;_Gf97 zCYtyI{87fc>_(#aKz!KQxwH42d(YgnKYo7w4qzXL8WIc#qC4Vp%%#OY*hAmt7I*pB zRzmiKr=)OQ`c#j$uZ0*MJ0st<&orbME}hzA+j4DhV4ZYNc~5CbGwd$HcoJ7-&}VfR zp0pMLzlb}G+oBF@4Cy1sbJR12n)$yZl@3FyF8W+Y5*H0*kz+`jl};8U)_{f#L%!vB z{ADoga{0#Yx}2fV5|6(gq*5sW^o-Q4V!-qvVAsEd}yGIEy@ysVpwfW=j;gUm2^DSR+8JpnuZ$; z#hC->*zpF>1IO)inZYfFTr8^``sT2#V;gtEOErnoj5w#>iIBBQC(NiC*ugHTw|$>` zeTEIQS(!_Y%hW=|o&gK@7&1ykObjdLJcM!|;Gu?nhUI_gG4LpCO!GsDu19pe-A65pBJ>OWX$jhAq0_oVQG?Z literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ElevatorDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ElevatorDisplay.class new file mode 100644 index 0000000000000000000000000000000000000000..e7eedf560dcc617e4875dca2551670df5674da86 GIT binary patch literal 1076 zcmbVLU2hUW6g>mjh3#6D(pGIPw0VJXr2Q2Q{mb7${4_nv$2{QULp2Y?dx4a68qveg%AD3l{U@?PKxM|fh$ zwN!2CYb8C8e!YsWUb_9jco08O&J_hNt!O zfTy`sPSYzh%pJJCtDiHJ?TeBWnhc4G>&`wYAPl}l9IP|YCda7~G<;JSfp40{(VjD;ImWti^@ zT^XpVC#4!os-@3j}7vY1I@5hA2->R&Ku?Wx}lZey|RH@3@fwt z)3xh&UkqHYBUBQ1s3_AW`SlffB>wKQvj`4HGkhP^RY-UHi0PtVVO% zkOS2gRX1#TcB(ECw-XX#gT^FI>k_S4I4$(ZVsuWyqmT!gei|eyOd6)~|)uZf&({X?&1MLPD$whQ#=^zy!Bhb~eK-u|G?r zG||K#;EyuiT{fj!A4nf&cJAyw=iIOP_51rz0DCylkYLym?E#lVE-n7a?)xscxXXvO z60##aC57wKubL}_JaPuUYoBUJG2A$@hqmR~Ue7vipYV>-kY?DLhU+-iW6&oG49^?W zfM3V4RnKFqFr*J1&rvTKD&|#5N-c&|Rdl(IB(59CVwNFkmRea*vIaC{7;+8A<8Oj~ zo6C20+vN=ThUnOC%a%@P$CoMf(HSu8P8G|=%7&=~e%DqM#WHSbxXG}8wW=7njTMHO z9#_>sMj}x@^(^k7pkeK=7B)`@iuVl^u})qhPz;NWsKbu1-b%+)O(nVAuV}c-usrEK zT{~XyRp7W?E;G1KHHx%~@vIyab!^~aSWlBU%`s^-He+a|)CxVy1~#!p>D#`~y)MJ5 zSub63j&&*_V%va)9fph&Ve^95;E{K3{3OG99@s-I_K45b(+wo z2xN!XoUqw*7kjlGvSFR3BT4HTtwcB^^so|i&O)bshO8Rd3Hs{gGZ^K~Z^(U)eCBAM zB`gS=LYfd7@?k?WSUUWI)gRb+pTBp82P-3# kMtC&B<9~&+6rPSX3Tq-%h=npVaQk>h0`wAzI)N8|0C*P=CIA2c literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Observer.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Observer.class new file mode 100644 index 0000000000000000000000000000000000000000..bd4166a44c31bb9063241635fac667f26a8ede06 GIT binary patch literal 156 zcmXv{OA5j;6r5KzQ9Fq8eBYnv3&0LD zi;A#`=ewjL$;pG8E{KyLg>y_kwmHQR)H?h!7GuJ)=E5#;dsV#_p9!Y#E}VrhTCGon g`7!p%%l;NrTKvn~p=Su1(tm(-YXUPcSj7s{FVcJ{8~^|S literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Subject.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Subject.class new file mode 100644 index 0000000000000000000000000000000000000000..192f6f1d8f515425a8d222ace46e8237498981d3 GIT binary patch literal 1251 zcmb7D*>2NN5Iy6BxOJQ~>B4v@Wh)IX6-JEBpY@ zNT4bpA)fgZK7umWaheFRlo#7~X6~7D&WykP`1A$95+0Z^2s3`QA%m6-igI7GrVCD^!ti>zDJ>x8jf$I8A*l=80#16@N2^Z(bG zN!O(&tqEMUaZNW%1ajAJu{lGYubkHhU7ihHG;Je?Joj{z4D`+r#&h|;5kHIKr6guB zXJVF3?rG{~ZOo&{ll0`iB8+ws`jwejB+PcDon%*%Siq8vo3L0!bFVIx)Ff`(xP!X{ zb6Ygl!+yL*Y#aH6RE5>QSrdEF=&g$13~KVJqnE>uW;?I>$0vD_V*DEs482YKHu+>= z0CE22J>+MSBagU>_?;;n!Y+J9`sE=qACY|@R*&#A9pWVT9UDaK3x1M&K? z<`&~?Z>BZJHl_$`?=UjkMuG4Z3uUH#gNND1EyCNQ@0xxL+KLYS45pCnYc?IxpI~$D bh4k-pZ5GB6Qiz${%;dSUcZ3or3@rZyvRoJJ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/VoiceNotice.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/VoiceNotice.class new file mode 100644 index 0000000000000000000000000000000000000000..fc2d5fab173a73cdb42ffa032782822013a3f823 GIT binary patch literal 1060 zcmbVLTW=CU7(D~X!ghs9Z)$6y^|sL3wN|T^#s^7BNJwjfAu&EJ%LKPscE~VG^k-?5 zCYtyI{87elcS(!Z2hxX`op1J>^IhlH@9#eW?BPH|g257z~Mapf4R84fbjwG%d$Rfv(G|TNQC|Ls+|EF-{JDD z-SId>p(z~OYunNd?a5_IeQ<{iyEDZyRoF0-V9>P{1+ju#8g4S|U#%zxZex{UuE$j^ zkabT88Ku+6;tq-$*8l2Y>(fy2zJU@p2qgl=u+)qi>_JlY|r!LMc#Qp%fB|7*$;cu>sM|P>_H~h?SF=U^E$5Q^SAJ1(Axx z2k=p-#|e*3hRwCF@43h4J|3U`JplND4G$@Sd8@j=LrJUbrD^-}!m9YYzZ+^5Sr2J} z;+4FSekh}kf7rZIEh{j(ts`xB1V*a0hCq7Pv{fD>$Q6*msK7*^BlYXL+f?z1Y=%l; zGB7O}He{@w|NNM?m->&uV(^}ZI{CX&M*`E;^WaU(v5j@qsn;4FN&<7kDfWzs^C%+c zVM<_OI4JmeV64NHG3^TYB(PLX(BugDXAZOY>|u_`;hcLqW~a1?3Yf=&KW;;J?`?A&Uil-I2O3}oD4FUvz(M5;DrbJj`!yP^cVu+wh@i%I}KcZ%5j zvAK?0YG1qIjt#bD%MAw=a4ooCK#Di61Fc8T=P7t*HhRe3_QQEv7X}l?XbS@X&kyu+ z7{>%(Tyl#DM>>0t;#rT|bdU1cw;nzoZ2rZ}9TwjRCy^#FgDj~_OrGJ*kuMJju!1l2 VvW%_bE9pzTuVKBfw#rBfwf~qGz`Ote literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..36366863e3aaf3a7c1a143e5ee4b664d88b3e32a GIT binary patch literal 1019 zcma)4?{Csj6g`gug|0G0$J`H{o2bxD2wC(?$uhHHvdF-sf+2o-u#R;p?NZ7T{wrl4 zwrE`Z>>p*kuR&;x2K%A!-TUr2@0@q;VN^-Zr_ zIsziPBg&9E=a;->bEj9TI>SCgr1_3vvo;5-Gei#?ALcBlQ6No8bSX7b5U50pNQj*QrW*QCOvz(rORA?os_MVCu z;t9wi$f}SL7rO^45=atN&2r58u-`Gg_q=1944InS<#vmEmWYF-0tt&G!9TMGbn7Lz zhbC=u`NDiF3Laxi#wJ5LBylvL$5ZhHIff+nJU;5W7b6BOY^2dSr!MG6A#cA^WR5`& zgfvbWUWQ>4|Ao1)ENtafJVoITh69@q272h)Ddo(9m;~yuVz@)EYre6>)1{_!Qxt_{ z&9Hh7_lF)G?uPgTxH4DYp1xnER!KCk(*BBQBS0&45J<0z{?SR4Rs{=Gr&3g>SbW8= zVC~Eu=^CjkWP;#+GzgYr-{?phBV)9qV=Nh0SpH0i2v+DHCmy;Dt3gI&Y0xIzWy%XJ zvbMc`jkUjn)PO+7x)4bMAL7vj{)!9;cy^5C_FGB2ZC8YnV`=RM8#|wZ3uhA8R6>#( f^lZYRksu*Z$uR8(&%cBH8yA5VaBgEKSYP}CXrJO^ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Door.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Door.class new file mode 100644 index 0000000000000000000000000000000000000000..3cb8f7c8e3bad6c1e1e353a5074e907ceddb009d GIT binary patch literal 707 zcmah`%TB^T6g>ldP^<#J#TObE!otRwxY4iyTs2~XaX-KaHMJ#m@VnG#OkDT@ew6VJ zVAY7YxpSZAo^$8z{pA(F0SYD(40$Q8dp;*CWH)R({8EZ&->HUSWI|)eUh!M*_&n%1 z_2!jmNrrTriVewS|At}P{TpD|bHrdAdx0m*49VT%1%p-z+air5rfir zKP($r7=%}G>y28~0>i8gU8ORv7l_mTbyGy=yy*+7xM7R?7d-M*JW6V^>k;d<39O0l zbVo>aflrY;yTu6uu}r6$HOZzk;4&@)Grcgs;IRl>HZ>+iZSwIF;;&F Q8DeAzBRdvjW59Ov1JUz<;Q#;t literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/DoorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/DoorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..a476f25c17b26ea402a87b8e4d23625fd7f7c572 GIT binary patch literal 1032 zcma)4-%r|56#gy+3bhkt6X%a@&L1082O-;hffyHLiLt_xP7>nN1uNE+)|6txf3@L* zX3NZ;_eU)|w_(zUE!c@KY0i^QR�WBI!bQZC;t9yY$f}SL7q_P>5=au2ZaHRs&}*CCXWq6=hK%lZxZUKQCG5bdKthTn_~%xi zvR-j}VA5qXmw!Ml3RbZu<0V5nq;c4%4ystk21Am29v^nx%OQgnuB6evFgt$vAXMC6 z7gfg~2TB@e3_D@ixB>a;eHMk~RBR&8@IFjYwRyi^4&}Y)oYWw8g2t>E?!fDqA1%?m z)MSMUB9e+Ttgb^V<jPyqs-9but$C~0@CicoSSE#KnB_Lm^x mL;|~)kfag48gpnQNC;FiOuNPFpJ4yTMW6+oTi6cHH-7+GFXu@B literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/HyundaiMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..cb5aeeb002f489a73e32cd81aa880b4057ac1b8b GIT binary patch literal 563 zcmZ`$O-}+b5Ph>Q;I1g*2Nz8YhJzo8#28N)E*j%u^`hZk*cxhJOKO+IpXJHKgFnC@ zWt^>xaA13w_Dx^kyqSLge0~AAK%)YWaA@UtG7=o69qPC(o~<)y6K}LOo#P(Czt*t~v4WtA63T>Hq!Rg%j{DL)iT+3uwjwk;+~*v<_h80)FbTWA$JS4Ix3(uuPl#4|`}7OBrD zY$SZtsTs&yl{Hphbb0n7rUFe6&mvnMpLie~D~!5~J>JVFryp2-clRO3&}B=GxyHEh s$3hkBjF^uN)L6sEChED?CFe6On#*KmfB;ec?V&FrfLWrrT3ka6L0_yH2Mm0*}%DDYsOh^p;0DctW z#iZ)eczE_bpYP7^=lAOyz!f?zGzf=Q=95ftm3FMto_Mv=T=wFJM{Tuf!6WQ1r#J$^ zzfpy<1H#csyqtKawdtP@3Er(vWr!675t{G`?N}A^X_}9uc@d*b61HQVh-@f~Dsk2H z>{z|CL5+Tuwa*4ATM-Uwh%N{r$n{KC>5pqeD9RaVyn`+=6O()E--N2pYy!0^T&=X;8PCi)b9VOE?;k$_tl+H%MPMXwn+FYtb~o7b>$dYbaNA3E z$q)Rt234SU-#K>dhSS=$D?9scEf7%azTXxY-MBrsNPi0gJx#8$6*$4sp}L9`<;z;Po;I4*#fr;B$hJZ~B z;EsT{wO!fVTrYBwArl(=(i>jOEgv;^-1fG!({Kec8-C4cRGqfRcGsx}dmc487C~BK zQG2OfHwfVhOy~0dOS#b{b@)%>Oq4#M@&zeV(?2HG*{JxU*QPu5{1!zU)cBN%QH-&A z(CZ1zLKxdVtbnJa;;sG9#w|*@S zO;HrYbqHOrQ4jT;B&xM9CFh_!BF2_~)ULVjJsu)MVlD8~QYQ#8MlVvKMT09(G<)=o z(;pqosE4diG6LwcE@4`;=SW*;=sU;YsZ6;?dj=})^lT|zr`1cz_sKIzsg#IejL?@) z3?yjLU3bgd(k4*rI|jc|kOD5rVSp*inDQL&mQh%wZt_}}TY`Co2pJMMO>n&-B8eL! z34Ub~cpR()_xY7_xQ#{Y0+Xe=Gh|Poo)W9{1s;{>&oF-iqhqdEvlnf4*!b*^GS1y#*$0j6!`?e{XU?26Ge3WQy#??Z1sM^Bb>Hk?*qr{Rf99SP`KfPu zrDEOnUC;2jKOD%2GR&XzOJ20O(<@e-VV@yhZ?>w9j|>~N|03uNvT@WrJgmHDn5#67 z>)F=3+Hu8T$bOnBJyGu3mSg$53{o!NVu_@3qT z^lHA9q}T^4Vu&Xo3nQaKMqJz;sYoD6P&Laj8^eCb^p1GPHW|`2x6ADo_bg!tP6ZMc zh=PA+4XElRw}&QOHgow|#3*=%=Q7qAQX!I~0d-Nu2C@uE?sto?$19v2XLiKo1qZ1D%Qxi$SAS40q^t z%@3AnUn;an1rbW}46EnRVtMqu6G9Z}U$*`nM6x0?JbLO0(8XlTj78%LOJ67>f@S*035Tj- zCGZF@E!+gVM1H|V*0$EJvHJHUH2{#YCP)&&$9OVHe?tO9dS;BJ_JO3`w#$M^U0S`t r)9uee!6^lHM&Wk_`Ft@NBoUeWZE1T;! literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..1d21be0825519ebf88c5fc1eeb041de2eabd4dc3 GIT binary patch literal 828 zcmaJLR}+=Qcxs@9Hp8?T2NQpm9wgDk zAFw}av#-IggR__FuC7KCdJ2@G%RKu0?QL#1*}Ah~OrDvKdxT%<58Fjm!p`rYl+Rd_7x zz7iO(nuhdiGSt?8eoRJfeI>9^{jZ1$3v{Fo1g1)7)i*ImQK*AfrCf867nqCT*fS=~ zB8QBF34!Gp)UTUv(3E=LL>67Zl>NxGK(Q33&GNE#2D6xR@R`sU>OCE@XW9fVzF=M; zadIfI6ifSpu2>lhE{a&R|2Nlc;!3=l*R=jTWY}U~3md6ZK_iDT+{BAkMgY~#Xe9G zLp%Xl7+DoE;^Ov5MFL5ps+qP?AND(j`;m7ngCSFMy4-4U*A%wzR3KrVBzR}$fU;h4 zYiQ7AE0@1REeh7KF5?+PI;3$lp#G`Yz$QbIyDlGfor@8J7OtexIj2FCk3z-$by0N; zvah6Z%CH-T1r5m0?z1Q?r(z3vhBsk~1B(v^kY1v6Dwv}d;#WdMutfhj@lZA_`ySz?T?@EN z#*+ZPO9cpcc8taLdr7-(SA>#dY2^k_cfR-urxMsi iLXsx*JmAnskPxV3n0A8~Kf(Twi$L=^x3S}&FaH4LlH{)d literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Door.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Door.class new file mode 100644 index 0000000000000000000000000000000000000000..7c1706bc72aebc3bbc330cb2598f33458daef0b0 GIT binary patch literal 712 zcmah`%TB^T6g>kirC46R6;X*X0TwpK#Epgx;Hm)=4Eq8jloW=P;&-Xhn7Hr*{3zoc zz^akp=FWYdd(NHrkJmQFmi3O-0z8w+2XgtSj9#Pof>`kp#xv3n6o;@zHZh%5X(oadnp&5gvwmz~ zlOl#KY|pVwdL@=xd_wx3oEb=Dn$&*`tHJP2K;(Q*B>IO$j4E=iM!LTVL<5Z7g&3J% RLS`6A!bmN|*q^dJ_yo;wg3AB^ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/DoorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/DoorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..3b95242dbd73303ef465a52734b9393059fb6b98 GIT binary patch literal 1038 zcma)4-%r|56#gy+3bhl)Ce9!Gp)v>6LCE6v05LAe5@UrWog~Dk3s$TtttrKX|7ybr z&6b%x?~ht`Zo{MxTSgyx?>YB;-}%mupTEA|0eFL=j0nS;Z}u;3PJh!scTY6A*eyle{_*}hle3Waw z*N^K4L+)fIbfVg|EywbA8Kiun#SpEzr)B~%1q>+_X*{G9)k#P;uTRw)zGpeT%0Z!( zq}WF)Vu&Xo3nQySMqJ#Us7N45RJ!GujbXoIdY^d5HW@Oy+vRqPdzP>RrveEnlHi|P z1Il{E?V(AR&3s{&Vidf*-qO~5Ir}WYvT|IC1q{dNz7s>rCTVpYUm=7gbI{*Cvm|viBWKn`a`IX1r?C` z&=2T0p{g@CAy}1MS+ae{bIzPIcdmc``S}aL8r~=f2~2x-{kUe)-S!UMs#&%_yG?u5 z{P4Bas9H|m_1va{h(O%@dI1Rhds+aBNzE!T-0?8e>V%17k)8Ta|81W7r z@;MtM+uvC-+E;f^ZGViQ!IqsSb>49sS@x|~ZlT2{p>))YJznEX$PHm8m!SSNAC-R;75j*duBi+ucS;hB!-Jblqh%{`Hh zU+NgcID6mFF@RdvG=$=G`?sTvTuF};<;9-iS2ueVV zV3eNx#)Sk$$w-HOo#LD&?&vrLi2Eo+mqOqn9?^F?%F+QVH07Ff8$XcxF8NqhnBtyz{(l4_VTH*aE%w#$@yz!*?JhPc}i};AXQCK1BU4LF-*N0A+=*jlXa8K vb7zfqovxadPFtchIjk#0$Wgq)I`M8&elJ2dh$~3mU{Imy71*L^2(SMF9+*J; literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/MotorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..bd599a7fd98d9a402db1b9853b3b4156c832a78f GIT binary patch literal 1046 zcma)4T~8WO5IvU#7S^p&TCslg%VLGqLP%57WQnn{v?20gvPwewbiozZEW2h|O!!wV zK4{w1^tnH(>D&#KeP~nmVeg%}GiT13nV-MD-U4`yf{X~mx^MO`Y)*gEKXXrt9rM)n z%u=!L`mSgA+#e2PL>cDK`6Vyf-02l7&alrAuQyxO#z%&1?f(!ugKQi%4-YHv8RjaD z<9fFBu6A587&bo5mY*nhZOgIzT?Q$aZ!tvo-4io`m;#0c6)D^&QsqfVCRdvhHhj-= zdU`eAN>c0t6*0sUkcE*^AtNqsk5nX(B&eF@n2lk-V|qutW19@=n%m`ei+h%^1E&HB z3q-*`vj$Z4lG{U*E}OahOllN7!@7*;45<*y(SRDM;svq{N$z=k)O9aL3|d%AvvY2C zeZ3lz_s2#0sLcVF<|)J5aN48=`B{1`#N||MAkXk746<+Y!9WjHzC)d=5X(W+Rt$IO zbE&5S?&^CbnwmtbEbT3ei2`)eFoD#H7$v<# z=~OUBaVl92vc*^U2G&mBldds;g>+y%j0VPH>^nV4W2B9Cbc{vg3QJ!oBZ6i6#|ek3 zVI}YgFYVj}yF`A$Mb@^~uCe;}BsBn#u_j0o!N+(qN#7v>B0V$4Qu{#CZrf$Sq%N)A s;OX|~px~4OyQ7e#DZQLvXhcX5RMJel!R8OJf9FM@1(;jd4$fD<0oh6If&c&j literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..ebf898818d50b5c257c365f40b2fa5b2d27ba9bb GIT binary patch literal 813 zcmaJ<+fG_R6kWr`14sp=S}#@cLJQRNB<&-OFB*M0UJ{jr^l5-83^|->PLKRo`yh!X z{Qy78bPZU2>FLX!*|XPPv-aiT@$NT(&uBPE2y8@Z^xc=VDjJxc+fm<4s6M%ezE(lx zASF;7%CU5P8T8%r&QNtDfw?a_(9wZFvQ}>iqz+9_<&Z=+k2K~43Z4$s+0Ce1NFSRpZq>r%gv8!#-PD{zs$8)uVFGJXV1%Ou+H`({8Y^IOJ2m z2+m!ao3N{nwVm?(Y;8W;Az>Tb53U-J;Ej7h>(Fy~3ZCi41eu@HaE{i7!Gw9*{0zYJ z6}>DLP~eMA?h;{1SMO15PqYQKlqQ&iQv10o@hDhTB!)kRJxWo`WsDG+4%v5TP{HfD zZutgXHgfqp)S_Sot1_N3q(d49ed?czHLNovx$E*l$GI3VXyHog?QUl&!! zAO}k7rwlt`*r);d>3tT31NmFp6}A*n-HG>m!}KdE$wa7v?SVEX>UPH5}=cY2&5Oq2V&D;8+O-k) zHu;4XS=(H`#?rq*YCs@kS%@TokMU##-=P8oJUhgE>qydWTVt8oSWDR&X<1x_F&|- literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Door.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Door.class new file mode 100644 index 0000000000000000000000000000000000000000..f57eba38770a09fe93a073bf07e8bb6648202331 GIT binary patch literal 712 zcmah`%TB^T6g>kirC46R6;X*X0TwpV#Epgx;Hm)=4Eq8jloW=P;&-Xhn7Hr*{3zoc zz^akp=FWYdd(NHrkJmQFmi3O-0z8w+2XgtSj9#Pof>`kp#xv3n6o;@zHZh%5X(oadnp&5gvwmz~ zlOl#KY|pVwdL@=xd_wx3oEb=Dn$&*`tHJP2K;(Q*B>IO$j4E=iM!LTVL<5Z7g&3J% RLS`6A!bmN|*q^dJ_ypIdg3tf} literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/DoorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/DoorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..002087b0345b000fdf5ac9cfaec45397eeccba82 GIT binary patch literal 1038 zcma)4-*3`T6#gzP6uLSP9dkeYF^3bn37Ka409j@jCW{@I)R7RMF05l+O1qS@g#Sv} z!xoK;&;C)ya~m9e&`2M8?>YB;-}%mupTEA|0C%{Y| zm*suW^UZ(sVg8I?@Up|*Ub*fL`wWSi(KPG(4C}^!87dUs{7`R*@VR>9=rG@U zYaG>0hWw|Q(8+4ov0XdZWsnNR7K2>#j;$o(Dj3olGPp}As*{jh!I-Kw1K)Ogm4jj{ zMX~oZ#F0os5k^jff`qs|(2zums0`b+8pD3a@;~y9V=-h6ugjel_ibT^P8AZ;Bq2Dp z2bA@KJ41^u8-?O5#i)3KrwY~>G7*uZ0X0#>I`RxD?)!Yy_0C5OdbE^g=gjH`m4iri ze_T`^gAz(*-qO~5Ir}WYvT|IC1q{dNz7sjrCTVpYUm=7gbI{*Cvm|viBWKn`a`IX1r?C` z&=2T0p{g@CAy}1MS+ae{bIzPIcdmc``S}aL8r~=f2~2x-{kUe)-S!UMs#&%_yG?u5 z{P4Bas9H|m_1va{h(O%@dI1Rhds+aBNzE!T-0?8e>V%17k)8Ta|81W7r z@;MtM+uvC-+E;f^ZGViQ!IqsSb>49sS@x|~ZlT2{qltSML(nEX$PHm8m!SSNAC-R;75j*duBi+ucS;hB!-Jblqh%{`Hh zU+NgcID6mFF@RdvG=$=G`?sTvTuF};<;9-iS2ueVV zV3eNx#)Sk$$w-HOo#LD&?&vrLi2Eo+mqOqn9?^F?%F+QVH07Ff8$XcxF8NqhnBtyz{(l4_VTH*aE%w#$@yz!*?JhPc}i};AXQCK1BU4LF-*N0A+=*jlXa8K vb7zfqovxadPFtchIjk#0$Wgq)I`M8&elJ2dh$~3mU{Imy71*L^2(SMFR)0YW literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/LGMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..9ebd59b31b9967dc05101f5872de01671b9b2ff4 GIT binary patch literal 1453 zcmaJ>YfsZ)6n@^_YDdRl$mFVAWh<8=h_@kX91@dVFpz!kwhF~z3c&8vD@X)i`$1RiYmUrkhjk@*Oaji9@ zv{QCG$5jv$7&tP|OrvFX4vcF3$ZB{3v8Lm=0+Xc>c#%FA1p3-cvgeuJ>50HxShg(H z%_2}@)9%>bmcUdl3?S+AHPZ3kXkiblc&_HPo z!?-7)?Cn=~cejho@<4;aYw42Ru_~wSy5;Vh^_C@&DLDxMN)NkAA6xglWybH-tSdrpg4wdOYu)KgnfycRg7%q^<$diAN3!xf= zK)EMv=ZyA*ifNd_H19!9L!SGXC|7GAD?3RnVp+kGz<9{E@CIvGfgzA04;tSjh1sF9lz2rfl2nh zsbL1Q0?B4TdWz~bzLd>le_oP%&Z*n5KG-}_nm-OJeA+Ng98o%_5xQuQ&F6 z1=r}K=#$I<2K5_g`r;MR`XvUhkiC$Q5xQp(qdT2sf~#~55O|bUvIHd{#xPD#e&a%d zR>^};zd`GqCH~TJ3Xlp=h#m#~Pwv$BJQNU;=m|;ixs`?IdS1Q~hC8vUUt_+!bcuy?#4box`Wkv= z`4X$=NOr?#`r-{GS8jWyLEbM oR{gfbX=qqigplKSjSb@6qWpeDZjn-uxy7(TgDdccRwH=(2l1dc`2YX_ literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/MotorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..48bd0084d09b458538924d3cc9df65af49505f9b GIT binary patch literal 1046 zcma)4T~8BH5IvV|yX~?Eh;4{(&J={XayJK{XE>2M6VM4726> zQ7zMaTRke94C|k!%a4~jw&hsRcP2aPe zZn2VUCMfovjwoVrsM1L5P!W^22RhJ%YNQPJr`_xDs&yZnAaL?nzj(a|2Fv40I?K9Ew ziBE~{f5IfmC^kbRr?`^8Y@ThxgPxg0cY&2$G| zN4&RW1Cya;%F9sFXIfo{mdm5(oe-i-FHJ*ox45@WQ&VV_mAxf7QGiYwCXif~qokJz zof>8-PA98Qw*2znz*?z0$`$4=kqV6ak-%7pey1m8gp}EejIdx{V(|-Q%wUQBF~Xs0 zSPneWOFK8l-X_1~q8gj4S6KObk{$r4Sd}D+;6pqbr|*yenVueDvGq|gZdxVDq^7J~ sNk@f9K7>2rxIX6`U`A1L{@nhyVZp literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..f4931956b3da08a78ed1b468ce1897cf813281c4 GIT binary patch literal 813 zcmaJ<%T6Le6g`Dt1LDX-@vZp40i8@QSYq60bkpi2&X5>a1(aB(>6-Mk{@1vWWK8^k z`6%Nl@UgMo+^Spm+*9X1{y+VD1kk{?gM`3xr24;oNvonO({8dQokjWv1ae*mM2kPXe-&WyI+4hw{ z(K8+Cw`8cT|MHlOuJj*)Rqs;~O@7dqIuIz=F1&X!XHlqwUbEhEP!L#*;W#iR%p#AB zgK2@47?gK(Y$6LRp=@iI6{ytWWLZjno54I59V`$U!+M}Ywo98Jhb1fvB!2x6SdXQB zMK`UC)f_5Vv!$C`_OBYR<}GbF3K{m;($WWwB3GBnIrCTrwlD$5?+v@b!s3uG{USJf zW^TfcI@ET`6Qi~HZij?5a6hH($modIT!zujT(9xLyJMI;GKAx-K6ljnG||e;X_r!#@Lwr= z*rIXq*+0s7ZiCPV4eLYiJ?Eb9JKy>7>-V=i06Qqih%l`9X7|$O^f&!;_q5nD&s@*k zDIQv$+4e2hkr8D`UGOVjw7JtMR-As9AyWUqu&Pf3ml&dlwNF)snM$>Ovfg;7*DD6Y z+UNT~6XmvTIhMc2Am#E6;yQ3o%>-f!7-m(Z@sJ^29))Cc`b4GSdzRBF9pxKIihZOa zhIj(9FtRFS#KrB2iUg8GrCW|!?RQ(I_mQ`3lOdzKZEiQXX9+uSDv&Ts68v+kM_I49 z-8bp7k;~ts76mI7rN+Bc z5P?*iVRant_dR-i6XFx#@^pcFrTuN1mPA`C?JtN)0(8<4f%KvnA-zQDR4_wvDp^&s z#aH+a*33MRZjic0CNLgH17j}sgPx=zGDb5x#GG-B`LBeCV1fQ|;-PF<3_QY1yEfw9 zCcn@kYn#hASo$|e4G3f`3y~!7DV~ksyHtRHXNQxCpd>a}!&^`T7qBJ>kirKJe?RzxMn1X$Pwi5m?Yz!d=#4Eq8jloW=P;&-Xhn7Hr*{3zp{ zf~b+;=FWYdd(NHrkJmQ7+4w%f8jN5=D{;`bfmoms`3 z7{`0umq+;0d78_wnph}RJFb|}ZbgjwND4bJkqH<#uB-KGh0fO$Q?J9X97$1^JI>^d zktHo*`Wl9i6hxjvKAnfGPEm>Sj9#0A1BPT>ZyAjPhIReF3{?tmeP}dA_*|oTd{k(^ z)sGtnL*dg*=v1v|TaM-LF-XNyn;~9zPs|h&3K%jfvbawvYLk$BQJ<XKJvV!P^)OQ1 z9~YI!Acs;~rwnhRut^6>Gjv*%R#fo{~XIOoQ*2<&T-3XyT*JhBoSKZ&HiAl7=(*BZ|CO{_*638x#G15z%P6cxm zr;^nqTYTkjV4d7O=^FD_$c4tkcxWsnzSEO5M$YKO$5=3~u=s@#F)YzPNj#Jd%b`bj zY2PN?+vFEoWNmZx8Y_PXsUd-kRUwiDKE{&?{52II;Q28YJMSg!wo?;Ij--_vJl*;n nCY(xOcM{Sxqm2oNMuLPuCC9WIy!-+7Z(Iyo$hnEF@OO4UMJfzra378L7^rZ2W$5}+nEyf5r%SAl7krHOy2@wJV? z#0P(Xzo{{vS#BGXHHKs|=kV=!nK|?8_m7_dsyI*(V8}VVciuH<<<6Nf%WeKa*t}YP z^JUmK4XYs>VJiqRqxW^fCoZ`6Q&RBH zVA;ImSfcL+iJH@rA?qtM#Yjt1O9jJVztwPa{$b+jzv5K^U z6zTe$wg;_Y4eNA8jg!{f=4*z{|5Kp5)R4fUiYzu2r%FT=fQKz?nK0T^1)2QtET59;?(VYZW!m2X;x3g(C+Y8mYnxx z?*Q(7GA;~c$Wf49DrhCwh|sD~b%+4{fQY{H9Sc{q3qYk+b-Q5~8KZh-jDm(ZRfLy! zNgM$gcfz$#eaXevcoqw^kCAa{HGw4AOq0nRsTD}6OdaV)AM4EAR3>i1 kG!Rd*PCk-I;TcNA`<(Cz1a1&luzG`}LQD)Vs2f1-59aPTWB>pF literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/LGMotor.class new file mode 100644 index 0000000000000000000000000000000000000000..d928841fdcebf0efbd7ddc428e48d243f335f763 GIT binary patch literal 1263 zcma)5+int36kUhglwqLWs9Gr6J4`QBvEFF!e3s2kGb z3ABMZ6gZgrVe?(%Kw#i2`q+HGr_M)*fdbamO#ASb^2VaXtC5(qj+lI7H+HC zGXvXr&Y|@G8p>+uK1_7k-w5szpUJ3ry))5?G_&n5b?Y?PVg1NCbKCN*t+w0XNqzbe_7Ojr+(Hcsj1q$?$ dMGh~qPTp6F8Du8?t`>oiSnvUS z6zZ8tgse)gEY0KIdmi_CUf-Ty0PJJaLqT9!%i--H<|_5I>PKC9sZzNgohYqR4~{_P zCjJ#igLrfmopoFRu1@x=>vh;p&@DOSdZ@nw(_d2)TD|a_ggYb^r66d zJr7{%8y))iuKF@S5g$YNCYm<^?u$jAo=mEaHQJ*SO~;J}P3XsdDBlRpw;Kd{+7^JAS2Hd^F^D8Ml@vnO`Vy~vD@fa@%8 zKUq=WKG%Fg*xY?Yxp|MdN7VjU$P(8oDZr6Ag!}v|1b=3vHUZ)bzVb#2D In^oNS3nYB4DF6Tf literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/MotorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..f2c79cc3e1f24169484441ed25e0bf44ab8538af GIT binary patch literal 1046 zcma)4T~8WO5Ixrg7S^p&TCslg%VLGqLX4?t0x>q0Hl%!*tdfvEUGR!)mR++fCj6@w zA2e-h`rIGYbnb@AKC~(Ou=mc~nKS3i%+Ft6ZvpHeuVRK_%@@53o6}$TXYNU%Elyoe z>=bIQ?|P=s{Xt(vgkkQSU-E*@oo=D*40;T)TBBL1e_+T|{|`}QP|c&p;bHk5!)&>J zT+1}yR*%aj!}_P`^5dnBZ8?^|$Dm|$O@_#Udm`e9YG9bxk;Hu>RT_t+v(*V<)AuZ= zTdd@o35tE7BZ^oYsx;C%RK(=%k&ZYL1XZ;hQ6Kc$!aL$^TQH=mZim}V?pe|foEj9& z69xaw>QmKAZVv=qHnO>?)M$8yH5Jbpk|CDEJ~dLu3uG7)-1GRb<6aCIjIfqQ`&@MV zVkIQ+kBjtCn*%P5Q-(L;v~de^)AU-3%j#H1j^T9}0DCs3a zr-oUI)5)rnEx-IXuvY4xa*eqwqypn%Brq1D-|0yiA!W8ABP^I#So}g6GgzX3jBuzL zmIIIU($0;sx5+QLsK(~%HCFzfqz3>hRwYRy_!v*d>ANIArl&_(Y<*OW+g3?3sVOTr rc)ImDC^(_O?kFT^N-xJ41`(13wG=aMu<--z-+41I0?bWp1?Q{Z`(f>l literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/Client.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..56850d293bb7d534c83b1a2086175b9e9d13e140 GIT binary patch literal 1536 zcmb7EOHUI~6#i~`OgmI*Dc}PYQAEn4qo9bkpjZXbipClYnwSjjScbGS&2(yDCkqo7 z5LX&dOmyMWL^J~0#Dzfd+?-G| z3{vF3NChciN>(+7`qoF0ZE{i5P_;zRKPte>;Ij_0rka!n3`3rds2Nj)2QC4%6tdKa z*^H^D6vK&n2G_>I+}i5u`pX3oJ{;s)4{;KEISl(ptI&X>0*)~3-)6!|xN!`PlsP#b zXQn1SoC=EQ!Z`um3_T?>DdOP9dGs(i3k^vP)Lh7vRZ*VDpnq@PMfBp5fQy^u-%ZPn zAVLg6nlnvO|Ln^Cj`pF(?kkaZSmzm>Dxxo<4=!p`*+@`-`~K0TRI*s1x5&d|OWD>& zBb2dfvsD#_-crY;hz!k(CuY;!aa;ZFft*fn4rREAOQ_Va;ewuEKSdOyde(?3gDM~X zD*H7F@IgQmsCVc^0vz;3&jqalSrYAx_KLO@IG3zrkyd`p*D6}wwgc_^$Z}ynstKW= zSv6f$PS{)yp0O2rZQ672jn&k7@p=UZzT>b14{YeTmpv|mPI$VCkY+FYRRpzo9W7f> z4y_cW?e-V6ceF3#>@qIo&_~ea5rR4k5EoGfE+Syjcfm<}1JMtVfGb2lN&=q13k@}x zMlEJghgsBH-fgxZ@*AKVoOq6_2$Nh5jkt#El)V|cX^_6kFhm|aIkwjg`eGO+%z>MK E0Yc)fDF6Tf literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/ComplexReportGenerator.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/ComplexReportGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..fd99954b35d1ebe9ac46fe4b877fb4949e0c18fe GIT binary patch literal 2050 zcmbVNOK%fb6#lL~X3S*rGKqmYZ44!?ofM|@LBUQ!sUZ+*9EvL{XcxV)FV0YVCK_L( zwCf@vvFWA~szgPlN>wWsAfy&5^|9_Bsg$IDq4eCDu`@}t2yAA2zd4WZeCOQbzyAI8 zcK~mqsw2iQBSmYu$>}NNl3TaL3a7KMJhAM0vLPJdap`(i$yM;mB_BT9g>`5Q$95QE zi!Z~jY1^^oEJHk(zs#VO+`2Fj$8Hk|>|z)!+m5JoT8qN_kS{g`L#pi7c=Iy%Y;_Jn zO)lAOhLhzT^4PwVBE#NVr!C!<@B*eK*Qwjmb{&Sdayt$lhA8H*8W_eN9VrHDr_4fU z6C)U9NH&DL=-Q6-6`CiYOOWB{GZSLyuS#C~>;hj7g&U;!L8<2iuM3aiP_BHP-{4k9 z+D)r$w`DOO08Q>Rtg7^Er$IvPuG$TU%Z^7a`Dm-l^fNP?-7ZTKFENa-KDxL1;O_d} zJK6PHcM92wdUoxno9o}+T)Ta1?e_PEjx58FPuXXwq=jNkAgl0tphhgbBvWY{Wl8M)G zlt%oT>$NyF@I)w6RLGAb+6K(G6N2RKwwPjTyoyYlXLHz(#UW>3cJ{F}!oGD}|?; z{;r8rc#rOhO@LZks&k>YKhpCdUhKnZ%;`8oD`jIux?fG4#W@-iN32liHs=rfr2NmD zcpqh=y2RTR-<0;))g&r3QtS7=qJho+^YxFbkG@oM%V0=X@@9CS8Qo^1>UO-En6uSp z%WS`ujwp6G0NMbwv_X53soh9VolX|LnL;OjLGmH}h{2$z`m9X*=xK((P4v@A!vF>e zQO@VdI!5pQsh=@4RR0bM?SA||0r5x>-4Buu3@MljLM}*SFNN9XTeCijyB{x*QHFpR z#{Br75CauIoqAFG4dYkhQ%`V!;W1vRKE`VgeAf-OMkGP;rcCO1BFID)sXSLSs;$sX7Zqn9k}lIrmkI0AF#Er9{-7iYqEU#?P$4H7 z3fd1C-LE}CiQ!KSSH=!g)=y^?Le2f=>EEdfLEU4Kk~Lr3v>$1h2WHA62x#E3%E!=`$%4;e>@_KvQo0Bj*KGqlv`~Uy| literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/Customer.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/Customer.class new file mode 100644 index 0000000000000000000000000000000000000000..216180fa3f55c827f89fd0dd353a5da606c13b1e GIT binary patch literal 866 zcmb7?U279T7=_PlHlJ>7jZOS$YmFa}q~Ic6D!nNPfl!4?z{^QGq+62RFqw!y$_oWs z!3%$YKT16BY;2{e7qT!r^Uj%bo_%M3{`&p{zzaMrBT$H)na(Dfqj4wMacn+nu1##s zEVFKGQe(BtY<#eoyKHJ~8KJ_)ss5njiB8Ayo8hS$IfXFQQ=?GtUv3>ao228H3dLEL zq|~UMLg`hKCT?G$*k)8~+O=P_+hVCSpD?IQ2XMgy)mGMO; z(R)>*KZsC9h3MSM(Kp+j)$bSSqXtM}X&-Fo*MqVC=~C)?+^{ly=+!?BK#Bkz=ltI};Az01nO{21=xK36pG zG0M**C}6-AwwEz6-?CTie#OowP6CK|$rmGU80CVcp_0pCMHu&~4n*DEI>XK-TFqA_ zc*8q1bJYb>NjgdogpSFxufA~5U9 z{YuH?Te^F8AtfK1oXeCWE4JenWm!6=YdfhmZ+<(R>(B&x9-5ELRLLwCQ>(iVW!@Et zEm&pCT@+|bOl%5hOLjrV(S{BKQN#qgvsPK=YWus=*)VrYQlK|$=grcl=~!wWENbqa zRTY@ao()}Epgn-j2;+&Y2ejr|rBv3cy6Fjj!9%|8I##*J9Ubddv240Ehg-H+g=v$57-;m$f>wQtbC1#~loMd|w0xFgMibUHDN zH*~x%@LDrX18-u4m7u*qe5mJ5u08m1Ru2Kh-V7w;RG#dV6*wSC8goj4_& zD(wdb=0SOCRqJ~ylYNy@bU!q(*sO+S+jgZx9p?iHvVnS9l`nA4mz^wxxuIFi?{?LU ztz~6oVe!cjZRl9w$}1;RV4%6tpH#wTUupq)mR=L+T6fL-cPnNkI6{7G?W(i54Qg`I zh-dMkV}(s$Z_OKyV?I&GP#jrws1ko};0vrV!4?asPFp4`l!F&K6Rf8@v4Kq;U$Rnl zhv8oXTewT1l;vYKe6yf}epkxbG4K`cv4g{M`iIGqT`pLzWtRo6ouOBD6p{M|zQMN? zsaarOH1%o#V1jlV*fo#`E%ZIJn)A?7);mlg(2zg?X1BDfm*0OlkJ5Dh8M51l$gNBsVO3zBxfvN^YSx8HO)fcofbE~qIW>KR zuOrw}zf6IjkN=yh(;o0V4UqUCMhJ3--#H9qjF>(txoBgZi@2p)6^4$#zQAcN2dC zFC;!2A223}Ci(;XDaday-s!ewDSars%+Q?`{gg=t$1+)~Z1?qKm#-zYt{d9=jVZpvzuZlKR=X;W|F!avGIq&X<};>z75W<9=n*L$5)w&@o;%Q!!sN3;t4gOh z?SzDuq3;NMr4Ju8TIFx)+D@xp`PR`vCk378B8v>3pxsBiPx&HOPo!Fo47+~`K}JfC zAi60=K?tYl)Kj*dE@Qo+Y!WLR3M;>GX3;X_u_$E14ppTP<#;9gJrdmEj#sdD3~y>F}hB)Y3(2<=i_`&MYO9 c<@iI%dhS6Fn7;<*Kf+yF-0?ghARiw72m83UumAu6 literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/Client.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..418ba02549adb7c8c6d7392166030b288479c221 GIT binary patch literal 1396 zcmbVMOHUI~6#i~`Oj|0nRPcchP{bCHQAB(cQLJb*^$}}o(8OfgUdoW^Of#Jt>&m4I zjVlc(Cc1EGA{qfDapBUR0_86l&z&h?3!Az*ch0$w^PTT}XMX?r@e{yFj7xAa3|Tyz z(-gAYnljQdf2@$tWs~O&)5>t2n~G(aa*|IPCYPg{%5_UZJ%fK*d8EjiqG#k=$!VUl z7#c@ZUA0CT>O$cJLw(dpb1&-P@u2~Y3@tHL=Qj)4BscFWNsTkK#*CDrB@|N?emPig zO{sZ?;n@FRi%{OIqUsFop$D-|jB(3U^-Lt3kPu)9+8YH+)#NeLREjY*Z+YQ|N5W3Z zTw~%w-ZHY>bfcZYvo`x;Woc>k<*XM$>=u>p5m>fDxfV_|p#%FR>|Z^LhyLdj{ynCDl`!<=IMPOWE`hDi~`A{&EY^b zi#o!UY(zXU=p#W6F}TZuBV}}#i?(|tD2ar(Qs~7n&PX`D-q6aYeK?DA3{p;H z(?}5&L~aOz1f!T45?pW_y%1}ua(n57-+{1+i8P(JdD&ouVZ27&Zc8l5xV>^Vin;aq zxL$=~q{f8NazT+%%HoY11vAC3sA3$OocSIQVni3HarCPIT=Yc)OjaUKrj^m!(7Oot zyuIxuE4GDgBI|Pw(7J;>51P?J5pj8i9uki}S%!aNk>W^9 z>I|@lRiQ)v!Kz4ifc>fp^#oi!8=+-{C`<2+FX-#f;E{suJ)a~qDqAwaTin(z4 EFE$&2ApigX literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/Customer.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/Customer.class new file mode 100644 index 0000000000000000000000000000000000000000..fa30aa3952d7c0105ce94d6f48c63982a631a78d GIT binary patch literal 880 zcmbVKU279T6g{)qe7d!5Y~n{-YqW(V1@}P^LFr3D2!twB0zOXCG2N2vgvq4%qkOQ? zR`9_e;Exi|%*Ixl`XUSSaqpRP&b@bk{`&p{zzggY5eU4rYCIW9uF4+kqgZ{GysOx# zi8gkqQe~voChn_G+NgMcHnn=JOc9~L%85Lc@kpk__+9@*4Xi+z%CQotcCS;1)+Fih zwLpHNlav_I5h%P#(!}lw)SHXYPOC?zeSM@V$YCi$8FvM8%~r1hszz8vRiHRk_Q0#v zZsEwVYY}Rw3zUd`pQ(pUPruwvQgtvJ_m%k|`y=mJ59FvPP2%qJU}%q%slco5|Fwx# zmxfo;te{h71&<>XQDOy5WfiP7TZ?UQ(5DgdCUMs_dIxM`$DBlUk6aU*a> Io_WRX-@km66aWAK literal 0 HcmV?d00001 diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/SimpleReportGenerator.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/SimpleReportGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..5cea7980b1ee7fd89ffb00f84ca2ecb6291d5c75 GIT binary patch literal 1673 zcmb_cU2hXd6g^`*tXUQa0YX9uOn#AIocQiwyKgoK(p3E(zTRH@S19?XKhYputq zQ`3wCxw30eCHG@QlKN} z7oEzY6S(>u2@~p;TNjwgeFUf(fn<~v!<|Uwny4Gft=KuYt};WRpqWNq1+G`7#qPXY z_8ip+X!7HBlgST+HQlHyzbb>w)K0;YI4ID$_Ug&ni^uDaAN8$2d^FKFQ0ja8{DHX# zhjGL}r@+3gs4aA%oBY<@dqhaGvnG1bYv7o`fz7gHJtfOBuy7oo2pD&rN<%K(WVlqe zHSI_(W1=6Q8TfQdX+usdoWKC<%a*7*EcCgElvdh)XkjvJh@JA)ISpD!VTi!XlD-aa zMH87C7!f%0VGXdsw1HCsM>cr~bGX!SDo_EL^}v zGVauB(kls^+9~ckP@)`J$}}!nnAQ-I$`7NluZvMHa=O|>} zW$ACjiNM+aItuK;t%Lt_ZDaVaZo~CI#!X;vUOB}(b51RKStwt&A;HkZFmLAm(6RFtG=cXd$?NB-ojpdA zo%(G&mpVEUzahR9A9;;K0;@!{ioUt{)H7Th>3xlpG5mqyiNr5RFQr#8x`NL;#@m_} z-HBzK$uA}Je_b4kVGd>Jw!T4q~CL2AVQ6M zJj6t)#!Ym%j2YtZ#5`tkh3LC*72hCBVg@nF{kQa-qh^?~)}N#PJS8S#f1$@fznG+C Jfsz=m{R>w>#T) controllers ; + public ElevatorManager(int controllerCount) { + controllers = new ArrayList(controllerCount) ; + } + public void addController(ElevatorController controller) { + controllers.add(controller) ; + } + public void requestElevator(int destination, Direction direction) { + int selectedElevator = selectElevator(destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } + private int selectElevator(int destination, Direction direction) { + return 0 ; // ͸ ; ù° ͸ ϰ + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorRequestCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorRequestCommand.java new file mode 100644 index 000000000..5b418fdd9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorRequestCommand.java @@ -0,0 +1,15 @@ +package command.example.elevatorbutton; + +public class ElevatorRequestCommand implements Command { + private Direction direction ; + private int destination ; + private ElevatorManager manager ; + public ElevatorRequestCommand(int destination, Direction direction, ElevatorManager manager) { + this.destination = destination ; + this.direction = direction ; + this.manager = manager ; + } + public void execute() { + manager.requestElevator(destination, direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelController.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelController.java new file mode 100644 index 000000000..f445c0cc1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelController.java @@ -0,0 +1,20 @@ +package command.example.remotecontroller2; + +public class ChannelController { + private int channel = 24 ; + private TV tv ; + + public ChannelController(TV tv) { + this.tv = tv ; + } + public void channelUp() { + channel ++ ; + tv.setChannel(channel) ; + } + + public void channelDown() { + channel -- ; + tv.setChannel(channel) ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelDownCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelDownCommand.java new file mode 100644 index 000000000..abca13e21 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelDownCommand.java @@ -0,0 +1,11 @@ +package command.example.remotecontroller2; + +public class ChannelDownCommand implements Command { + private ChannelController channelController ; + public ChannelDownCommand(ChannelController channelController) { + this.channelController = channelController ; + } + public void execute() { + channelController.channelDown() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelUpCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelUpCommand.java new file mode 100644 index 000000000..42ee1c559 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/ChannelUpCommand.java @@ -0,0 +1,11 @@ +package command.example.remotecontroller2; + +public class ChannelUpCommand implements Command { + private ChannelController channelController ; + public ChannelUpCommand(ChannelController channelController) { + this.channelController = channelController ; + } + public void execute() { + channelController.channelUp() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/Client.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/Client.java new file mode 100644 index 000000000..bbdde12b5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/Client.java @@ -0,0 +1,23 @@ +package command.example.remotecontroller2; + +public class Client { + public static void main(String[] args) { + TV tv = new TV() ; + Command powerCommand = new PowerCommand(tv) ; + + ChannelController channelController = new ChannelController(tv) ; + Command channelUpCommand = new ChannelUpCommand(channelController) ; + Command channelDownCommand = new ChannelDownCommand(channelController) ; + + RemoteController rc = new RemoteController() ; + rc.setPowerCommand(powerCommand) ; + rc.setChannelCommand(channelUpCommand, channelDownCommand) ; + + rc.powerOnOff() ; + rc.powerOnOff() ; + rc.powerOnOff() ; + + rc.channelUp() ; + rc.channelDown() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/Command.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/Command.java new file mode 100644 index 000000000..3d2715b79 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/Command.java @@ -0,0 +1,5 @@ +package command.example.remotecontroller2; + +public interface Command { + abstract public void execute() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/MuteCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/MuteCommand.java new file mode 100644 index 000000000..5ac354936 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/MuteCommand.java @@ -0,0 +1,11 @@ +package command.example.remotecontroller2; + +public class MuteCommand implements Command { + private TV tv ; + public MuteCommand(TV tv) { + this.tv = tv ; + } + public void execute() { + tv.mute() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/PowerCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/PowerCommand.java new file mode 100644 index 000000000..adda61a6e --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/PowerCommand.java @@ -0,0 +1,11 @@ +package command.example.remotecontroller2; + +public class PowerCommand implements Command { + private TV tv ; + public PowerCommand(TV tv) { + this.tv = tv ; + } + public void execute() { + tv.power() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/RemoteController.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/RemoteController.java new file mode 100644 index 000000000..53953b754 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/RemoteController.java @@ -0,0 +1,26 @@ +package command.example.remotecontroller2; + +public class RemoteController { + private Command powerCommand ; + private Command channelUpCommand ; + private Command channelDownCommand ; + + public void setPowerCommand(Command powerCommand) { + this.powerCommand = powerCommand ; + } + public void setChannelCommand(Command channelUpCommand, Command channelDownCommand) { + this.channelUpCommand = channelUpCommand ; + this.channelDownCommand = channelDownCommand ; + } + public void powerOnOff() { + powerCommand.execute() ; + } + public void channelUp() { + channelUpCommand.execute() ; + + } + public void channelDown() { + channelDownCommand.execute() ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/TV.java b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/TV.java new file mode 100644 index 000000000..f39cfe65d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/remotecontroller2/TV.java @@ -0,0 +1,30 @@ +package command.example.remotecontroller2; + +public class TV { + private boolean powerOn = false ; + private boolean mute = false ; + + private int channel ; + public void power() { + powerOn = ! powerOn ; + if ( powerOn ) + System.out.println("Power On") ; + else + System.out.println("Power Off") ; + } + + public void setChannel(int channel) { + this.channel = channel ; + System.out.println("Channel: " + this.channel) ; + } + + public void mute() { + mute = ! mute ; + if ( mute ) + System.out.println("Mute On") ; + else + System.out.println("Mute Off") ; + + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Client2.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Client2.java new file mode 100644 index 000000000..e73bd9513 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Client2.java @@ -0,0 +1,19 @@ +package command.example.twobuttoncontroller; + +public class Client2 { + public static void main(String[] args) { + TV tv = new TV() ; + + TwoButtonController rc = new TwoButtonController() ; + + Command powerCommand = new PowerCommand(tv) ; + rc.setCommand(powerCommand, powerCommand) ; + + rc.button1Pressed() ; // Power On + rc.button2Pressed() ; // Power Off + rc.button1Pressed() ; // Power On + rc.button1Pressed() ; // Power Off + rc.button2Pressed() ; // Power On + rc.button1Pressed() ; // Power Off + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Client3.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Client3.java new file mode 100644 index 000000000..d716dca15 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Client3.java @@ -0,0 +1,20 @@ +package command.example.twobuttoncontroller; + +public class Client3 { + public static void main(String[] args) { + TV tv = new TV() ; + + TwoButtonController rc = new TwoButtonController() ; + + Command powerCommand = new PowerCommand(tv) ; + Command muteCommand = new MuteCommand(tv) ; + rc.setCommand(muteCommand, powerCommand) ; + + rc.button1Pressed() ; // No action + rc.button2Pressed() ; // Power On + rc.button1Pressed() ; // Mute On + rc.button1Pressed() ; // Mute Off + rc.button2Pressed() ; // Power Off + rc.button1Pressed() ; // No action + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Command.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Command.java new file mode 100644 index 000000000..626ca8717 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/Command.java @@ -0,0 +1,5 @@ +package command.example.twobuttoncontroller; + +public interface Command { + abstract public void execute() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/MuteCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/MuteCommand.java new file mode 100644 index 000000000..a474cb72d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/MuteCommand.java @@ -0,0 +1,11 @@ +package command.example.twobuttoncontroller; + +public class MuteCommand implements Command { + private TV tv ; + public MuteCommand(TV tv) { + this.tv = tv ; + } + public void execute() { + tv.mute() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/PowerCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/PowerCommand.java new file mode 100644 index 000000000..0cdd345be --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/PowerCommand.java @@ -0,0 +1,11 @@ +package command.example.twobuttoncontroller; + +public class PowerCommand implements Command { + private TV tv ; + public PowerCommand(TV tv) { + this.tv = tv ; + } + public void execute() { + tv.power() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/TV.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/TV.java new file mode 100644 index 000000000..cdcad99eb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/TV.java @@ -0,0 +1,32 @@ +package command.example.twobuttoncontroller; + +public class TV { + private boolean powerOn = false ; + private boolean muteOn = false ; + private int channel ; + + public void power() { + powerOn = ! powerOn ; + if ( powerOn ) + System.out.println("Power On") ; + else + System.out.println("Power Off") ; + } + + public void setChannel(int channel) { + if ( ! powerOn ) return ; + this.channel = channel ; + System.out.println("Channel: " + this.channel) ; + } + + public void mute() { + if ( ! powerOn ) return ; + muteOn = ! muteOn ; + if ( muteOn ) + System.out.println("Mute On") ; + else + System.out.println("Mute Off") ; + + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/TwoButtonController.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/TwoButtonController.java new file mode 100644 index 000000000..66b78d396 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/TwoButtonController.java @@ -0,0 +1,18 @@ +package command.example.twobuttoncontroller; + +public class TwoButtonController { + private Command command1 ; + private Command command2 ; + + public void setCommand(Command command1, Command command2) { + this.command1 = command1 ; + this.command2 = command2 ; + } + public void button1Pressed() { + command1.execute() ; + } + public void button2Pressed() { + command2.execute() ; + + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/Client.java new file mode 100644 index 000000000..dae589974 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/Client.java @@ -0,0 +1,14 @@ +package command.example.twobuttoncontroller.before; + +public class Client { + public static void main(String[] args) { + TV tv = new TV() ; + TwoButtonController rc = new TwoButtonController(tv) ; + + rc.button1Pressed() ; + rc.button2Pressed() ; + + rc.button1Pressed() ; + rc.button2Pressed() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/TV.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/TV.java new file mode 100644 index 000000000..7edaa35aa --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/TV.java @@ -0,0 +1,21 @@ +package command.example.twobuttoncontroller.before; + +public class TV { + private boolean powerOn = false ; + private boolean muteOn = false ; + public void power() { + powerOn = ! powerOn ; + if ( powerOn ) + System.out.println("Power On") ; + else + System.out.println("Power Off") ; + } + public void mute() { + if ( ! powerOn ) return ; + muteOn = ! muteOn ; + if ( muteOn ) + System.out.println("Mute On") ; + else + System.out.println("Mute Off") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/TwoButtonController.java b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/TwoButtonController.java new file mode 100644 index 000000000..99fc0a2ec --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/command/example/twobuttoncontroller/before/TwoButtonController.java @@ -0,0 +1,14 @@ +package command.example.twobuttoncontroller.before; + +public class TwoButtonController { + private TV tv ; + public TwoButtonController(TV tv) { + this.tv = tv ; + } + public void button1Pressed() { + tv.power(); + } + public void button2Pressed() { + tv.mute() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after1/Body.java b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Body.java new file mode 100644 index 000000000..fca1668fa --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Body.java @@ -0,0 +1,17 @@ +package composite.after1; + +public class Body extends ComputerDevice { + private int price ; + private int power; + + public Body(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Client.java new file mode 100644 index 000000000..cd2371bc1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Client.java @@ -0,0 +1,20 @@ +package composite.after1; + +public class Client { + public static void main(String[] args) { + Computer computer = new Computer() ; + Body body = new Body(100, 70) ; + Keyboard keyboard = new Keyboard(5, 2) ; + Monitor monitor = new Monitor(20, 30) ; + + computer.addComponent(body) ; + computer.addComponent(keyboard) ; + computer.addComponent(monitor) ; + + int computerPrice = computer.getPrice() ; + int computerPower = computer.getPower() ; + + System.out.println("Computer Power: " + computerPower + " W") ; + System.out.println("Computer Price: " + computerPrice + " ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after1/Computer.java b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Computer.java new file mode 100644 index 000000000..4c77c4a3f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Computer.java @@ -0,0 +1,27 @@ +package composite.after1; + +import java.util.ArrayList; +import java.util.List; + +public class Computer extends ComputerDevice { + private List components = new ArrayList() ; + + public void addComponent(ComputerDevice component) { + components.add(component) ; + } + public void removeComponent(ComputerDevice component) { + components.remove(component) ; + } + public int getPrice() { + int price = 0 ; + for ( ComputerDevice component: components ) + price += component.getPrice() ; + return price ; + } + public int getPower() { + int power = 0 ; + for ( ComputerDevice component: components ) + power += component.getPower() ; + return power ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after1/ComputerDevice.java b/java-oop-design-pattern/ch8_ch14/src/composite/after1/ComputerDevice.java new file mode 100644 index 000000000..4fc863225 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after1/ComputerDevice.java @@ -0,0 +1,7 @@ +package composite.after1; + +public abstract class ComputerDevice { + public abstract int getPrice() ; + public abstract int getPower() ; + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after1/Keyboard.java b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Keyboard.java new file mode 100644 index 000000000..5e01115f7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Keyboard.java @@ -0,0 +1,17 @@ +package composite.after1; + +public class Keyboard extends ComputerDevice { + private int price ; + private int power; + + public Keyboard(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after1/Monitor.java b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Monitor.java new file mode 100644 index 000000000..9c04ce558 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after1/Monitor.java @@ -0,0 +1,17 @@ +package composite.after1; + +public class Monitor extends ComputerDevice { + private int price ; + private int power; + + public Monitor(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after2/Body.java b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Body.java new file mode 100644 index 000000000..c3a31d963 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Body.java @@ -0,0 +1,17 @@ +package composite.after2; + +public class Body extends ComputerDevice { + private int price ; + private int power; + + public Body(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Client.java new file mode 100644 index 000000000..a58f325de --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Client.java @@ -0,0 +1,22 @@ +package composite.after2; + +public class Client { + public static void main(String[] args) { + Computer computer = new Computer() ; + Body body = new Body(100, 70) ; + Keyboard keyboard = new Keyboard(5, 2) ; + Monitor monitor = new Monitor(20, 30) ; + Speaker speaker = new Speaker(10, 10) ; + + computer.addComponent(body) ; + computer.addComponent(keyboard) ; + computer.addComponent(monitor) ; + computer.addComponent(speaker) ; + + int computerPrice = computer.getPrice() ; + int computerPower = computer.getPower() ; + + System.out.println("Computer Power: " + computerPower + " W") ; + System.out.println("Computer Price: " + computerPrice + " ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after2/Computer.java b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Computer.java new file mode 100644 index 000000000..33b451b32 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Computer.java @@ -0,0 +1,27 @@ +package composite.after2; + +import java.util.ArrayList; +import java.util.List; + +public class Computer extends ComputerDevice { + private List components = new ArrayList() ; + + public void addComponent(ComputerDevice component) { + components.add(component) ; + } + public void removeComponent(ComputerDevice component) { + components.remove(component) ; + } + public int getPrice() { + int price = 0 ; + for ( ComputerDevice component: components ) + price += component.getPrice() ; + return price ; + } + public int getPower() { + int power = 0 ; + for ( ComputerDevice component: components ) + power += component.getPower() ; + return power ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after2/ComputerDevice.java b/java-oop-design-pattern/ch8_ch14/src/composite/after2/ComputerDevice.java new file mode 100644 index 000000000..3292b92be --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after2/ComputerDevice.java @@ -0,0 +1,7 @@ +package composite.after2; + +public abstract class ComputerDevice { + public abstract int getPrice() ; + public abstract int getPower() ; + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after2/Keyboard.java b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Keyboard.java new file mode 100644 index 000000000..f842c569a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Keyboard.java @@ -0,0 +1,17 @@ +package composite.after2; + +public class Keyboard extends ComputerDevice { + private int price ; + private int power; + + public Keyboard(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after2/Monitor.java b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Monitor.java new file mode 100644 index 000000000..1ea97db47 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Monitor.java @@ -0,0 +1,17 @@ +package composite.after2; + +public class Monitor extends ComputerDevice { + private int price ; + private int power; + + public Monitor(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after2/Speaker.java b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Speaker.java new file mode 100644 index 000000000..0e6e3b421 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after2/Speaker.java @@ -0,0 +1,17 @@ +package composite.after2; + +public class Speaker extends ComputerDevice { + private int price ; + private int power; + + public Speaker(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/Body.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Body.java new file mode 100644 index 000000000..6386f6724 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Body.java @@ -0,0 +1,4 @@ +package composite.after3; + +public class Body extends CompositeDevice { +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/CPU.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/CPU.java new file mode 100644 index 000000000..cdbf44b90 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/CPU.java @@ -0,0 +1,17 @@ +package composite.after3; + +public class CPU extends ComputerDevice { + private int price ; + private int power; + + public CPU(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/Client.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Client.java new file mode 100644 index 000000000..993d0612e --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Client.java @@ -0,0 +1,30 @@ +package composite.after3; + +public class Client { + public static void main(String[] args) { + Body body = new Body() ; + CPU cpu = new CPU(40, 30) ; + MainMemory mainMemory = new MainMemory(30, 20) ; + HardDisk hardDisk = new HardDisk(30, 20) ; + + body.addComponent(cpu) ; + body.addComponent(mainMemory) ; + body.addComponent(hardDisk) ; + + Computer computer = new Computer() ; + Keyboard keyboard = new Keyboard(5, 2) ; + Monitor monitor = new Monitor(20, 30) ; + Speaker speaker = new Speaker(10, 10) ; + + computer.addComponent(body) ; + computer.addComponent(keyboard) ; + computer.addComponent(monitor) ; + computer.addComponent(speaker) ; + + int computerPrice = computer.getPrice() ; + int computerPower = computer.getPower() ; + + System.out.println("Computer Power: " + computerPower + " W") ; + System.out.println("Computer Price: " + computerPrice + " ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/CompositeDevice.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/CompositeDevice.java new file mode 100644 index 000000000..2bb83017d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/CompositeDevice.java @@ -0,0 +1,27 @@ +package composite.after3; + +import java.util.ArrayList; +import java.util.List; + +public class CompositeDevice extends ComputerDevice { + private List components = new ArrayList() ; + + public void addComponent(ComputerDevice component) { + components.add(component) ; + } + public void removeComponent(ComputerDevice component) { + components.remove(component) ; + } + public int getPrice() { + int price = 0 ; + for ( ComputerDevice component: components ) + price += component.getPrice() ; + return price ; + } + public int getPower() { + int power = 0 ; + for ( ComputerDevice component: components ) + power += component.getPower() ; + return power ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/Computer.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Computer.java new file mode 100644 index 000000000..15a406359 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Computer.java @@ -0,0 +1,4 @@ +package composite.after3; + +public class Computer extends CompositeDevice { +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/ComputerDevice.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/ComputerDevice.java new file mode 100644 index 000000000..812ec085d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/ComputerDevice.java @@ -0,0 +1,7 @@ +package composite.after3; + +public abstract class ComputerDevice { + public abstract int getPrice() ; + public abstract int getPower() ; + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/HardDisk.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/HardDisk.java new file mode 100644 index 000000000..febe347ff --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/HardDisk.java @@ -0,0 +1,17 @@ +package composite.after3; + +public class HardDisk extends ComputerDevice { + private int price ; + private int power; + + public HardDisk(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/Keyboard.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Keyboard.java new file mode 100644 index 000000000..e46b92908 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Keyboard.java @@ -0,0 +1,17 @@ +package composite.after3; + +public class Keyboard extends ComputerDevice { + private int price ; + private int power; + + public Keyboard(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/MainMemory.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/MainMemory.java new file mode 100644 index 000000000..5a8da89bd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/MainMemory.java @@ -0,0 +1,17 @@ +package composite.after3; + +public class MainMemory extends ComputerDevice { + private int price ; + private int power; + + public MainMemory(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/Monitor.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Monitor.java new file mode 100644 index 000000000..4c68fdf2a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Monitor.java @@ -0,0 +1,17 @@ +package composite.after3; + +public class Monitor extends ComputerDevice { + private int price ; + private int power; + + public Monitor(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/after3/Speaker.java b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Speaker.java new file mode 100644 index 000000000..e1a37acf3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/after3/Speaker.java @@ -0,0 +1,17 @@ +package composite.after3; + +public class Speaker extends ComputerDevice { + private int price ; + private int power; + + public Speaker(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before1/Body.java b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Body.java new file mode 100644 index 000000000..31a2c7032 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Body.java @@ -0,0 +1,13 @@ +package composite.before1; + +public class Body { + private int price ; + private int power; + + public Body(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { return price ; } + public int getPower() { return power; } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Client.java new file mode 100644 index 000000000..709fc0456 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Client.java @@ -0,0 +1,23 @@ +package composite.before1; + +public class Client { + public static void main(String[] args) { + // ǻ ǰμ Body, Keyboard, Monitor ü + Body body = new Body(100, 70) ; + Keyboard keyboard = new Keyboard(5, 2) ; + Monitor monitor = new Monitor(20, 30) ; + + // Computer ü ϰ ǰ ü + Computer computer = new Computer() ; + computer.addBody(body) ; + computer.addKeyboard(keyboard) ; + computer.addMonitor(monitor) ; + + // ǻ ݰ ¼Һ + int computerPrice = computer.getPrice() ; + int computerPower = computer.getPower() ; + + System.out.println("Computer Power: " + computerPower + " W") ; + System.out.println("Computer Price: " + computerPrice + " ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before1/Computer.java b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Computer.java new file mode 100644 index 000000000..ebab4248f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Computer.java @@ -0,0 +1,25 @@ +package composite.before1; + +public class Computer { + private Body body ; + private Keyboard keyboard ; + private Monitor monitor ; + + public void addBody(Body body) { this.body = body ; } + public void addKeyboard(Keyboard keyboard) { this.keyboard = keyboard ; } + public void addMonitor(Monitor monitor) { this.monitor = monitor ; } + public int getPrice() { + int bodyPrice = body.getPrice() ; + int keyboardPrice = keyboard.getPrice() ; + int monitorPrice = monitor.getPrice() ; + + return bodyPrice + keyboardPrice + monitorPrice ; + } + public int getPower() { + int bodyPower = body.getPower() ; + int keyboardPower = keyboard.getPower() ; + int monitorPower = monitor.getPower() ; + + return bodyPower + keyboardPower + monitorPower ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before1/Keyboard.java b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Keyboard.java new file mode 100644 index 000000000..5bc416701 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Keyboard.java @@ -0,0 +1,17 @@ +package composite.before1; + +public class Keyboard { + private int price ; + private int power; + + public Keyboard(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before1/Monitor.java b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Monitor.java new file mode 100644 index 000000000..650f69b0e --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before1/Monitor.java @@ -0,0 +1,13 @@ +package composite.before1; + +public class Monitor { + private int price ; + private int power; + + public Monitor(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { return price ; } + public int getPower() { return power; } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before2/Body.java b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Body.java new file mode 100644 index 000000000..d7c028440 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Body.java @@ -0,0 +1,17 @@ +package composite.before2; + +public class Body { + private int price ; + private int power; + + public Body(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Client.java new file mode 100644 index 000000000..e02d7bad9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Client.java @@ -0,0 +1,22 @@ +package composite.before2; + +public class Client { + public static void main(String[] args) { + Computer computer = new Computer() ; + Body body = new Body(100, 70) ; + Keyboard keyboard = new Keyboard(5, 2) ; + Monitor monitor = new Monitor(20, 30) ; + Speaker speaker = new Speaker(10, 10) ; + + computer.addBody(body) ; + computer.addKeyboard(keyboard) ; + computer.addMonitor(monitor) ; + computer.addSpeaker(speaker) ; + + int computerPrice = computer.getPrice() ; + int computerPower = computer.getPower() ; + + System.out.println("Computer Power: " + computerPower + " W") ; + System.out.println("Computer Price: " + computerPrice + " ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before2/Computer.java b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Computer.java new file mode 100644 index 000000000..bc3d471f5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Computer.java @@ -0,0 +1,29 @@ +package composite.before2; + +public class Computer { + private Body body ; + private Keyboard keyboard ; + private Monitor monitor ; + private Speaker speaker ; + + public void addBody(Body body) { this.body = body ; } + public void addKeyboard(Keyboard keyboard) { + this.keyboard = keyboard ; + } + public void addMonitor(Monitor monitor) { this.monitor = monitor ; } + public void addSpeaker(Speaker speaker) { this.speaker = speaker ; } + public int getPrice() { + int bodyPrice = body.getPrice() ; + int keyboardPrice = keyboard.getPrice() ; + int monitorPrice = monitor.getPrice() ; + int speakerPrice = speaker.getPrice() ; + return bodyPrice + keyboardPrice + monitorPrice + speakerPrice ; + } + public int getPower() { + int bodyPower = body.getPower() ; + int keyboardPower = keyboard.getPower() ; + int monitorPower = monitor.getPower() ; + int speakerPower = speaker.getPower() ; + return bodyPower + keyboardPower + monitorPower + speakerPower ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before2/Keyboard.java b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Keyboard.java new file mode 100644 index 000000000..ebfaadc54 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Keyboard.java @@ -0,0 +1,17 @@ +package composite.before2; + +public class Keyboard { + private int price ; + private int power; + + public Keyboard(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before2/Monitor.java b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Monitor.java new file mode 100644 index 000000000..4485bd59c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Monitor.java @@ -0,0 +1,17 @@ +package composite.before2; + +public class Monitor { + private int price ; + private int power; + + public Monitor(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before2/Speaker.java b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Speaker.java new file mode 100644 index 000000000..eb6224a8d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before2/Speaker.java @@ -0,0 +1,13 @@ +package composite.before2; + +public class Speaker { + private int price ; + private int power; + + public Speaker(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { return price ; } + public int getPower() { return power; } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/Body.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Body.java new file mode 100644 index 000000000..68a781401 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Body.java @@ -0,0 +1,20 @@ +package composite.before3; + +public class Body { + + // body CPU, HardDisk, MainMemory ߰ϴ ʿ + + private int price ; + private int power; + + public Body(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/CPU.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/CPU.java new file mode 100644 index 000000000..51c46b4a9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/CPU.java @@ -0,0 +1,5 @@ +package composite.before3; + +public class CPU { + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/Client.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Client.java new file mode 100644 index 000000000..513d9ee1e --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Client.java @@ -0,0 +1,24 @@ +package composite.before3; + +public class Client { + public static void main(String[] args) { + Computer computer = new Computer() ; + Body body = new Body(100, 70) ; + Keyboard keyboard = new Keyboard(5, 2) ; + Monitor monitor = new Monitor(20, 30) ; + Speaker speaker = new Speaker(10, 10) ; + + // body CPU, HardDisk, MainMemory ߰ϴ ʿ + + computer.addBody(body) ; + computer.addKeyboard(keyboard) ; + computer.addMonitor(monitor) ; + computer.addSpeaker(speaker) ; + + int computerPrice = computer.getPrice() ; + int computerPower = computer.getPower() ; + + System.out.println("Computer Power: " + computerPower + " W") ; + System.out.println("Computer Price: " + computerPrice + " ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/Computer.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Computer.java new file mode 100644 index 000000000..66c1573f1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Computer.java @@ -0,0 +1,39 @@ +package composite.before3; + +public class Computer { + private Body body ; + private Keyboard keyboard ; + private Monitor monitor ; + private Speaker speaker ; + + public void addBody(Body body) { + this.body = body ; + } + public void addKeyboard(Keyboard keyboard) { + this.keyboard = keyboard ; + } + public void addMonitor(Monitor monitor) { + this.monitor = monitor ; + } + public void addSpeaker(Speaker speaker) { + this.speaker = speaker ; + } + + public int getPrice() { + int bodyPrice = body.getPrice() ; + int keyboardPrice = keyboard.getPrice() ; + int monitorPrice = monitor.getPrice() ; + int speakerPrice = speaker.getPrice() ; + + return bodyPrice + keyboardPrice + monitorPrice + speakerPrice ; + } + public int getPower() { + int bodyPower = body.getPower() ; + int keyboardPower = keyboard.getPower() ; + int monitorPower = monitor.getPower() ; + int speakerPower = speaker.getPower() ; + + return bodyPower + keyboardPower + monitorPower + speakerPower ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/HardDisk.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/HardDisk.java new file mode 100644 index 000000000..e8638a258 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/HardDisk.java @@ -0,0 +1,5 @@ +package composite.before3; + +public class HardDisk { + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/Keyboard.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Keyboard.java new file mode 100644 index 000000000..55077bc16 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Keyboard.java @@ -0,0 +1,17 @@ +package composite.before3; + +public class Keyboard { + private int price ; + private int power; + + public Keyboard(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/MainMemory.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/MainMemory.java new file mode 100644 index 000000000..4946c92f0 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/MainMemory.java @@ -0,0 +1,5 @@ +package composite.before3; + +public class MainMemory { + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/Monitor.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Monitor.java new file mode 100644 index 000000000..f7beb6514 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Monitor.java @@ -0,0 +1,17 @@ +package composite.before3; + +public class Monitor { + private int price ; + private int power; + + public Monitor(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/before3/Speaker.java b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Speaker.java new file mode 100644 index 000000000..49451c5cb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/before3/Speaker.java @@ -0,0 +1,17 @@ +package composite.before3; + +public class Speaker { + private int price ; + private int power; + + public Speaker(int power, int price) { + this.power = power ; + this.price = price ; + } + public int getPrice() { + return price ; + } + public int getPower() { + return power; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/AbstractFile.java b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/AbstractFile.java new file mode 100644 index 000000000..aa4557367 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/AbstractFile.java @@ -0,0 +1,14 @@ +package composite.example.directory.after; + +public abstract class AbstractFile { + private String name ; + private int depth = 0 ; + + public AbstractFile(String name) { this.name = name ; } + public String getName() { return name; } + public void setDepth(int depth) { this.depth = depth ; } + public int getDepth() { return depth ; } + + public abstract int getSize() ; + public abstract void print() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/Client.java b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/Client.java new file mode 100644 index 000000000..03417631d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/Client.java @@ -0,0 +1,21 @@ +package composite.example.directory.after; + +public class Client { + public static void main(String[] args) { + Directory dir1 = new Directory("root") ; + Directory dir2 = new Directory("Dir1") ; + + File f1 = new File("f1", 100) ; + File f2 = new File("f2", 200) ; + File f3 = new File("f3", 300) ; + File f4 = new File("f4", 400) ; + + dir1.addEntry(f1) ; + dir1.addEntry(dir2) ; + dir2.addEntry(f2) ; + dir2.addEntry(f3) ; + dir1.addEntry(f4) ; + + dir1.print() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/Directory.java b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/Directory.java new file mode 100644 index 000000000..2623b5ad7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/Directory.java @@ -0,0 +1,28 @@ +package composite.example.directory.after; + +import java.util.ArrayList; +import java.util.List; + +public class Directory extends AbstractFile { + private List files = new ArrayList(); + + public Directory( String name ) { super(name) ; } + public void addEntry(AbstractFile entry) { + entry.setDepth(getDepth()+1) ; + files.add(entry) ; + } + public void removeEntry(AbstractFile entry) { + files.remove(entry) ; + } + public int getSize() { + int totalSize = 0 ; + for (AbstractFile entry: files) totalSize += entry.getSize(); + return totalSize; + } + public void print() { + for ( int i = 0 ; i < getDepth() ; i ++ ) + System.out.print("\t") ; + System.out.println("[Directory] " + getName() + ", Size: " + getSize()) ; + for ( AbstractFile entry: files ) entry.print() ; + } +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/File.java b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/File.java new file mode 100644 index 000000000..fcfd93342 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/after/File.java @@ -0,0 +1,16 @@ +package composite.example.directory.after; + +public class File extends AbstractFile { + private int size ; + + public File( String name, int size ) { + super(name) ; + this.size = size ; + } + public int getSize() { return size ; } + public void print() { + for ( int i = 0 ; i < getDepth() ; i ++ ) + System.out.print("\t") ; + System.out.println("[File] " + getName() + ", Size: " + size) ; + } +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/Client.java new file mode 100644 index 000000000..3d49b5dc4 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/Client.java @@ -0,0 +1,21 @@ +package composite.example.directory.before; + +public class Client { + public static void main(String[] args) { + Directory dir1 = new Directory("root") ; + Directory dir2 = new Directory("Dir1") ; + + File f1 = new File("f1", 100) ; + File f2 = new File("f2", 200) ; + File f3 = new File("f3", 300) ; + File f4 = new File("f4", 400) ; + + dir1.addEntry(f1) ; + dir1.addEntry(dir2) ; + dir2.addEntry(f2) ; + dir2.addEntry(f3) ; + dir1.addEntry(f4) ; + + dir1.print() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/Directory.java b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/Directory.java new file mode 100644 index 000000000..94cb99bbb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/Directory.java @@ -0,0 +1,44 @@ +package composite.example.directory.before; + +import java.util.ArrayList; +import java.util.List; + +public class Directory { + private String name ; + private int depth = 0 ; + + private List entries = new ArrayList() ; + + public Directory(String name) { this.name = name ; } + public void addEntry(Object entry) { + entries.add(entry) ; + + if ( entry instanceof File ) ((File) entry).setDepth(depth+1) ; + if ( entry instanceof Directory ) ((Directory) entry).setDepth(depth+1) ; + } + private void setDepth(int depth) { + this.depth = depth ; + } + public void removeEntry(Object entry) { + entries.remove(entry) ; + } + public String getName() { return name ; } + public int getSize() { + int size = 0 ; + for ( Object entry: entries ) { + if ( entry instanceof File ) size += ((File) entry).getSize() ; + if ( entry instanceof Directory ) size += ((Directory) entry).getSize() ; + } + return size ; + } + public void print() { + for ( int i = 0 ; i < depth ; i ++ ) + System.out.print("\t") ; + System.out.println("[Directory] " + name + ", Size: " + getSize()) ; + + for ( Object entry: entries ) { + if ( entry instanceof File ) ((File) entry).print() ; + if ( entry instanceof Directory )((Directory) entry).print() ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/File.java b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/File.java new file mode 100644 index 000000000..0e6cd1015 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/File.java @@ -0,0 +1,22 @@ +package composite.example.directory.before; + +public class File { + private String name ; + private int size ; + private int depth = 0 ; + + public File(String name, int size) { + this.name = name ; + this.size = size ; + } + public void setDepth(int depth) { + this.depth = depth ; + } + public String getName() { return name ; } + public int getSize() { return size ; } + public void print() { + for ( int i = 0 ; i < depth ; i ++ ) + System.out.print("\t") ; + System.out.println("[File] " + name + ", Size: " + size) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Client.java new file mode 100644 index 000000000..20baea772 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Client.java @@ -0,0 +1,11 @@ +package decorator.after1; + +public class Client { + public static void main(String[] args) { + Display road = new RoadDisplay() ; + road.draw() ; + + Display roadWithLane = new LaneDecorator(new RoadDisplay()) ; + roadWithLane.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Display.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Display.java new file mode 100644 index 000000000..2029502a0 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Display.java @@ -0,0 +1,5 @@ +package decorator.after1; + +public abstract class Display { + public abstract void draw() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/DisplayDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/DisplayDecorator.java new file mode 100644 index 000000000..93cef3596 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/DisplayDecorator.java @@ -0,0 +1,11 @@ +package decorator.after1; + +public class DisplayDecorator extends Display { + private Display decoratedDisplay ; + public DisplayDecorator(Display decoratedDisplay) { + this.decoratedDisplay = decoratedDisplay ; + } + public void draw() { + decoratedDisplay.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/LaneDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/LaneDecorator.java new file mode 100644 index 000000000..8b63b0230 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/LaneDecorator.java @@ -0,0 +1,14 @@ +package decorator.after1; + +public class LaneDecorator extends DisplayDecorator { + public LaneDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + public void draw() { + super.draw(); + drawLane() ; + } + private void drawLane() { + System.out.println("\t ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/RoadDisplay.java new file mode 100644 index 000000000..825169c77 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/RoadDisplay.java @@ -0,0 +1,7 @@ +package decorator.after1; + +public class RoadDisplay extends Display { + public void draw() { + System.out.println("⺻ ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Client.java new file mode 100644 index 000000000..f3eb886a5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Client.java @@ -0,0 +1,17 @@ +package decorator.after2; + +public class Client { + public static void main(String[] args) { + Display road = new RoadDisplay() ; + road.draw() ; + + Display roadWithLane = new LaneDecorator(new RoadDisplay()) ; + roadWithLane.draw() ; + + Display roadWithTraffic = new TrafficDecorator(new RoadDisplay()) ; + roadWithTraffic.draw() ; + + Display roadWithLaneAndTraffic = new TrafficDecorator(new LaneDecorator(new RoadDisplay())) ; + roadWithLaneAndTraffic.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Display.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Display.java new file mode 100644 index 000000000..255f05b26 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Display.java @@ -0,0 +1,5 @@ +package decorator.after2; + +public abstract class Display { + public abstract void draw() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/DisplayDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/DisplayDecorator.java new file mode 100644 index 000000000..00b3ac8c6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/DisplayDecorator.java @@ -0,0 +1,12 @@ +package decorator.after2; + +public class DisplayDecorator extends Display { + private Display decoratedDisplay ; + + public DisplayDecorator(Display decoratedDisplay) { + this.decoratedDisplay = decoratedDisplay ; + } + public void draw() { + decoratedDisplay.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/LaneDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/LaneDecorator.java new file mode 100644 index 000000000..d1ef652b2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/LaneDecorator.java @@ -0,0 +1,17 @@ +package decorator.after2; + +public class LaneDecorator extends DisplayDecorator { + + public LaneDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + + public void draw() { + super.draw(); + drawLane() ; + } + private void drawLane() { + System.out.println("\t ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/RoadDisplay.java new file mode 100644 index 000000000..0b1d4fb40 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/RoadDisplay.java @@ -0,0 +1,9 @@ +package decorator.after2; + +public class RoadDisplay extends Display { + + public void draw() { + System.out.println("⺻ ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/TrafficDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/TrafficDecorator.java new file mode 100644 index 000000000..2c2824c7f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/TrafficDecorator.java @@ -0,0 +1,14 @@ +package decorator.after2; + +public class TrafficDecorator extends DisplayDecorator { + public TrafficDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + public void draw() { + super.draw(); + drawTraffic() ; + } + private void drawTraffic() { + System.out.println("\t뷮 ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client.java new file mode 100644 index 000000000..dc81bd8bb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client.java @@ -0,0 +1,17 @@ +package decorator.after3; + +public class Client { + public static void main(String[] args) { + Display roadWithTraffic = new TrafficDecorator(new RoadDisplay()) ; + roadWithTraffic.draw() ; + + Display roadWithLaneAndTraffic = new TrafficDecorator(new LaneDecorator(new RoadDisplay())) ; + roadWithLaneAndTraffic.draw() ; + + Display roadWithCrossingAndTraffic = new TrafficDecorator(new CrossingDecorator(new RoadDisplay())) ; + roadWithCrossingAndTraffic.draw() ; + + Display roadWithCrossingAndTrafficAndLane = new LaneDecorator(new TrafficDecorator(new CrossingDecorator(new RoadDisplay()))) ; + roadWithCrossingAndTrafficAndLane.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client2.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client2.java new file mode 100644 index 000000000..0adf57fa3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client2.java @@ -0,0 +1,17 @@ +package decorator.after3; + +public class Client2 { + public static void main(String[] args) { + Display road = new RoadDisplay() ; + for ( String decoratorName : args ) { + if ( decoratorName.equalsIgnoreCase("Lane")) + road = new LaneDecorator(road) ; + if ( decoratorName.equalsIgnoreCase("Traffic")) + road = new TrafficDecorator(road) ; + + if ( decoratorName.equalsIgnoreCase("Crossing")) + road = new CrossingDecorator(road) ; + } + road.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/CrossingDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/CrossingDecorator.java new file mode 100644 index 000000000..af7715552 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/CrossingDecorator.java @@ -0,0 +1,14 @@ +package decorator.after3; + +public class CrossingDecorator extends DisplayDecorator { + public CrossingDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + public void draw() { + super.draw(); + drawCrossing() ; + } + private void drawCrossing() { + System.out.println("\t ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Display.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Display.java new file mode 100644 index 000000000..7f482f09c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Display.java @@ -0,0 +1,5 @@ +package decorator.after3; + +public abstract class Display { + public abstract void draw() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/DisplayDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/DisplayDecorator.java new file mode 100644 index 000000000..cc579db0b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/DisplayDecorator.java @@ -0,0 +1,12 @@ +package decorator.after3; + +public class DisplayDecorator extends Display { + private Display decoratedDisplay ; + + public DisplayDecorator(Display decoratedDisplay) { + this.decoratedDisplay = decoratedDisplay ; + } + public void draw() { + decoratedDisplay.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/LaneDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/LaneDecorator.java new file mode 100644 index 000000000..947c743dc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/LaneDecorator.java @@ -0,0 +1,17 @@ +package decorator.after3; + +public class LaneDecorator extends DisplayDecorator { + + public LaneDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + + public void draw() { + super.draw(); + drawLane() ; + } + private void drawLane() { + System.out.println("\t ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/RoadDisplay.java new file mode 100644 index 000000000..6a301ecc3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/RoadDisplay.java @@ -0,0 +1,9 @@ +package decorator.after3; + +public class RoadDisplay extends Display { + + public void draw() { + System.out.println("⺻ ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/TrafficDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/TrafficDecorator.java new file mode 100644 index 000000000..3c0acd2e3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/TrafficDecorator.java @@ -0,0 +1,15 @@ +package decorator.after3; + +public class TrafficDecorator extends DisplayDecorator { + public TrafficDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + public void draw() { + super.draw(); + drawTraffic() ; + } + private void drawTraffic() { + System.out.println("\t뷮 ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/Client.java new file mode 100644 index 000000000..fcb091f3b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/Client.java @@ -0,0 +1,11 @@ +package decorator.before1; + +public class Client { + public static void main(String[] args) { + RoadDisplay road = new RoadDisplay() ; + road.draw() ; + + RoadDisplay roadWithLane = new RoadDisplayWithLane() ; + roadWithLane.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplay.java new file mode 100644 index 000000000..f3171e621 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplay.java @@ -0,0 +1,7 @@ +package decorator.before1; + +public class RoadDisplay { + public void draw() { + System.out.println(" ⺻ ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplayWithLane.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplayWithLane.java new file mode 100644 index 000000000..7b999fbcd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplayWithLane.java @@ -0,0 +1,11 @@ +package decorator.before1; + +public class RoadDisplayWithLane extends RoadDisplay { + public void draw() { + super.draw(); + drawLane(); + } + private void drawLane() { + System.out.println(" ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/Client.java new file mode 100644 index 000000000..56920c391 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/Client.java @@ -0,0 +1,8 @@ +package decorator.before2; + +public class Client { + public static void main(String[] args) { + RoadDisplay roadWithTraffic = new RoadDisplayWithTraffic() ; + roadWithTraffic.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplay.java new file mode 100644 index 000000000..12b9e3dba --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplay.java @@ -0,0 +1,9 @@ +package decorator.before2; + +public class RoadDisplay { + + public void draw() { + System.out.println(" ⺻ ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithLane.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithLane.java new file mode 100644 index 000000000..c692d7b64 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithLane.java @@ -0,0 +1,10 @@ +package decorator.before2; + +public class RoadDisplayWithLane extends RoadDisplay { + public void draw() { + super.draw(); + System.out.println(" ǥ") ; + } + + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithTraffic.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithTraffic.java new file mode 100644 index 000000000..affc0344f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithTraffic.java @@ -0,0 +1,11 @@ +package decorator.before2; + +public class RoadDisplayWithTraffic extends RoadDisplay { + public void draw() { + super.draw(); + drawTraffic(); + } + private void drawTraffic() { + System.out.println("뷮 ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/Client.java new file mode 100644 index 000000000..34e4bf313 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/Client.java @@ -0,0 +1,9 @@ +package decorator.before3; + +public class Client { + public static void main(String[] args) { + RoadDisplay roadWithLandTraffic = new RoadDisplayWithLaneTraffic() ; + roadWithLandTraffic.draw() ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplay.java new file mode 100644 index 000000000..7e2729c40 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplay.java @@ -0,0 +1,9 @@ +package decorator.before3; + +public class RoadDisplay { + + public void draw() { + System.out.println(" ⺻ ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLane.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLane.java new file mode 100644 index 000000000..285df1e02 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLane.java @@ -0,0 +1,12 @@ +package decorator.before3; + +public class RoadDisplayWithLane extends RoadDisplay { + public void draw() { + super.draw(); + drawLane(); + } + private void drawLane() { + System.out.println(" ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLaneTraffic.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLaneTraffic.java new file mode 100644 index 000000000..3e3d5996a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLaneTraffic.java @@ -0,0 +1,16 @@ +package decorator.before3; + +public class RoadDisplayWithLaneTraffic extends RoadDisplay { + public void draw() { + super.draw(); + drawLane(); + drawTraffic(); + } + private void drawTraffic() { + System.out.println("뷮 ǥ") ; + } + + private void drawLane() { + System.out.println(" ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithTraffic.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithTraffic.java new file mode 100644 index 000000000..a212210a6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithTraffic.java @@ -0,0 +1,11 @@ +package decorator.before3; + +public class RoadDisplayWithTraffic extends RoadDisplay { + public void draw() { + super.draw(); + drawTraffic(); + } + private void drawTraffic() { + System.out.println("뷮 ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/AirBagDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/AirBagDecorator.java new file mode 100644 index 000000000..54a56ce54 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/AirBagDecorator.java @@ -0,0 +1,22 @@ +package decorator.example.caroption; + +public class AirBagDecorator extends CarOptionDecorator { + private int airBagPrice ; + public AirBagDecorator(CarComponent decoratedCar, int airBagPrice) { + super(decoratedCar); + this.airBagPrice = airBagPrice ; + } + public int getPrice() { + int decoratedCarPrice = super.getPrice() ; + int airBagPrice = getAirBagPrice() ; + + return decoratedCarPrice + airBagPrice ; + } + private int getAirBagPrice() { + return airBagPrice ; + } + public String getCarInfo() { + return super.getCarInfo() + " with Air Bag" ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/BasicCar.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/BasicCar.java new file mode 100644 index 000000000..f238fb955 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/BasicCar.java @@ -0,0 +1,14 @@ +package decorator.example.caroption; + +public class BasicCar extends CarComponent { + private int price ; + public BasicCar(int price) { + this.price = price ; + } + public int getPrice() { + return price ; + } + public String getCarInfo() { + return "Car" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarComponent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarComponent.java new file mode 100644 index 000000000..b59d08207 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarComponent.java @@ -0,0 +1,6 @@ +package decorator.example.caroption; + +public abstract class CarComponent { + public abstract int getPrice() ; + public abstract String getCarInfo() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarOptionDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarOptionDecorator.java new file mode 100644 index 000000000..51b5b259d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarOptionDecorator.java @@ -0,0 +1,14 @@ +package decorator.example.caroption; + +public class CarOptionDecorator extends CarComponent { + private CarComponent decoratedCar ; + public CarOptionDecorator(CarComponent decoratedCar) { + this.decoratedCar = decoratedCar ; + } + public int getPrice() { + return decoratedCar.getPrice() ; + } + public String getCarInfo() { + return decoratedCar.getCarInfo() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/Client.java new file mode 100644 index 000000000..ecd027e68 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/Client.java @@ -0,0 +1,42 @@ +package decorator.example.caroption; + +import decorator.after3.CrossingDecorator; +import decorator.after3.LaneDecorator; +import decorator.after3.TrafficDecorator; + +public class Client { + public static void main(String[] args) { + CarComponent car = new BasicCar(1000) ; + for ( String decoratorName : args ) { + if ( decoratorName.equalsIgnoreCase("AirBag")) + car = new AirBagDecorator(car, 100) ; + if ( decoratorName.equalsIgnoreCase("ESC")) + car = new ESCDecorator(car, 50) ; + + if ( decoratorName.equalsIgnoreCase("Navi")) + car = new NaviDecorator(car, 30) ; + + if ( decoratorName.equalsIgnoreCase("SCC")) + car = new SCCDecorator(car, 70) ; + } + System.out.println(car.getPrice()) ; + System.out.println(car.getCarInfo()) ; + /* + CarComponent basic = new BasicCar(1000) ; + System.out.println(basic.getPrice()) ; + + CarComponent carWithAriBag = new AirBagDecorator(basic, 100); + System.out.println(carWithAriBag.getPrice()) ; + + CarComponent carWithAriBagAndESC = new ESCDecorator(carWithAriBag, 50) ; + System.out.println(carWithAriBagAndESC.getPrice()) ; + + CarComponent carWithAriBagAndNavi = new NaviDecorator(carWithAriBag, 30) ; + System.out.println(carWithAriBagAndNavi.getPrice()) ; + + CarComponent carWithAriBagAndESCAndSSC = new SSCDecorator(carWithAriBagAndESC, 70) ; + System.out.println(carWithAriBagAndESCAndSSC.getPrice()) ; + */ + + } +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/ESCDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/ESCDecorator.java new file mode 100644 index 000000000..f3a88ca80 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/ESCDecorator.java @@ -0,0 +1,21 @@ +package decorator.example.caroption; + +public class ESCDecorator extends CarOptionDecorator { + private int escPrice ; + public ESCDecorator(CarComponent decoratedCar, int escPrice) { + super(decoratedCar); + this.escPrice = escPrice ; + } + public int getPrice() { + int decoratedCarPrice = super.getPrice() ; + int escPrice = getESCPrice() ; + + return decoratedCarPrice + escPrice ; + } + private int getESCPrice() { + return escPrice ; + } + public String getCarInfo() { + return super.getCarInfo() + " with Electronic Stability Control" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/NaviDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/NaviDecorator.java new file mode 100644 index 000000000..4e2d41018 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/NaviDecorator.java @@ -0,0 +1,21 @@ +package decorator.example.caroption; + +public class NaviDecorator extends CarOptionDecorator { + private int naviPrice ; + public NaviDecorator(CarComponent decoratedCar, int naviPrice) { + super(decoratedCar); + this.naviPrice = naviPrice ; + } + public int getPrice() { + int decoratedCarPrice = super.getPrice() ; + int naviPrice = getNaviPrice() ; + + return decoratedCarPrice + naviPrice ; + } + private int getNaviPrice() { + return naviPrice ; + } + public String getCarInfo() { + return super.getCarInfo() + " with Navigation" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/SCCDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/SCCDecorator.java new file mode 100644 index 000000000..0211e5d51 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/SCCDecorator.java @@ -0,0 +1,21 @@ +package decorator.example.caroption; + +public class SCCDecorator extends CarOptionDecorator { + private int sccPrice ; + public SCCDecorator(CarComponent decoratedCar, int sccPrice) { + super(decoratedCar); + this.sccPrice = sccPrice ; + } + public int getPrice() { + int decoratedCarPrice = super.getPrice() ; + int sscPrice = getSCCPrice() ; + + return decoratedCarPrice + sscPrice ; + } + private int getSCCPrice() { + return sccPrice ; + } + public String getCarInfo() { + return super.getCarInfo() + " with Smart Cruise Conrol" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/BasicEMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/BasicEMailContent.java new file mode 100644 index 000000000..4d39022d6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/BasicEMailContent.java @@ -0,0 +1,9 @@ +package decorator.example.email; + +public class BasicEMailContent extends EMailContent { + private String content; + public BasicEMailContent(String content) { this.content = content; } + public String getContent() { + return content; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/Client.java new file mode 100644 index 000000000..e63ededcc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/Client.java @@ -0,0 +1,17 @@ +package decorator.example.email; + +public class Client { + public static void main(String[] args) { + EMailContent simple = new BasicEMailContent("Hello") ; + System.out.println(simple.getContent()) ; + + EMailContent external = new ExternalDecorator(simple); + System.out.println(external.getContent()) ; + + EMailContent secure = new SecureDecorator(simple) ; + System.out.println(secure.getContent()) ; + + EMailContent secureAfterExternal = new SecureDecorator(external) ; + System.out.println(secureAfterExternal.getContent()) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ContentDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ContentDecorator.java new file mode 100644 index 000000000..287a27d21 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ContentDecorator.java @@ -0,0 +1,11 @@ +package decorator.example.email; + +public abstract class ContentDecorator extends EMailContent { + private EMailContent decoratedContent ; + public ContentDecorator(EMailContent decoratedContent) { + this.decoratedContent = decoratedContent ; + } + public String getContent() { + return decoratedContent.getContent() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/EMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/EMailContent.java new file mode 100644 index 000000000..8c2d2a658 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/EMailContent.java @@ -0,0 +1,5 @@ +package decorator.example.email; + +public abstract class EMailContent { + public abstract String getContent(); +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ExternalDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ExternalDecorator.java new file mode 100644 index 000000000..22462748e --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ExternalDecorator.java @@ -0,0 +1,15 @@ +package decorator.example.email; + +public class ExternalDecorator extends ContentDecorator { + public ExternalDecorator(EMailContent decoratedContent) { + super(decoratedContent); + } + public String getContent() { + String content = super.getContent() ; + String externalContent = addDisclaimer(content) ; + return externalContent ; + } + private String addDisclaimer(String content) { + return content + " Company Disclaimer"; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/SecureDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/SecureDecorator.java new file mode 100644 index 000000000..0643ffe9a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/SecureDecorator.java @@ -0,0 +1,15 @@ +package decorator.example.email; + +public class SecureDecorator extends ContentDecorator { + public SecureDecorator(EMailContent decoratedContent) { + super(decoratedContent); + } + public String getContent() { + String content = super.getContent() ; + String encryptedContent = encrypt(content) ; + return encryptedContent ; + } + private String encrypt(String content) { + return content + " Encrypted"; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/BasicEMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/BasicEMailContent.java new file mode 100644 index 000000000..a3fa82eb4 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/BasicEMailContent.java @@ -0,0 +1,9 @@ +package decorator.example.email.before; + +public class BasicEMailContent { + private String content; + public BasicEMailContent(String content) { this.content = content; } + public String getContent() { + return content; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/Client.java new file mode 100644 index 000000000..ba8cf2ee1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/Client.java @@ -0,0 +1,14 @@ +package decorator.example.email.before; + +public class Client { + public static void main(String[] args) { + BasicEMailContent simple = new BasicEMailContent("Hello") ; + System.out.println(simple.getContent()) ; + + ExternalEMailContent external = new ExternalEMailContent("Hello"); + System.out.println(external.getContent()) ; + + SecureEMailContent secure = new SecureEMailContent("Hello") ; + System.out.println(secure.getContent()) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/ExternalEMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/ExternalEMailContent.java new file mode 100644 index 000000000..d332b0b07 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/ExternalEMailContent.java @@ -0,0 +1,15 @@ +package decorator.example.email.before; + +public class ExternalEMailContent extends BasicEMailContent { + public ExternalEMailContent(String content) { + super(content); + } + public String getContent() { + String content = super.getContent() ; + String externalContent = addDisclaimer(content) ; + return externalContent ; + } + private String addDisclaimer(String content) { + return content + " Company Disclaimer"; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/SecureEMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/SecureEMailContent.java new file mode 100644 index 000000000..a9bdbd000 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/SecureEMailContent.java @@ -0,0 +1,15 @@ +package decorator.example.email.before; + +public class SecureEMailContent extends BasicEMailContent { + public SecureEMailContent(String content) { + super(content); + } + public String getContent() { + String content = super.getContent() ; + String encryptedContent = encrypt(content) ; + return encryptedContent ; + } + private String encrypt(String content) { + return content + " Encrypted"; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Client.java new file mode 100644 index 000000000..315bf1060 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Client.java @@ -0,0 +1,14 @@ +package factorymethod.after1; + +public class Client { + public static void main(String[] args) { + ElevatorManager emWithResponseTimerScheduler = new ElevatorManager(2, SchedulingStrategyID.RESPONSE_TIME) ; + emWithResponseTimerScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithThroughputScheduler = new ElevatorManager(2, SchedulingStrategyID.THROUGHPUT) ; + emWithThroughputScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithDynamicScheduler = new ElevatorManager(2, SchedulingStrategyID.DYNAMIC) ; + emWithDynamicScheduler.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Direction.java new file mode 100644 index 000000000..8ab5c54b4 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.after1; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorController.java new file mode 100644 index 000000000..58ca3da2d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.after1; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorManager.java new file mode 100644 index 000000000..af2b83a93 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorManager.java @@ -0,0 +1,32 @@ +package factorymethod.after1; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import factorymethod.before1.ElevatorController; + +public class ElevatorManager { + private List controllers ; + private SchedulingStrategyID strategyID ; + + public ElevatorManager(int controllerCount, SchedulingStrategyID strategyID) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + this.strategyID = strategyID ; + } + public void setStrategyID(SchedulingStrategyID strategyID) { + this.strategyID = strategyID; + } + void requestElevator(int destination, Direction direction) { + ElevatorScheduler scheduler = SchedulerFactory.getScheduler(strategyID) ; + System.out.println(scheduler) ; // Singleton Pattern ƴ϶ Scheduler Object ٸ ȴ. + + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorScheduler.java new file mode 100644 index 000000000..92dc411a2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorScheduler.java @@ -0,0 +1,7 @@ +package factorymethod.after1; + +public interface ElevatorScheduler { + + public int selectElevator(ElevatorManager elevatorManager, int destination, Direction direction); + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ResponseTimeScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ResponseTimeScheduler.java new file mode 100644 index 000000000..60810eb13 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ResponseTimeScheduler.java @@ -0,0 +1,8 @@ +package factorymethod.after1; + +public class ResponseTimeScheduler implements ElevatorScheduler { + + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 1 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulerFactory.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulerFactory.java new file mode 100644 index 000000000..d78940bc6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulerFactory.java @@ -0,0 +1,23 @@ +package factorymethod.after1; + +import java.util.Calendar; + +// ũ ̿ singleton ̶ +public class SchedulerFactory { + public static ElevatorScheduler getScheduler(SchedulingStrategyID strategyID) { + ElevatorScheduler scheduler = null ; + switch ( strategyID ) { + case RESPONSE_TIME : scheduler = new ResponseTimeScheduler() ; break ; + case THROUGHPUT : scheduler = new ThroughputScheduler() ; break ; + case DYNAMIC : { + int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) ; + if ( hour < 12 ) // + scheduler = new ResponseTimeScheduler() ; + else // + scheduler = new ThroughputScheduler() ; + break ; + } + } + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulingStrategyID.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulingStrategyID.java new file mode 100644 index 000000000..47e2ff55f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulingStrategyID.java @@ -0,0 +1,3 @@ +package factorymethod.after1; + +public enum SchedulingStrategyID { RESPONSE_TIME, THROUGHPUT, DYNAMIC } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ThroughputScheduler.java new file mode 100644 index 000000000..bd1bc17a6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ThroughputScheduler.java @@ -0,0 +1,12 @@ +package factorymethod.after1; + +public class ThroughputScheduler implements ElevatorScheduler { + + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + + return 0 ; + + } + + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Client.java new file mode 100644 index 000000000..9c70459b9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Client.java @@ -0,0 +1,14 @@ +package factorymethod.after2; + +public class Client { + public static void main(String[] args) { + ElevatorManager emWithResponseTimerScheduler = new ElevatorManager(2, SchedulingStrategyID.RESPONSE_TIME) ; + emWithResponseTimerScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithThroughputScheduler = new ElevatorManager(2, SchedulingStrategyID.THROUGHPUT) ; + emWithThroughputScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithDynamicScheduler = new ElevatorManager(2, SchedulingStrategyID.DYNAMIC) ; + emWithDynamicScheduler.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Direction.java new file mode 100644 index 000000000..efdf9cf4b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.after2; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorController.java new file mode 100644 index 000000000..7b48919bb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.after2; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorManager.java new file mode 100644 index 000000000..00f620a8a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorManager.java @@ -0,0 +1,25 @@ +package factorymethod.after2; + +import java.util.ArrayList; +import java.util.List; + +public class ElevatorManager { + private List controllers ; + private SchedulingStrategyID strategyID ; + + public ElevatorManager(int controllerCount, SchedulingStrategyID strategyID) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + this.strategyID = strategyID ; + } + void requestElevator(int destination, Direction direction) { + ElevatorScheduler scheduler = SchedulerFactory.getScheduler(strategyID) ; + System.out.println(scheduler) ; // Singleton Pattern ƴ϶ Scheduler Object ϴ + + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorScheduler.java new file mode 100644 index 000000000..586ea45ac --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorScheduler.java @@ -0,0 +1,5 @@ +package factorymethod.after2; + +public interface ElevatorScheduler { + public int selectElevator(ElevatorManager elevatorManager, int destination, Direction direction); +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ResponseTimeScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ResponseTimeScheduler.java new file mode 100644 index 000000000..953074cba --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ResponseTimeScheduler.java @@ -0,0 +1,14 @@ +package factorymethod.after2; + +public class ResponseTimeScheduler implements ElevatorScheduler { + private static ElevatorScheduler scheduler ; + private ResponseTimeScheduler() {} + public static ElevatorScheduler getInstance() { + if ( scheduler == null ) + scheduler = new ResponseTimeScheduler() ; + return scheduler ; + } + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 1 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulerFactory.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulerFactory.java new file mode 100644 index 000000000..83a044540 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulerFactory.java @@ -0,0 +1,23 @@ +package factorymethod.after2; + +import java.util.Calendar; + +// 2 Scheduler Singleton +public class SchedulerFactory { + public static ElevatorScheduler getScheduler(SchedulingStrategyID strategyID) { + ElevatorScheduler scheduler = null ; + switch ( strategyID ) { + case RESPONSE_TIME : scheduler = ResponseTimeScheduler.getInstance() ; break ; + case THROUGHPUT : scheduler = ThroughputScheduler.getInstance() ; break ; + case DYNAMIC : { + int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) ; + if ( hour < 12 ) // + scheduler = ResponseTimeScheduler.getInstance() ; + else // + scheduler = ThroughputScheduler.getInstance() ; + break ; + } + } + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulingStrategyID.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulingStrategyID.java new file mode 100644 index 000000000..33963190d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulingStrategyID.java @@ -0,0 +1,3 @@ +package factorymethod.after2; + +public enum SchedulingStrategyID { RESPONSE_TIME, THROUGHPUT, DYNAMIC } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ThroughputScheduler.java new file mode 100644 index 000000000..f345c3f77 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ThroughputScheduler.java @@ -0,0 +1,14 @@ +package factorymethod.after2; + +public class ThroughputScheduler implements ElevatorScheduler { + private static ElevatorScheduler scheduler ; + private ThroughputScheduler() {} + public static ElevatorScheduler getInstance() { + if ( scheduler == null ) + scheduler = new ThroughputScheduler() ; + return scheduler ; + } + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 0 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Client.java new file mode 100644 index 000000000..79b5d3979 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Client.java @@ -0,0 +1,14 @@ +package factorymethod.after3; + +public class Client { + public static void main(String[] args) { + ElevatorManager emWithResponseTimerScheduler = new ElevatorManagerWithResponseTimeScheduling(2) ; + emWithResponseTimerScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithThroughputScheduler = new ElevatorManagerWithThroughputScheduling(2) ; + emWithThroughputScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithDynamicScheduler = new ElevatorManagerWithDynamicScheduling(2) ; + emWithDynamicScheduler.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Direction.java new file mode 100644 index 000000000..4cc34400b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.after3; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorController.java new file mode 100644 index 000000000..2d45289a0 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.after3; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManager.java new file mode 100644 index 000000000..a82640652 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManager.java @@ -0,0 +1,22 @@ +package factorymethod.after3; + +import java.util.ArrayList; +import java.util.List; + +public abstract class ElevatorManager { + private List controllers ; + public ElevatorManager(int controllerCount) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + } + protected abstract ElevatorScheduler getScheduler() ; + void requestElevator(int destination, Direction direction) { + ElevatorScheduler scheduler = getScheduler() ; + + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithDynamicScheduling.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithDynamicScheduling.java new file mode 100644 index 000000000..dad44cf23 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithDynamicScheduling.java @@ -0,0 +1,18 @@ +package factorymethod.after3; + +import java.util.Calendar; + +public class ElevatorManagerWithDynamicScheduling extends ElevatorManager { + public ElevatorManagerWithDynamicScheduling(int controllerCount) { + super(controllerCount) ; + } + protected ElevatorScheduler getScheduler() { + ElevatorScheduler scheduler = null ; + int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) ; + if ( hour < 12 ) // + scheduler = ResponseTimeScheduler.getInstance() ; + else // + scheduler = ThroughputScheduler.getInstance() ; + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.java new file mode 100644 index 000000000..d87500ed7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.java @@ -0,0 +1,11 @@ +package factorymethod.after3; + +public class ElevatorManagerWithResponseTimeScheduling extends ElevatorManager { + public ElevatorManagerWithResponseTimeScheduling(int controllerCount) { + super(controllerCount) ; + } + protected ElevatorScheduler getScheduler() { + ElevatorScheduler scheduler = ResponseTimeScheduler.getInstance() ; + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithThroughputScheduling.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithThroughputScheduling.java new file mode 100644 index 000000000..1442cac80 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithThroughputScheduling.java @@ -0,0 +1,12 @@ +package factorymethod.after3; + + +public class ElevatorManagerWithThroughputScheduling extends ElevatorManager { + public ElevatorManagerWithThroughputScheduling(int controllerCount) { + super(controllerCount) ; + } + protected ElevatorScheduler getScheduler() { + ElevatorScheduler scheduler = ThroughputScheduler.getInstance() ; + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorScheduler.java new file mode 100644 index 000000000..597877b37 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorScheduler.java @@ -0,0 +1,5 @@ +package factorymethod.after3; + +public interface ElevatorScheduler { + public int selectElevator(ElevatorManager elevatorManager, int destination, Direction direction); +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ResponseTimeScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ResponseTimeScheduler.java new file mode 100644 index 000000000..441157e29 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ResponseTimeScheduler.java @@ -0,0 +1,14 @@ +package factorymethod.after3; + +public class ResponseTimeScheduler implements ElevatorScheduler { + private static ElevatorScheduler scheduler ; + private ResponseTimeScheduler() {} + public static ElevatorScheduler getInstance() { + if ( scheduler == null ) + scheduler = new ResponseTimeScheduler() ; + return scheduler ; + } + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 1 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ThroughputScheduler.java new file mode 100644 index 000000000..c7ecb6467 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ThroughputScheduler.java @@ -0,0 +1,14 @@ +package factorymethod.after3; + +public class ThroughputScheduler implements ElevatorScheduler { + private static ElevatorScheduler scheduler ; + private ThroughputScheduler() {} + public static ElevatorScheduler getInstance() { + if ( scheduler == null ) + scheduler = new ThroughputScheduler() ; + return scheduler ; + } + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 0 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Client.java new file mode 100644 index 000000000..7c7ffa51b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Client.java @@ -0,0 +1,8 @@ +package factorymethod.before1; + +public class Client { + public static void main(String[] args) { + ElevatorManager em = new ElevatorManager(2) ; + em.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Direction.java new file mode 100644 index 000000000..54718eb05 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.before1; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorController.java new file mode 100644 index 000000000..bb1e01578 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.before1; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorManager.java new file mode 100644 index 000000000..739189d08 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorManager.java @@ -0,0 +1,21 @@ +package factorymethod.before1; + +import java.util.ArrayList; +import java.util.List; + +public class ElevatorManager { + private List controllers ; + private ThroughputScheduler scheduler ; + public ElevatorManager(int controllerCount) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + scheduler = new ThroughputScheduler() ; + } + void requestElevator(int destination, Direction direction) { + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ThroughputScheduler.java new file mode 100644 index 000000000..0ef465465 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ThroughputScheduler.java @@ -0,0 +1,7 @@ +package factorymethod.before1; + +public class ThroughputScheduler { + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 0 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Client.java new file mode 100644 index 000000000..4b923e104 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Client.java @@ -0,0 +1,9 @@ +package factorymethod.before2; + +public class Client { + public static void main(String[] args) { + ElevatorManager em = new ElevatorManager(2) ; + + em.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Direction.java new file mode 100644 index 000000000..22a2f86af --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.before2; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorController.java new file mode 100644 index 000000000..2a2d53fb8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.before2; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorManager.java new file mode 100644 index 000000000..ea59708c8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorManager.java @@ -0,0 +1,30 @@ +package factorymethod.before2; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import factorymethod.before1.ElevatorController; + +public class ElevatorManager { + private List controllers ; + public ElevatorManager(int controllerCount) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + } + void requestElevator(int destination, Direction direction) { + ElevatorScheduler scheduler ; + // 0..23 + int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) ; + if ( hour < 12 ) // + scheduler = new ResponseTimeScheduler() ; + else // + scheduler = new ThroughputScheduler() ; + + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorScheduler.java new file mode 100644 index 000000000..5fc39f2c5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorScheduler.java @@ -0,0 +1,5 @@ +package factorymethod.before2; + +public interface ElevatorScheduler { + public int selectElevator(ElevatorManager elevatorManager, int destination, Direction direction); +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ResponseTimeScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ResponseTimeScheduler.java new file mode 100644 index 000000000..4f6e30aca --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ResponseTimeScheduler.java @@ -0,0 +1,7 @@ +package factorymethod.before2; + +public class ResponseTimeScheduler implements ElevatorScheduler { + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 1 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ThroughputScheduler.java new file mode 100644 index 000000000..e22acbdc7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ThroughputScheduler.java @@ -0,0 +1,8 @@ +package factorymethod.before2; + +public class ThroughputScheduler implements ElevatorScheduler { + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 0 ; + + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Car.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Car.java new file mode 100644 index 000000000..e1dcc83d0 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Car.java @@ -0,0 +1,48 @@ +package factorymethod.example.carmode; + +public class Car { + private int speed ; + + private CarState normalState ; + private CarState limpState ; + + private CarState curState ; + + public Car() { + normalState = CarStateFactory.getState(CarStateID.NORMAL, this) ; + limpState = CarStateFactory.getState(CarStateID.LIMP_MODE, this) ; + curState = normalState ; + } + public CarState getLimpMode() { + return limpState ; + } + public void setStae(CarState state) { + curState = state ; + } + + public void stop() { + curState.stop() ; + } + public void speedDown(int targetSpeed) { + curState.speedDown(targetSpeed) ; + } + public void engineFailedDetected() { + curState.engineFailedDetected() ; + } + public void speedUp(int targetSpeed) { + curState.speedUp(targetSpeed) ; + } + public void engineRepaired() { + curState.engineRepaired() ; + } + + public int getSpeed() { + return speed; + } + public void setSpeed(int speed) { + this.speed = speed; + } + public CarState getNormalMode() { + return normalState ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarState.java new file mode 100644 index 000000000..b5fbeef7b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarState.java @@ -0,0 +1,23 @@ +package factorymethod.example.carmode; + +public abstract class CarState { + protected Car car; + protected CarState(Car car) { + this.car = car ; + } + public void stop() { + car.setSpeed(0) ; + } + public void speedDown(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed < car.getSpeed() ) + car.setSpeed(targetSpeed) ; + + System.out.println(" ==> " + car.getSpeed()) ; + + } + public abstract void speedUp(int targetSpeed) ; + public abstract void engineFailedDetected() ; + public abstract void engineRepaired() ; + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateFactory.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateFactory.java new file mode 100644 index 000000000..532cf5f45 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateFactory.java @@ -0,0 +1,12 @@ +package factorymethod.example.carmode; + +public class CarStateFactory { + public static CarState getState(CarStateID stateID, Car car) { + CarState state = null ; + switch ( stateID ) { + case NORMAL : state = NormalState.getInstance(car) ; break ; + case LIMP_MODE : state = LimpState.getInstance(car) ; break ; + } + return state ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateID.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateID.java new file mode 100644 index 000000000..1106e9382 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateID.java @@ -0,0 +1,5 @@ +package factorymethod.example.carmode; + +public enum CarStateID { + NORMAL, LIMP_MODE +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Client.java new file mode 100644 index 000000000..f23151830 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Client.java @@ -0,0 +1,26 @@ +package factorymethod.example.carmode; + +public class Client { + + public static void main(String[] args) { + Car car = new Car() ; + + car.speedUp(150) ; + car.speedDown(130) ; + + car.engineFailedDetected() ; + + car.speedUp(100) ; + + car.speedDown(30) ; + + car.speedUp(50) ; + + car.speedUp(100) ; + + car.engineRepaired() ; + + car.speedUp(100) ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/LimpState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/LimpState.java new file mode 100644 index 000000000..2f6617ad6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/LimpState.java @@ -0,0 +1,27 @@ +package factorymethod.example.carmode; + +public class LimpState extends CarState { + public static final int LIMP_MODE_MAX_SPEED = 60 ; + private static CarState state ; + + private LimpState(Car car) { + super(car) ; + } + public void speedUp(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed > car.getSpeed() && targetSpeed < LIMP_MODE_MAX_SPEED ) + car.setSpeed(targetSpeed) ; + System.out.println(" ==> " + car.getSpeed()) ; + } + public void engineFailedDetected() { + // ̹ Limp Mode + } + public static CarState getInstance(Car car) { + if ( state == null ) + state = new LimpState(car) ; + return state ; + } + public void engineRepaired() { + car.setStae(car.getNormalMode()) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/NormalState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/NormalState.java new file mode 100644 index 000000000..b70aa966a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/NormalState.java @@ -0,0 +1,30 @@ +package factorymethod.example.carmode; + +public class NormalState extends CarState { + private static CarState state ; + + private NormalState(Car car) { + super(car) ; + } + public void speedUp(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed > car.getSpeed() ) + car.setSpeed(targetSpeed) ; + System.out.println(" ==> " + car.getSpeed()) ; + } + public void engineFailedDetected() { + System.out.print("Speed: " + car.getSpeed()) ; + car.setSpeed(LimpState.LIMP_MODE_MAX_SPEED) ; + System.out.println(" ==> " + car.getSpeed()) ; + + car.setStae(car.getLimpMode()) ; + } + public static CarState getInstance(Car car) { + if ( state == null ) + state = new NormalState(car) ; + return state ; + } + public void engineRepaired() { + System.out.println("Unexpted Event") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Car.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Car.java new file mode 100644 index 000000000..c2f7bb775 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Car.java @@ -0,0 +1,44 @@ +package factorymethod.example.carmode.before; + +public class Car { + private int speed ; + private CarState normalState ; + private CarState limpState ; + private CarState curState ; + + public Car() { + normalState = new NormalState(this) ; + limpState = new LimpState(this) ; + curState = normalState ; + } + public CarState getLimpMode() { + return limpState ; + } + public void setStae(CarState state) { + curState = state ; + } + public void stop() { + curState.stop() ; + } + public void speedDown(int targetSpeed) { + curState.speedDown(targetSpeed) ; + } + public void engineFailedDetected() { + curState.engineFailedDetected() ; + } + public void speedUp(int targetSpeed) { + curState.speedUp(targetSpeed) ; + } + public void engineRepaired() { + curState.engineRepaired() ; + } + public int getSpeed() { + return speed; + } + public void setSpeed(int speed) { + this.speed = speed; + } + public CarState getNormalMode() { + return normalState ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/CarState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/CarState.java new file mode 100644 index 000000000..a3947ecba --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/CarState.java @@ -0,0 +1,23 @@ +package factorymethod.example.carmode.before; + +public abstract class CarState { + protected Car car; + protected CarState(Car car) { + this.car = car ; + } + public void stop() { + car.setSpeed(0) ; + } + public void speedDown(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed < car.getSpeed() ) + car.setSpeed(targetSpeed) ; + + System.out.println(" ==> " + car.getSpeed()) ; + + } + public abstract void speedUp(int targetSpeed) ; + public abstract void engineFailedDetected() ; + public abstract void engineRepaired() ; + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Client.java new file mode 100644 index 000000000..9eb72508a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Client.java @@ -0,0 +1,26 @@ +package factorymethod.example.carmode.before; + +public class Client { + + public static void main(String[] args) { + Car car = new Car() ; + + car.speedUp(150) ; + car.speedDown(130) ; + + car.engineFailedDetected() ; + + car.speedUp(100) ; + + car.speedDown(30) ; + + car.speedUp(50) ; + + car.speedUp(100) ; + + car.engineRepaired() ; + + car.speedUp(100) ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/LimpState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/LimpState.java new file mode 100644 index 000000000..5e312607d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/LimpState.java @@ -0,0 +1,20 @@ +package factorymethod.example.carmode.before; + +public class LimpState extends CarState { + public static final int LIMP_MODE_MAX_SPEED = 60 ; + public LimpState(Car car) { + super(car) ; + } + public void speedUp(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed > car.getSpeed() && targetSpeed < LIMP_MODE_MAX_SPEED ) + car.setSpeed(targetSpeed) ; + System.out.println(" ==> " + car.getSpeed()) ; + } + public void engineFailedDetected() { + // ̹ Limp Mode + } + public void engineRepaired() { + car.setStae(car.getNormalMode()) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/NormalState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/NormalState.java new file mode 100644 index 000000000..6d3ced481 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/NormalState.java @@ -0,0 +1,23 @@ +package factorymethod.example.carmode.before; + +public class NormalState extends CarState { + public NormalState(Car car) { + super(car) ; + } + public void speedUp(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed > car.getSpeed() ) + car.setSpeed(targetSpeed) ; + System.out.println(" ==> " + car.getSpeed()) ; + } + public void engineFailedDetected() { + System.out.print("Speed: " + car.getSpeed()) ; + car.setSpeed(LimpState.LIMP_MODE_MAX_SPEED) ; + System.out.println(" ==> " + car.getSpeed()) ; + + car.setStae(car.getLimpMode()) ; + } + public void engineRepaired() { + System.out.println("Unexpted Event") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Client.java new file mode 100644 index 000000000..df2519b2f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Client.java @@ -0,0 +1,15 @@ +package factorymethod.example.motor; + +public class Client { + public static void main(String[] args) { + Motor lgMotor = MotorFactory.getMotor(MotorVendorID.LG) ; + ElevatorController controller1 = new ElevatorController(1, lgMotor) ; + controller1.gotoFloor(5) ; + controller1.gotoFloor(3) ; + + Motor hyundaiMotor = MotorFactory.getMotor(MotorVendorID.HYUNDAI) ; + ElevatorController controller2 = new ElevatorController(2, hyundaiMotor) ; + controller2.gotoFloor(4) ; + controller2.gotoFloor(6) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Direction.java new file mode 100644 index 000000000..b05fc60bc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Direction.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/ElevatorController.java new file mode 100644 index 000000000..a96499727 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/ElevatorController.java @@ -0,0 +1,28 @@ +package factorymethod.example.motor; + +public class ElevatorController { + private int id ; + private int curFloor = 1 ; + private Motor motor ; + public ElevatorController(int id, Motor motor) { + this.id = id ; + this.motor = motor ; + } + public void gotoFloor(int destination) { + if ( destination == curFloor ) return ; + + Direction direction ; + if ( destination > curFloor ) + direction = Direction.UP ; + else + direction = Direction.DOWN ; + + motor.move(direction) ; + + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor + " with " + motor.getClass().getName() ) ; + + motor.stop() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/HyundaiMotor.java new file mode 100644 index 000000000..62084e31c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/HyundaiMotor.java @@ -0,0 +1,7 @@ +package factorymethod.example.motor; + +public class HyundaiMotor extends Motor { + protected void moveMotor(Direction direction) { + System.out.println("move Hyundai Motor " + direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/LGMotor.java new file mode 100644 index 000000000..d21237664 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/LGMotor.java @@ -0,0 +1,7 @@ +package factorymethod.example.motor; + +public class LGMotor extends Motor { + protected void moveMotor(Direction direction) { + System.out.println("move LG Motor " + direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Motor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Motor.java new file mode 100644 index 000000000..a68d52d5f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Motor.java @@ -0,0 +1,24 @@ +package factorymethod.example.motor; + +public abstract class Motor { + private MotorStatus motorStatus ; + public Motor() { + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + moveMotor(direction) ; + setMotorStatus(MotorStatus.MOVING) ; + } + protected abstract void moveMotor(Direction direction) ; + public void stop() { + motorStatus = MotorStatus.STOPPED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorFactory.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorFactory.java new file mode 100644 index 000000000..4d3d6ace9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorFactory.java @@ -0,0 +1,13 @@ +package factorymethod.example.motor; + +public class MotorFactory { + public static Motor getMotor(MotorVendorID vendorID) { + Motor motor = null ; + switch ( vendorID ) { + case LG : motor = new LGMotor() ; break ; + case HYUNDAI : motor = new HyundaiMotor() ; break ; + } + + return motor ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorStatus.java new file mode 100644 index 000000000..e3f1f4199 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorStatus.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorVendorID.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorVendorID.java new file mode 100644 index 000000000..60b4d99fc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorVendorID.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor; + +public enum MotorVendorID { LG, HYUNDAI } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Client.java new file mode 100644 index 000000000..43eb385ab --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Client.java @@ -0,0 +1,11 @@ +package factorymethod.example.motor.before1; + + +public class Client { + public static void main(String[] args) { + LGMotor lgMotor = new LGMotor() ; + ElevatorController controller1 = new ElevatorController(1, lgMotor) ; + controller1.gotoFloor(5) ; + controller1.gotoFloor(3) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Direction.java new file mode 100644 index 000000000..4a813b97a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Direction.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor.before1; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/ElevatorController.java new file mode 100644 index 000000000..c3a74e173 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/ElevatorController.java @@ -0,0 +1,28 @@ +package factorymethod.example.motor.before1; + +public class ElevatorController { + private int id ; + private int curFloor = 1; + private LGMotor motor ; + public ElevatorController(int id, LGMotor motor) { + this.id = id ; + this.motor = motor ; + } + public void gotoFloor(int destination) { + if ( destination == curFloor ) return ; + + Direction direction ; + if ( destination > curFloor ) + direction = Direction.UP ; + else + direction = Direction.DOWN ; + + motor.move(direction) ; + + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor + " with " + motor.getClass().getName() ) ; + + motor.stop() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/LGMotor.java new file mode 100644 index 000000000..37414d322 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/LGMotor.java @@ -0,0 +1,23 @@ +package factorymethod.example.motor.before1; + +public class LGMotor { + private MotorStatus motorStatus ; + public LGMotor() { + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + System.out.println("move LG Motor " + direction) ; + setMotorStatus(MotorStatus.MOVING) ; + } + public void stop() { + motorStatus = MotorStatus.STOPPED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/MotorStatus.java new file mode 100644 index 000000000..eda52ff52 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/MotorStatus.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor.before1; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Client.java new file mode 100644 index 000000000..b36ca6e48 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Client.java @@ -0,0 +1,16 @@ +package factorymethod.example.motor.before2; + + +public class Client { + public static void main(String[] args) { + Motor lgMotor = new LGMotor() ; + ElevatorController controller1 = new ElevatorController(1, lgMotor) ; + controller1.gotoFloor(5) ; + controller1.gotoFloor(3) ; + + Motor hyundaiMotor = new HyundaiMotor() ; + ElevatorController controller2 = new ElevatorController(2, hyundaiMotor) ; + controller2.gotoFloor(4) ; + controller2.gotoFloor(6) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Direction.java new file mode 100644 index 000000000..d48e1c219 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Direction.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor.before2; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/ElevatorController.java new file mode 100644 index 000000000..8f7d6cdf2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/ElevatorController.java @@ -0,0 +1,28 @@ +package factorymethod.example.motor.before2; + +public class ElevatorController { + private int id ; + private int curFloor = 1 ; + private Motor motor ; + public ElevatorController(int id, Motor motor) { + this.id = id ; + this.motor = motor ; + } + public void gotoFloor(int destination) { + if ( destination == curFloor ) return ; + + Direction direction ; + if ( destination > curFloor ) + direction = Direction.UP ; + else + direction = Direction.DOWN ; + + motor.move(direction) ; + + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor + " with " + motor.getClass().getName() ) ; + + motor.stop() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/HyundaiMotor.java new file mode 100644 index 000000000..5214c4439 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/HyundaiMotor.java @@ -0,0 +1,7 @@ +package factorymethod.example.motor.before2; + +public class HyundaiMotor extends Motor { + protected void moveMotor(Direction direction) { + System.out.println("move Hyundai Motor " + direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/LGMotor.java new file mode 100644 index 000000000..9d81c6588 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/LGMotor.java @@ -0,0 +1,7 @@ +package factorymethod.example.motor.before2; + +public class LGMotor extends Motor { + protected void moveMotor(Direction direction) { + System.out.println("move LG Motor " + direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Motor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Motor.java new file mode 100644 index 000000000..416d67aa4 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Motor.java @@ -0,0 +1,24 @@ +package factorymethod.example.motor.before2; + +public abstract class Motor { + private MotorStatus motorStatus ; + public Motor() { + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + moveMotor(direction) ; + setMotorStatus(MotorStatus.MOVING) ; + } + protected abstract void moveMotor(Direction direction) ; + public void stop() { + motorStatus = MotorStatus.STOPPED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/MotorStatus.java new file mode 100644 index 000000000..bf44a1f07 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/MotorStatus.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor.before2; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Client.java new file mode 100644 index 000000000..e41c33bcf --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Client.java @@ -0,0 +1,21 @@ +package observer.after1; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + DataSheetView dataSheetView3 = new DataSheetView(scoreRecord, 3) ; + DataSheetView dataSheetView5 = new DataSheetView(scoreRecord, 5) ; + MinMaxView minMaxView = new MinMaxView(scoreRecord) ; + + scoreRecord.attach(dataSheetView3) ; + scoreRecord.attach(dataSheetView5) ; + scoreRecord.attach(minMaxView) ; + + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/DataSheetView.java new file mode 100644 index 000000000..0bfa67e56 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.after1; + +import java.util.List; + +public class DataSheetView implements Observer { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/MinMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/MinMaxView.java new file mode 100644 index 000000000..4b9f3c93c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/MinMaxView.java @@ -0,0 +1,22 @@ +package observer.after1; + +import java.util.Collections; +import java.util.List; + +public class MinMaxView implements Observer { + private ScoreRecord scoreRecord ; + + public MinMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayMinMax(record); + } + private void displayMinMax(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/Observer.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Observer.java new file mode 100644 index 000000000..ceb9e9110 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Observer.java @@ -0,0 +1,5 @@ +package observer.after1; + +public interface Observer { + abstract public void update() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/ScoreRecord.java new file mode 100644 index 000000000..4a7ac151c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/ScoreRecord.java @@ -0,0 +1,16 @@ +package observer.after1; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord extends Subject { + private List scores = new ArrayList() ; + + public void addScore(int score) { + scores.add(score) ; + notifyObservers() ; + } + public List getScoreRecord() { + return scores ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/Subject.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Subject.java new file mode 100644 index 000000000..def743fb8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Subject.java @@ -0,0 +1,18 @@ +package observer.after1; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Subject { + private List observers = new ArrayList() ; + + public void attach(Observer observer) { + observers.add(observer) ; + } + public void detach(Observer observer) { + observers.remove(observer) ; + } + public void notifyObservers() { + for ( Observer o : observers ) o.update() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Client.java new file mode 100644 index 000000000..5055acf0d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Client.java @@ -0,0 +1,29 @@ +package observer.after2; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + + DataSheetView dataSheetView3 = new DataSheetView(scoreRecord, 3) ; + scoreRecord.attach(dataSheetView3) ; + + MinMaxView minMaxView = new MinMaxView(scoreRecord) ; + scoreRecord.attach(minMaxView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + + scoreRecord.detach(dataSheetView3) ; + StatisticsView statisticsView = new StatisticsView(scoreRecord) ; + scoreRecord.attach(statisticsView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/DataSheetView.java new file mode 100644 index 000000000..fde462c02 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.after2; + +import java.util.List; + +public class DataSheetView implements Observer { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/MinMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/MinMaxView.java new file mode 100644 index 000000000..30957427c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/MinMaxView.java @@ -0,0 +1,22 @@ +package observer.after2; + +import java.util.Collections; +import java.util.List; + +public class MinMaxView implements Observer { + private ScoreRecord scoreRecord ; + + public MinMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayMinMax(record); + } + private void displayMinMax(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/Observer.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Observer.java new file mode 100644 index 000000000..1c11f04a3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Observer.java @@ -0,0 +1,5 @@ +package observer.after2; + +public interface Observer { + abstract public void update() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/ScoreRecord.java new file mode 100644 index 000000000..0b6c3db56 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/ScoreRecord.java @@ -0,0 +1,18 @@ +package observer.after2; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord extends Subject { + private List scores = new ArrayList() ; + + public void addScore(int score) { + scores.add(score) ; + + notifyObservers() ; + } + public List getScoreRecord() { + return scores ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/StatisticsView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/StatisticsView.java new file mode 100644 index 000000000..3a9023267 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/StatisticsView.java @@ -0,0 +1,24 @@ +package observer.after2; + +import java.util.Collections; +import java.util.List; + +public class StatisticsView implements Observer { + private ScoreRecord scoreRecord ; + + public StatisticsView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayStatistics(record); + } + private void displayStatistics(List record) { + int sum = 0 ; + for ( int score : record ) + sum += score ; + float average = (float) sum / record.size() ; + System.out.println("Sum: " + sum + " Average: " + average) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/Subject.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Subject.java new file mode 100644 index 000000000..49486173a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Subject.java @@ -0,0 +1,18 @@ +package observer.after2; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Subject { + private List observers = new ArrayList() ; + + public void attach(Observer observer) { + observers.add(observer) ; + } + public void detach(Observer observer) { + observers.remove(observer) ; + } + public void notifyObservers() { + for ( Observer o : observers ) o.update() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/before1/Client.java new file mode 100644 index 000000000..57b5b36b5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before1/Client.java @@ -0,0 +1,16 @@ +package observer.before1; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + DataSheetView dataSheetView = new DataSheetView(scoreRecord, 3) ; + + scoreRecord.setDataSheetView(dataSheetView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before1/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before1/DataSheetView.java new file mode 100644 index 000000000..a7c5f1af2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before1/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.before1; + +import java.util.List; + +public class DataSheetView { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before1/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/before1/ScoreRecord.java new file mode 100644 index 000000000..25bcc70d3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before1/ScoreRecord.java @@ -0,0 +1,21 @@ +package observer.before1; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord { + private List scores = new ArrayList() ; + private DataSheetView dataSheetView ; + + public void setDataSheetView(DataSheetView dataSheetView) { + this.dataSheetView = dataSheetView ; + } + public void addScore(int score) { + scores.add(score) ; + + dataSheetView.update() ; + } + public List getScoreRecord() { + return scores ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/before2/Client.java new file mode 100644 index 000000000..641bb77cc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before2/Client.java @@ -0,0 +1,16 @@ +package observer.before2; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + MinMaxView minMaxView = new MinMaxView(scoreRecord) ; + + scoreRecord.setMinMaxView(minMaxView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before2/MinMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before2/MinMaxView.java new file mode 100644 index 000000000..c837e8a0a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before2/MinMaxView.java @@ -0,0 +1,22 @@ +package observer.before2; + +import java.util.Collections; +import java.util.List; + +public class MinMaxView { + private ScoreRecord scoreRecord ; + + public MinMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayStatistics(record); + } + private void displayStatistics(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before2/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/before2/ScoreRecord.java new file mode 100644 index 000000000..9db7fb4c8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before2/ScoreRecord.java @@ -0,0 +1,21 @@ +package observer.before2; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord { + private List scores = new ArrayList() ; + private MinMaxView minMaxView ; + + public void setMinMaxView(MinMaxView minMaxView) { + this.minMaxView = minMaxView ; + } + public void addScore(int score) { + scores.add(score) ; + + minMaxView.update() ; + } + public List getScoreRecord() { + return scores ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before3/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/before3/Client.java new file mode 100644 index 000000000..238f6e5a8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before3/Client.java @@ -0,0 +1,20 @@ +package observer.before3; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + DataSheetView dataSheetView3 = new DataSheetView(scoreRecord, 3) ; + DataSheetView dataSheetView5 = new DataSheetView(scoreRecord, 5) ; + MainMaxView minMaxView = new MainMaxView(scoreRecord) ; + + scoreRecord.addDataSheetView(dataSheetView3) ; + scoreRecord.addDataSheetView(dataSheetView5) ; + scoreRecord.setMinMaxView(minMaxView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before3/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before3/DataSheetView.java new file mode 100644 index 000000000..cd4bbe561 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before3/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.before3; + +import java.util.List; + +public class DataSheetView { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before3/MainMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before3/MainMaxView.java new file mode 100644 index 000000000..6d0e380a1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before3/MainMaxView.java @@ -0,0 +1,22 @@ +package observer.before3; + +import java.util.Collections; +import java.util.List; + +public class MainMaxView { + private ScoreRecord scoreRecord ; + + public MainMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayMinMax(record); + } + private void displayMinMax(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before3/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/before3/ScoreRecord.java new file mode 100644 index 000000000..59cbb33ca --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before3/ScoreRecord.java @@ -0,0 +1,27 @@ +package observer.before3; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord { + private List scores = new ArrayList() ; + private List dataSheetViews = new ArrayList() ; + private MainMaxView minMaxView ; + + public void addDataSheetView(DataSheetView dataSheetView) { + dataSheetViews.add(dataSheetView) ; + } + + public void setMinMaxView(MainMaxView minMaxView) { + this.minMaxView = minMaxView ; + } + public void addScore(int score) { + scores.add(score) ; + for ( DataSheetView dataSheetView: dataSheetViews ) + dataSheetView.update() ; + minMaxView.update() ; + } + public List getScoreRecord() { + return scores ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before4/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/before4/Client.java new file mode 100644 index 000000000..6edf68131 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before4/Client.java @@ -0,0 +1,26 @@ +package observer.before4; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + + DataSheetView dataSheetView3 = new DataSheetView(scoreRecord, 3) ; + scoreRecord.addDataSheetView(dataSheetView3) ; + + for (int index = 1 ; index <= 3 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + + MainMaxView statisticsView = new MainMaxView(scoreRecord) ; + scoreRecord.setMinMaxView(statisticsView) ; + + for (int index = 1 ; index <= 2 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before4/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before4/DataSheetView.java new file mode 100644 index 000000000..9697c32ea --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before4/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.before4; + +import java.util.List; + +public class DataSheetView { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before4/MainMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before4/MainMaxView.java new file mode 100644 index 000000000..70f2083d5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before4/MainMaxView.java @@ -0,0 +1,22 @@ +package observer.before4; + +import java.util.Collections; +import java.util.List; + +public class MainMaxView { + private ScoreRecord scoreRecord ; + + public MainMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayMinMax(record); + } + private void displayMinMax(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before4/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/before4/ScoreRecord.java new file mode 100644 index 000000000..7522e2162 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before4/ScoreRecord.java @@ -0,0 +1,30 @@ +package observer.before4; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord { + private List scores = new ArrayList() ; + private List dataSheetViews = new ArrayList() ; + private MainMaxView statisticsView ; + + public void addScore(int score) { + scores.add(score) ; + + for ( DataSheetView dataSheetView: dataSheetViews ) + dataSheetView.update() ; + statisticsView.update() ; + } + + public List getScoreRecord() { + return scores ; + } + + public void addDataSheetView(DataSheetView dataSheetView) { + dataSheetViews.add(dataSheetView) ; + } + + public void setMinMaxView(MainMaxView statisticsView) { + this.statisticsView = statisticsView ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Battery.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Battery.java new file mode 100644 index 000000000..a8e8c6e4a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Battery.java @@ -0,0 +1,10 @@ +package observer.example.battery; + +public class Battery extends Subject { + private int level = 100 ; + public void consume(int amount) { + level -= amount ; + notifyObservers() ; + } + public int getLevel() { return level ; } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/BatteryLevelDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/BatteryLevelDisplay.java new file mode 100644 index 000000000..50ce8607c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/BatteryLevelDisplay.java @@ -0,0 +1,12 @@ +package observer.example.battery; + +public class BatteryLevelDisplay implements Observer { + private Battery battery ; + public BatteryLevelDisplay(Battery battery) { + this.battery = battery ; + } + public void update() { + int level = battery.getLevel() ; + System.out.println("Level: " + level) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Client.java new file mode 100644 index 000000000..c40e65853 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Client.java @@ -0,0 +1,17 @@ +package observer.example.battery; + +public class Client { + public static void main(String[] args) { + Battery battery = new Battery() ; + + Observer batteryDisplay = new BatteryLevelDisplay(battery) ; + Observer lowBatteryWarning = new LowBatteryWarning(battery) ; + + battery.attach(batteryDisplay) ; + battery.attach(lowBatteryWarning) ; + + battery.consume(20) ; + battery.consume(50) ; + battery.consume(10) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/LowBatteryWarning.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/LowBatteryWarning.java new file mode 100644 index 000000000..dddfec6a1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/LowBatteryWarning.java @@ -0,0 +1,14 @@ +package observer.example.battery; + +public class LowBatteryWarning implements Observer { + private static final int LOW_BATTERY = 30 ; + private Battery battery ; + public LowBatteryWarning(Battery battery) { + this.battery = battery ; + } + public void update() { + int level = battery.getLevel() ; + if ( level < LOW_BATTERY ) + System.out.println(" Low Battery : " + level + " Compared with " + LOW_BATTERY) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Observer.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Observer.java new file mode 100644 index 000000000..c78c0139a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Observer.java @@ -0,0 +1,5 @@ +package observer.example.battery; + +public interface Observer { + abstract public void update() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Subject.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Subject.java new file mode 100644 index 000000000..6184c2180 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Subject.java @@ -0,0 +1,18 @@ +package observer.example.battery; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Subject { + private List observers = new ArrayList() ; + + public void attach(Observer observer) { + observers.add(observer) ; + } + public void detach(Observer observer) { + observers.remove(observer) ; + } + public void notifyObservers() { + for ( Observer o : observers ) o.update() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Battery.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Battery.java new file mode 100644 index 000000000..be92526ea --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Battery.java @@ -0,0 +1,21 @@ +package observer.example.battery.before; + +public class Battery { + private int level = 100 ; + private BatteryLevelDisplay display ; + private LowBatteryWarning warning ; + + public void setDisplay(BatteryLevelDisplay display) { + this.display = display ; + } + public void setWarning(LowBatteryWarning warning) { + this.warning = warning ; + } + public void consume(int amount) { + level -= amount ; + + display.update() ; + warning.update() ; + } + public int getLevel() { return level ; } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/BatteryLevelDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/BatteryLevelDisplay.java new file mode 100644 index 000000000..ac4c28aa7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/BatteryLevelDisplay.java @@ -0,0 +1,12 @@ +package observer.example.battery.before; + +public class BatteryLevelDisplay { + private Battery battery ; + public BatteryLevelDisplay(Battery battery) { + this.battery = battery ; + } + public void update() { + int level = battery.getLevel() ; + System.out.println("Level: " + level) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Client.java new file mode 100644 index 000000000..e8200b049 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Client.java @@ -0,0 +1,17 @@ +package observer.example.battery.before; + +public class Client { + public static void main(String[] args) { + Battery battery = new Battery() ; + + BatteryLevelDisplay batteryDisplay = new BatteryLevelDisplay(battery) ; + LowBatteryWarning lowBatteryWarning = new LowBatteryWarning(battery) ; + + battery.setDisplay(batteryDisplay) ; + battery.setWarning(lowBatteryWarning) ; + + battery.consume(20) ; + battery.consume(50) ; + battery.consume(10) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/LowBatteryWarning.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/LowBatteryWarning.java new file mode 100644 index 000000000..af0bc6023 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/LowBatteryWarning.java @@ -0,0 +1,14 @@ +package observer.example.battery.before; + +public class LowBatteryWarning { + private static final int LOW_BATTERY = 30 ; + private Battery battery ; + public LowBatteryWarning(Battery battery) { + this.battery = battery ; + } + public void update() { + int level = battery.getLevel() ; + if ( level < LOW_BATTERY ) + System.out.println(" Low Battery : " + level + " Compared with " + LOW_BATTERY) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Client.java new file mode 100644 index 000000000..8b7163f5d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Client.java @@ -0,0 +1,20 @@ +package observer.example.elevatorcontroller; + +public class Client { + public static void main(String[] args) { + ElevatorController controller = new ElevatorController() ; + + Observer elevatorDisplay = new ElevatorDisplay(controller) ; + Observer voiceNotice = new VoiceNotice(controller) ; + Observer floorDisplay = new FloorDisplay(controller) ; + Observer controlRoomDisplay = new ControlRoomDisplay(controller) ; + + controller.attach(elevatorDisplay) ; + controller.attach(voiceNotice) ; + controller.attach(floorDisplay) ; + controller.attach(controlRoomDisplay) ; + + controller.gotoFloor(5) ; + controller.gotoFloor(10) ; + } +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ControlRoomDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ControlRoomDisplay.java new file mode 100644 index 000000000..d42b5a963 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ControlRoomDisplay.java @@ -0,0 +1,12 @@ +package observer.example.elevatorcontroller; + +public class ControlRoomDisplay implements Observer { + private ElevatorController controller ; + public ControlRoomDisplay(ElevatorController controller) { + this.controller = controller ; + } + public void update() { + int curFloor = controller.getCurFloor() ; + System.out.println("Control Room: " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorController.java new file mode 100644 index 000000000..98f9b3ff8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorController.java @@ -0,0 +1,12 @@ +package observer.example.elevatorcontroller; + +public class ElevatorController extends Subject { + private int curFloor = 1; + public void gotoFloor(int destination) { + curFloor = destination ; + notifyObservers() ; + } + public int getCurFloor() { + return curFloor ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorDisplay.java new file mode 100644 index 000000000..81d1c8e44 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorDisplay.java @@ -0,0 +1,12 @@ +package observer.example.elevatorcontroller; + +public class ElevatorDisplay implements Observer { + private ElevatorController controller ; + public ElevatorDisplay(ElevatorController controller) { + this.controller = controller ; + } + public void update() { + int curFloor = controller.getCurFloor() ; + System.out.println("Elevator Display: " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/FloorDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/FloorDisplay.java new file mode 100644 index 000000000..073d3fe1a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/FloorDisplay.java @@ -0,0 +1,12 @@ +package observer.example.elevatorcontroller; + +public class FloorDisplay implements Observer { + private ElevatorController controller ; + public FloorDisplay(ElevatorController controller) { + this.controller = controller ; + } + public void update() { + int curFloor = controller.getCurFloor() ; + System.out.println("Floor Display: " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Observer.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Observer.java new file mode 100644 index 000000000..c0f4dc36b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Observer.java @@ -0,0 +1,5 @@ +package observer.example.elevatorcontroller; + +public interface Observer { + abstract public void update() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Subject.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Subject.java new file mode 100644 index 000000000..b66e92594 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Subject.java @@ -0,0 +1,18 @@ +package observer.example.elevatorcontroller; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Subject { + private List observers = new ArrayList() ; + + public void attach(Observer observer) { + observers.add(observer) ; + } + public void detach(Observer observer) { + observers.remove(observer) ; + } + public void notifyObservers() { + for ( Observer o : observers ) o.update() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/VoiceNotice.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/VoiceNotice.java new file mode 100644 index 000000000..54c16d651 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/VoiceNotice.java @@ -0,0 +1,13 @@ +package observer.example.elevatorcontroller; + +public class VoiceNotice implements Observer { + private ElevatorController controller ; + public VoiceNotice(ElevatorController controller) { + this.controller = controller ; + } + public void update() { + int curFloor = controller.getCurFloor() ; + System.out.println("Voice Notice: " + curFloor) ; + + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Client.java new file mode 100644 index 000000000..e5ec6c649 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Client.java @@ -0,0 +1,9 @@ +package templatemethod.after1; + +public class Client { + public static void main(String[] args) { + Door door = new Door() ; + LGMotor lgMotor = new LGMotor(door) ; + lgMotor.move(Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Direction.java new file mode 100644 index 000000000..09e1f5ba9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Direction.java @@ -0,0 +1,3 @@ +package templatemethod.after1; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Door.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Door.java new file mode 100644 index 000000000..3e299ba1c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Door.java @@ -0,0 +1,17 @@ +package templatemethod.after1; + +public class Door { + private DoorStatus doorStatus ; + public Door() { + doorStatus = DoorStatus.CLOSED ; + } + public DoorStatus getDoorStatus() { + return doorStatus ; + } + public void close() { + doorStatus = DoorStatus.CLOSED ; + } + public void open() { + doorStatus = DoorStatus.OPENED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/DoorStatus.java new file mode 100644 index 000000000..265986edd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/DoorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.after1; + +public enum DoorStatus { CLOSED, OPENED } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/HyundaiMotor.java new file mode 100644 index 000000000..714729c27 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/HyundaiMotor.java @@ -0,0 +1,10 @@ +package templatemethod.after1; + +public class HyundaiMotor extends Motor { + public HyundaiMotor(Door door) { + super(door) ; + } + protected void moveMotor(Direction direction) { + // Hyundai Motor Ų. + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/LGMotor.java new file mode 100644 index 000000000..3f11b5fa6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/LGMotor.java @@ -0,0 +1,10 @@ +package templatemethod.after1; + +public class LGMotor extends Motor { + public LGMotor(Door door) { + super(door) ; + } + protected void moveMotor(Direction direction) { + // LG Motor Ų. + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Motor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Motor.java new file mode 100644 index 000000000..e9ef70de1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Motor.java @@ -0,0 +1,30 @@ +package templatemethod.after1; + +public abstract class Motor { + private Door door ; + private MotorStatus motorStatus ; + + public Motor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } + protected abstract void moveMotor(Direction direction) ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/MotorStatus.java new file mode 100644 index 000000000..04a228f4f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/MotorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.after1; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Client.java new file mode 100644 index 000000000..51dc86569 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Client.java @@ -0,0 +1,9 @@ +package templatemethod.before1; + +public class Client { + public static void main(String[] args) { + Door door = new Door() ; + HyundaiMotor hyundaiMotor = new HyundaiMotor(door) ; + hyundaiMotor.move(Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Direction.java new file mode 100644 index 000000000..96b513a5d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Direction.java @@ -0,0 +1,3 @@ +package templatemethod.before1; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Door.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Door.java new file mode 100644 index 000000000..1829072ec --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Door.java @@ -0,0 +1,17 @@ +package templatemethod.before1; + +public class Door { + private DoorStatus doorStatus ; + public Door() { + doorStatus = DoorStatus.CLOSED ; + } + public DoorStatus getDoorStatus() { + return doorStatus ; + } + public void close() { + doorStatus = DoorStatus.CLOSED ; + } + public void open() { + doorStatus = DoorStatus.OPENED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/DoorStatus.java new file mode 100644 index 000000000..ab11bef51 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/DoorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before1; + +public enum DoorStatus { CLOSED, OPENED } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/HyundaiMotor.java new file mode 100644 index 000000000..2167233ff --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/HyundaiMotor.java @@ -0,0 +1,32 @@ +package templatemethod.before1; + +public class HyundaiMotor { + private Door door ; + private MotorStatus motorStatus ; + + public HyundaiMotor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + private void moveHyundaiMotor(Direction direction) { + // Hyundai Motor Ų. + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveHyundaiMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/MotorStatus.java new file mode 100644 index 000000000..a2a79da29 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/MotorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before1; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Client.java new file mode 100644 index 000000000..3a322a5eb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Client.java @@ -0,0 +1,9 @@ +package templatemethod.before2; + +public class Client { + public static void main(String[] args) { + Door door = new Door() ; + LGMotor lgMotor = new LGMotor(door) ; + lgMotor.move(Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Direction.java new file mode 100644 index 000000000..6b0763387 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Direction.java @@ -0,0 +1,3 @@ +package templatemethod.before2; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Door.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Door.java new file mode 100644 index 000000000..64ce5b69b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Door.java @@ -0,0 +1,17 @@ +package templatemethod.before2; + +public class Door { + private DoorStatus doorStatus ; + public Door() { + doorStatus = DoorStatus.CLOSED ; + } + public DoorStatus getDoorStatus() { + return doorStatus ; + } + public void close() { + doorStatus = DoorStatus.CLOSED ; + } + public void open() { + doorStatus = DoorStatus.OPENED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/DoorStatus.java new file mode 100644 index 000000000..c84ad12a8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/DoorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before2; + +public enum DoorStatus { CLOSED, OPENED } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/HyundaiMotor.java new file mode 100644 index 000000000..b6ec1f757 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/HyundaiMotor.java @@ -0,0 +1,32 @@ +package templatemethod.before2; + +public class HyundaiMotor { + private Door door ; + private MotorStatus motorStatus ; + + public HyundaiMotor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + private void moveHyundaiMotor(Direction direction) { + // Hyundai Motor Ų. + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveHyundaiMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/LGMotor.java new file mode 100644 index 000000000..b70a31368 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/LGMotor.java @@ -0,0 +1,32 @@ +package templatemethod.before2; + +public class LGMotor { + private Door door ; + private MotorStatus motorStatus ; + + public LGMotor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + private void moveLGMotor(Direction direction) { + // LG Motor Ų. + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveLGMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/MotorStatus.java new file mode 100644 index 000000000..db72a2bcd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/MotorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before2; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Client.java new file mode 100644 index 000000000..cb311fbd7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Client.java @@ -0,0 +1,9 @@ +package templatemethod.before3; + +public class Client { + public static void main(String[] args) { + Door door = new Door() ; + LGMotor lgMotor = new LGMotor(door) ; + lgMotor.move(Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Direction.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Direction.java new file mode 100644 index 000000000..68c664553 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Direction.java @@ -0,0 +1,3 @@ +package templatemethod.before3; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Door.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Door.java new file mode 100644 index 000000000..520b17b69 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Door.java @@ -0,0 +1,17 @@ +package templatemethod.before3; + +public class Door { + private DoorStatus doorStatus ; + public Door() { + doorStatus = DoorStatus.CLOSED ; + } + public DoorStatus getDoorStatus() { + return doorStatus ; + } + public void close() { + doorStatus = DoorStatus.CLOSED ; + } + public void open() { + doorStatus = DoorStatus.OPENED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/DoorStatus.java new file mode 100644 index 000000000..f96e7ab98 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/DoorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before3; + +public enum DoorStatus { CLOSED, OPENED } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/HyundaiMotor.java new file mode 100644 index 000000000..3ea400635 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/HyundaiMotor.java @@ -0,0 +1,22 @@ +package templatemethod.before3; + +public class HyundaiMotor extends Motor { + public HyundaiMotor(Door door) { + super(door) ; + } + private void moveHyundaiMotor(Direction direction) { + // Hyundai Motor Ų. + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveHyundaiMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/LGMotor.java new file mode 100644 index 000000000..6b27f1813 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/LGMotor.java @@ -0,0 +1,22 @@ +package templatemethod.before3; + +public class LGMotor extends Motor { + public LGMotor(Door door) { + super(door) ; + } + private void moveLGMotor(Direction direction) { + // LG Motor Ų. + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveLGMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Motor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Motor.java new file mode 100644 index 000000000..c5d0282bd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Motor.java @@ -0,0 +1,17 @@ +package templatemethod.before3; + +public abstract class Motor { + protected Door door ; + private MotorStatus motorStatus ; + + public Motor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + protected void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/MotorStatus.java new file mode 100644 index 000000000..d589ba4e8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/MotorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before3; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Client.java new file mode 100644 index 000000000..8710cd396 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Client.java @@ -0,0 +1,23 @@ +package templatemethod.example.reportgenerator; + +import java.util.ArrayList; +import java.util.List; + +public class Client { + + public static void main(String[] args) { + List customers = new ArrayList() ; + + customers.add(new Customer("ȫ浿", 150)) ; + customers.add(new Customer("", 350)) ; + customers.add(new Customer("", 50)) ; + customers.add(new Customer("Ǹ", 450)) ; + customers.add(new Customer("ְ", 550)) ; + + ReportGenerator simpleGenerator = new SimpleReportGenerator() ; + System.out.println(simpleGenerator.generate(customers)) ; + + ReportGenerator complexGenerator = new ComplexReportGenerator() ; + System.out.println(complexGenerator.generate(customers)) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ComplexReportGenerator.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ComplexReportGenerator.java new file mode 100644 index 000000000..41bb9da72 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ComplexReportGenerator.java @@ -0,0 +1,23 @@ +package templatemethod.example.reportgenerator; + +import java.util.List; + +public class ComplexReportGenerator extends ReportGenerator { + protected boolean customerReportCondition(Customer customer) { + return customer.getPoint() >= 100 ; + } + protected String getReportHeader(List customers) { + return String.format(" : %d Դϴ\n", customers.size()) ; + } + + protected String getReportForCustomer(Customer customer) { + return String.format("%d: %s\n", customer.getPoint(), customer.getName()) ; + } + protected String getReportFooter(List customers) { + int totalPoint = 0 ; + for ( Customer customer: customers) + totalPoint += customer.getPoint() ; + + return String.format(" հ: %d", totalPoint) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Customer.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Customer.java new file mode 100644 index 000000000..8b0d24e2b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Customer.java @@ -0,0 +1,23 @@ +package templatemethod.example.reportgenerator; + +public class Customer { + private String name ; + private int point ; + + public Customer(String name, int point) { + this.setName(name) ; + this.setPoint(point) ; + } + public int getPoint() { + return point; + } + public void setPoint(int point) { + this.point = point; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ReportGenerator.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ReportGenerator.java new file mode 100644 index 000000000..d96e709f2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ReportGenerator.java @@ -0,0 +1,32 @@ +package templatemethod.example.reportgenerator; + +import java.util.ArrayList; +import java.util.List; + +public abstract class ReportGenerator { + public String generate(List customers) { + List selectedCustomers = select(customers) ; + + String report = getReportHeader(selectedCustomers) ; + + for ( int i = 0 ; i < selectedCustomers.size() ; i ++ ) { + Customer customer = selectedCustomers.get(i) ; + report += getReportForCustomer(customer) ; + } + report += getReportFooter(selectedCustomers) ; + + return report ; + } + + protected List select(List customers) { + List selected = new ArrayList() ; + for ( Customer customer: customers ) + if ( customerReportCondition(customer) ) selected.add(customer) ; + return selected; + } + + protected abstract boolean customerReportCondition(Customer customer) ; + protected abstract String getReportHeader(List customers) ; + protected abstract String getReportForCustomer(Customer customer) ; + protected abstract String getReportFooter(List customers) ; +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/SimpleReportGenerator.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/SimpleReportGenerator.java new file mode 100644 index 000000000..bd002627d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/SimpleReportGenerator.java @@ -0,0 +1,18 @@ +package templatemethod.example.reportgenerator; + +import java.util.List; + +public class SimpleReportGenerator extends ReportGenerator { + protected boolean customerReportCondition(Customer customer) { + return true ; + } + protected String getReportHeader(List customers) { + return String.format(" : %d \n", customers.size()) ; + } + protected String getReportForCustomer(Customer customer) { + return String.format("%s: %d\n", customer.getName(), customer.getPoint()) ; + } + protected String getReportFooter(List customers) { + return "" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Client.java new file mode 100644 index 000000000..ca9cbcbed --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Client.java @@ -0,0 +1,20 @@ +package templatemethod.example.reportgenerator.before; + +import java.util.ArrayList; +import java.util.List; + +public class Client { + + public static void main(String[] args) { + List customers = new ArrayList() ; + + customers.add(new Customer("ȫ浿", 150)) ; + customers.add(new Customer("", 350)) ; + customers.add(new Customer("", 50)) ; + customers.add(new Customer("Ǹ", 450)) ; + customers.add(new Customer("ְ", 550)) ; + + SimpleReportGenerator simpleGenerator = new SimpleReportGenerator() ; + System.out.println(simpleGenerator.generate(customers)) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Customer.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Customer.java new file mode 100644 index 000000000..dfeaacdac --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Customer.java @@ -0,0 +1,23 @@ +package templatemethod.example.reportgenerator.before; + +public class Customer { + private String name ; + private int point ; + + public Customer(String name, int point) { + this.setName(name) ; + this.setPoint(point) ; + } + public int getPoint() { + return point; + } + public void setPoint(int point) { + this.point = point; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/SimpleReportGenerator.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/SimpleReportGenerator.java new file mode 100644 index 000000000..de4495b4a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/SimpleReportGenerator.java @@ -0,0 +1,16 @@ +package templatemethod.example.reportgenerator.before; + +import java.util.List; + +public class SimpleReportGenerator { + public String generate(List customers) { + + String report = String.format(" : %d \n", customers.size()) ; + + for ( int i = 0 ; i < customers.size() ; i ++ ) { + Customer customer = customers.get(i) ; + report += String.format("%s: %d\n", customer.getName(), customer.getPoint()) ; + } + return report ; + } +} From 5a1b78d35b0816a5a8b73edddbced32e0f2d8cb0 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Tue, 9 May 2023 02:15:58 +0900 Subject: [PATCH 4/4] =?UTF-8?q?SOLID=20=EC=9B=90=EC=B9=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oop-in-spring/practice/solid/README.md | 64 ++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 oop-in-spring/practice/solid/README.md diff --git a/oop-in-spring/practice/solid/README.md b/oop-in-spring/practice/solid/README.md new file mode 100644 index 000000000..12ba86428 --- /dev/null +++ b/oop-in-spring/practice/solid/README.md @@ -0,0 +1,64 @@ +# 내가 이해한 SOLID 원칙 +## 🤔 SOLID 원칙이란 무엇인가요? +- 어떻게 하면, 객체지향 프로그래밍할 때, 객체 지향의 4대 특성인 `캡슐화`, `상속`, `추상화`, `다형성`을 잘 활용해서, 응집력을 높이고 결합력을 낮추는지에 대해 구체적인 방법에 대해 기술해 놓은 원칙이다. + +## 🤷‍♀️ SOLID 원칙이 왜 중요한가요? 또는 왜 사용하나요? +- 이 원칙을 무조건적으로 지켜야 하는 것은 아니다. +- 그런데, 만약 이 원칙에 준수하여 `자바` 프로그래밍을 한다면, +- 객체 지향이 주는 장점인 `유연성`, `재사용성`, `유지보수성` 있는 코드를 작성할 수 있게 된다. +- 따라서, 자바라는 객체 지향 언어를 이용해, 객제 지향 프로그램을 `올바르게` 설계해 나갈 수 있기 때문에, 많은 개발자들이 이 원칙을 사용하고 중요하다고 생각하는 것이다. + +> cf. 디자인 패턴들도 이 원칙에 입각하여 만들어진 것이다. + +## 🧐 SOLID 원칙에는 어떤 것들이 있나요? +> 1. SRP(Single Responsibility Principle, 단일 책임 원칙) : `캡슐화`를 활용해서 객체에 포함된 정보의 손상 및 오용을 방지하여, `유지보수성`을 확보할 수 있는 원칙 +> 2. OCP(Open Closed Principle, 개방 폐쇄 원칙) : `추상화`를 통해 `다형성`을 활용함으로써, 확장에 따른 클래스 수정은 최소화하여, 코드의 `유지보수성`을 확보할 수 있는 원칙 +> 3. LSP(Listov Substitution Principle, 리스코프 치환 원칙) : `다형성`을 활용해서 코드의 `유지보수성`을 확보할 수 있는 원칙 +> 4. ISP(Interface Segregation Principle): 인터페이스 분리 원칙 : `캡슐화`를 활용해서 코드의 `유지보수성`을 확보할 수 있는 원칙 +> 5. DIP(Dependency Inversion Principle, 의존 역전 원칙) : `추상화`를 활용해서 코드의 `유연성` 및 `유지보수성`을 확보할 수 있는 원칙 + +### 🎈[SOLID 원칙 1] SRP(Single Responsibility Principle): 단일 책임 원칙 +> _"어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다." - 로버트 C. 마틴_ + + + +### 🎈[SOLID 원칙 2] OCP(Open Closed Principle): 개방 폐쇄 원칙 +> _소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 변경에 대해서는 닫혀 있어야 한다. - 로버트 C. 마틴_ +> +> -> 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다. + +- 기능 추가 + + + +### 🎈[SOLID 원칙 3] LSP(Listov Substitution Principle): 리스코프 치환 원칙 +> _서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다. - 로버트 C. 마틴_ + +→ 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없어야 한다. + +- 기능 추가 +- + + +### 🎈[SOLID 원칙 4] ISP(Interface Segregation Principle): 인터페이스 분리 원칙 +> _클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다. - 로버트 C. 마틴_ + + +### 🎈[SOLID 원칙 5] DIP(Dependency Inversion Principle): 의존 역전 원칙 +> _고차원 모듈은 저차원 모듈에 의존하면 안 된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다. 추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화된 것에 의존해야 한다. - 로버트 C. 마틴_ + +#### DIP 위반한 사례 +- + +#### Java 코드에서 DIP가 적용된 사례 +- ArrayList, Set 클래스가 Collection 인터페이스에 의존하고 있는 것을 예로 들 수 있다. +- 보통 ArrayList 나 HashSet 자료형을 인스턴스화 할때 변수 타입을 ArrayList, HashSet 같은 구체 클래스 타입으로 선언하는 것이 아닌, List 나 Set 같은 인터페이스 타입으로 선언한다. +- 이것도 DIP 원칙을 따른 코드 선언이라고 봐도 무방하다. + + +#### 내가 경험 중 DIP 적용된 기술을 사용해 본 경험 +- JDBC는 개발자가 어떤 DB를 사용하던지 동일한 인터페이스를 통해 DB에 데이터를 읽고 쓸 수 있게 해준다. +- 그런데, 만약 JDBC가 DIP를 적용되지 않아, 구체적인 DB에 API가 의존했다면, DB를 H2 -> MySQL로 바꿨을 때, 엄청난 수정 비용이 들 것이다. + +# Reference +- [인파 블로거 - [OOP] 💠 객체 지향 설계의 5가지 원칙 - S.O.L.I.D](https://inpa.tistory.com/entry/OOP-%F0%9F%92%A0-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%EC%84%A4%EA%B3%84%EC%9D%98-5%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99-SOLID)