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 000000000..ba14f2068
Binary files /dev/null and b/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Course.class differ
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 000000000..368ff7f08
Binary files /dev/null and b/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Main.class differ
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 000000000..cfe7348d9
Binary files /dev/null and b/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Student.class differ
diff --git a/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Transcript.class b/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Transcript.class
new file mode 100644
index 000000000..6059ba176
Binary files /dev/null and b/java-oop-design-pattern/ch1-Student-Transcript-Course/bin/Transcript.class differ
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 000000000..c32b87c76
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/CartForSongs.class" differ
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 000000000..8e9bab943
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/DiscountedMode.class" differ
diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/Main.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/Main.class"
new file mode 100644
index 000000000..1843c3a52
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/Main.class" differ
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 000000000..d10429395
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/NonDiscounted.class" differ
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 000000000..0c291cdc4
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/OnSale.class" differ
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 000000000..0e75e7e98
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/Song.class" differ
diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/TodayEvent.class" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/TodayEvent.class"
new file mode 100644
index 000000000..078be3022
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/bin/TodayEvent.class" differ
diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/CartForSongs.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/CartForSongs.java"
new file mode 100644
index 000000000..0bda08414
--- /dev/null
+++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344-\353\213\265/src/CartForSongs.java"
@@ -0,0 +1,26 @@
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+public class CartForSongs {
+
+ ArrayList 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 000000000..6706c1598
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/CartForSongs.class" differ
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 000000000..10e199016
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/Main.class" differ
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 000000000..77ef8ce9e
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/bin/Song.class" differ
diff --git "a/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/CartForSongs.java" "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/CartForSongs.java"
new file mode 100644
index 000000000..702cd8875
--- /dev/null
+++ "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2344/src/CartForSongs.java"
@@ -0,0 +1,29 @@
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+public class CartForSongs {
+
+ ArrayList 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 000000000..29f7824cd
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/bin/Main.class" differ
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 000000000..ea67354c8
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2346/bin/Queue.class" differ
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 000000000..0f739d870
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/bin/Main.class" differ
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 000000000..8f49fc509
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\353\254\270\354\240\2347/bin/Queue.class" differ
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 000000000..6d58f1d9a
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/A.class" differ
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 000000000..1a78ba70d
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/A1.class" differ
diff --git "a/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/Main.class" "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/Main.class"
new file mode 100644
index 000000000..b3882e539
Binary files /dev/null and "b/java-oop-design-pattern/ch2-\354\262\264\355\201\254\355\217\254\354\235\270\355\212\270/bin/Main.class" differ
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 000000000..3f969d360
Binary files /dev/null and b/java-oop-design-pattern/ch3-DIP/bin/Kid.class differ
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 000000000..77bea8792
Binary files /dev/null and b/java-oop-design-pattern/ch3-DIP/bin/Lego.class differ
diff --git a/java-oop-design-pattern/ch3-DIP/bin/Main.class b/java-oop-design-pattern/ch3-DIP/bin/Main.class
new file mode 100644
index 000000000..ce45c1bd7
Binary files /dev/null and b/java-oop-design-pattern/ch3-DIP/bin/Main.class differ
diff --git a/java-oop-design-pattern/ch3-DIP/bin/Robot.class b/java-oop-design-pattern/ch3-DIP/bin/Robot.class
new file mode 100644
index 000000000..3369b8309
Binary files /dev/null and b/java-oop-design-pattern/ch3-DIP/bin/Robot.class differ
diff --git a/java-oop-design-pattern/ch3-DIP/bin/Toy.class b/java-oop-design-pattern/ch3-DIP/bin/Toy.class
new file mode 100644
index 000000000..57d413560
Binary files /dev/null and b/java-oop-design-pattern/ch3-DIP/bin/Toy.class differ
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 000000000..14a11bc7e
Binary files /dev/null and b/java-oop-design-pattern/ch3-LSP/bin/Bag.class differ
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 000000000..fc38b7187
Binary files /dev/null and b/java-oop-design-pattern/ch3-LSP/bin/DiscountedBag.class differ
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 000000000..e454a3f40
Binary files /dev/null and b/java-oop-design-pattern/ch3-LSP/bin/Main.class differ
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 000000000..50ed27e1a
Binary files /dev/null and "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/DefaultStrategy.class" differ
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 000000000..4fcdd6ac5
Binary files /dev/null and "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/Main.class" differ
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 000000000..8e26856f2
Binary files /dev/null and "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayCalculationStrategy.class" differ
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 000000000..dac34045f
Binary files /dev/null and "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayCalculator.class" differ
diff --git "a/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayGUI.class" "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayGUI.class"
new file mode 100644
index 000000000..151169b78
Binary files /dev/null and "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410-\353\213\265/bin/PayGUI.class" differ
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 000000000..da95d7c19
Binary files /dev/null and "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/bin/CalculatePayMachine.class" differ
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 000000000..e83d8976b
Binary files /dev/null and "b/java-oop-design-pattern/ch3-\353\254\270\354\240\23410/bin/Main.class" differ
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 000000000..0fcea0b68
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Ball.class" differ
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 000000000..2cb9c0efa
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/BallFrame.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/BlueDrawStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/BlueDrawStrategy.class"
new file mode 100644
index 000000000..fe95540bb
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/BlueDrawStrategy.class" differ
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 000000000..f80e80857
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Client.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DiagonalMoveStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DiagonalMoveStrategy.class"
new file mode 100644
index 000000000..157a6d851
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DiagonalMoveStrategy.class" differ
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 000000000..e0f6aaee2
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DirectionStrategy.class" differ
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 000000000..424df897f
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/DrawStrategy.class" differ
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 000000000..1b88b9f4d
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/Field.class" differ
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 000000000..67fd1ef11
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/HorizonalMoveStrategy.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/RedDrawStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/RedDrawStrategy.class"
new file mode 100644
index 000000000..5ebdc8bf2
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/RedDrawStrategy.class" differ
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 000000000..dcde0e8c2
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2344-Balls/bin/VerticalMoveStrategy.class" differ
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 000000000..fec8a011d
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run1.gif" differ
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 000000000..1f445e7d1
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run2.gif" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run3.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run3.gif"
new file mode 100644
index 000000000..399276680
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/run3.gif" differ
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 000000000..ee49e0f04
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Client.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/ImageService.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/ImageService.class"
new file mode 100644
index 000000000..d0e8b4052
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/ImageService.class" differ
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 000000000..8c6eea602
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/MovingStrategy.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running$Controller.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running$Controller.class"
new file mode 100644
index 000000000..b2bd07666
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running$Controller.class" differ
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 000000000..422d46185
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running$Field.class" differ
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 000000000..246b6af8a
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/Running.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/RunningStrategy.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/RunningStrategy.class"
new file mode 100644
index 000000000..0c9abe0e9
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/RunningStrategy.class" differ
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 000000000..206535638
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/StandingStrategy.class" differ
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 000000000..2f3b3eb24
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/running/WalkingStrategy.class" differ
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 000000000..d80437039
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/stand.gif" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/walk1.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/walk1.gif"
new file mode 100644
index 000000000..d80437039
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/walk1.gif" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/walk2.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/walk2.gif"
new file mode 100644
index 000000000..3b8c8070d
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/bin/walk2.gif" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run1.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run1.gif"
new file mode 100644
index 000000000..fec8a011d
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run1.gif" differ
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 000000000..1f445e7d1
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run2.gif" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run3.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run3.gif"
new file mode 100644
index 000000000..399276680
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/run3.gif" differ
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 000000000..d80437039
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/stand.gif" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/walk1.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/walk1.gif"
new file mode 100644
index 000000000..d80437039
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/walk1.gif" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/walk2.gif" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/walk2.gif"
new file mode 100644
index 000000000..3b8c8070d
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2345-running/src/walk2.gif" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.classpath" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.classpath"
new file mode 100644
index 000000000..fb565a588
--- /dev/null
+++ "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/.classpath"
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 000000000..f33408e44
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Client.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/HD108ReceiptPrinter.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/HD108ReceiptPrinter.class"
new file mode 100644
index 000000000..5abb87d46
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/HD108ReceiptPrinter.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Item.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Item.class"
new file mode 100644
index 000000000..041104f46
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Item.class" differ
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 000000000..263370cb4
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-SalePrinter/bin/Sale.class" differ
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 000000000..2633a5b38
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Client.class" differ
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 000000000..c4ff926d9
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/FakePrinter.class" differ
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 000000000..7a1fec64f
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/HD108ReceiptPrinter.class" differ
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 000000000..041104f46
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Item.class" differ
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 000000000..6e60b8ed5
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/ReceiptPrinter.class" differ
diff --git "a/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Sale.class" "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Sale.class"
new file mode 100644
index 000000000..b823aff35
Binary files /dev/null and "b/java-oop-design-pattern/ch5-\353\254\270\354\240\2346-\353\213\265-SalePrinter/bin/Sale.class" differ
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 000000000..60d3702b7
Binary files /dev/null and b/java-oop-design-pattern/ch6-printerManager/bin/Main.class differ
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 000000000..fbe2cb206
Binary files /dev/null and b/java-oop-design-pattern/ch6-printerManager/bin/Printer.class differ
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 000000000..ce23b24a9
Binary files /dev/null and b/java-oop-design-pattern/ch6-printerManager/bin/PrinterManager.class differ
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 000000000..10523d4f8
Binary files /dev/null and b/java-oop-design-pattern/ch6-printerManager/bin/UserThread.class differ
diff --git a/java-oop-design-pattern/ch6-printerManager/src/Main.java b/java-oop-design-pattern/ch6-printerManager/src/Main.java
new file mode 100644
index 000000000..b4647cbe7
--- /dev/null
+++ b/java-oop-design-pattern/ch6-printerManager/src/Main.java
@@ -0,0 +1,12 @@
+
+public class Main {
+ private static final int THREAD_NUM = 10;
+ public static void main(String[] args) {
+
+ UserThread[] user = new UserThread[THREAD_NUM];
+ for (int i = 0; i < THREAD_NUM; i++) {
+ user[i] = new UserThread((i + 1) + "-thread");
+ user[i].start();
+ }
+ }
+}
\ No newline at end of file
diff --git a/java-oop-design-pattern/ch6-printerManager/src/Printer.java b/java-oop-design-pattern/ch6-printerManager/src/Printer.java
new file mode 100644
index 000000000..a48ea33e1
--- /dev/null
+++ b/java-oop-design-pattern/ch6-printerManager/src/Printer.java
@@ -0,0 +1,26 @@
+import java.util.Random;
+
+
+public class Printer {
+
+ private boolean available=true;
+ public boolean isAvailable() {
+ return available;
+ }
+
+ public void print(String name) {
+ try {
+ Thread.sleep(new Random().nextInt(100));
+ System.out.println(name+" is using"+this.toString());
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ setAvailable(true);
+
+
+ }
+ public void setAvailable(boolean available) {
+ this.available = available;
+ }
+
+}
diff --git a/java-oop-design-pattern/ch6-printerManager/src/PrinterManager.java b/java-oop-design-pattern/ch6-printerManager/src/PrinterManager.java
new file mode 100644
index 000000000..37730fe21
--- /dev/null
+++ b/java-oop-design-pattern/ch6-printerManager/src/PrinterManager.java
@@ -0,0 +1,34 @@
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+
+
+public class PrinterManager {
+ private static PrinterManager mgr=null;
+ private ArrayList 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 000000000..76b7ae7c4
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/Main.class" differ
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/Server.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/Server.class"
new file mode 100644
index 000000000..6b39c7d23
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/Server.class" differ
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 000000000..e04598703
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-serverManager/bin/ServerFactory.class" differ
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 000000000..158ba5c2d
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/FakeServer.class" differ
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Main$1.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Main$1.class"
new file mode 100644
index 000000000..fab09dfa3
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Main$1.class" differ
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 000000000..c76f330ba
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Main.class" differ
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 000000000..2425908c6
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/RealServer.class" differ
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Server.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Server.class"
new file mode 100644
index 000000000..4431dfb61
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/Server.class" differ
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactory$1.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactory$1.class"
new file mode 100644
index 000000000..449db6fb1
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactory$1.class" differ
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 000000000..beb40c56d
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactory.class" differ
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 000000000..3a7737ab6
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactoryTests$1.class" differ
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactoryTests.class" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactoryTests.class"
new file mode 100644
index 000000000..4c02042c7
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerFactoryTests.class" differ
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 000000000..60d235b00
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/ServerProvider.class" differ
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 000000000..1d7ac7c38
Binary files /dev/null and "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/bin/UseServer.class" differ
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/FakeServer.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/FakeServer.java"
new file mode 100644
index 000000000..509c5a347
--- /dev/null
+++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/FakeServer.java"
@@ -0,0 +1,14 @@
+
+public class FakeServer implements Server {
+
+ StringBuffer result = new StringBuffer();
+
+ @Override
+ public void doSomeThing() {
+ result.append("invoked");
+ System.out.println("invoked");
+ }
+ public String getResult() {
+ return result.toString();
+ }
+}
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/Main.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/Main.java"
new file mode 100644
index 000000000..ca29b4cdf
--- /dev/null
+++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/Main.java"
@@ -0,0 +1,19 @@
+
+public class Main {
+ public static void main(String[] args) {
+
+ ServerFactory.setServer(new ServerProvider() {
+ public Server getServer() {
+ return new FakeServer();
+ }
+ });
+
+ //Server server = ServerFactory.getInstance().getServer();
+
+ UseServer use = new UseServer();
+ FakeServer server = (FakeServer) use.getServer();
+ use.doSomeThing();
+ // assertEquals("invoked", server.getResult());
+ // server.doSomeThing();
+ }
+}
\ No newline at end of file
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/RealServer.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/RealServer.java"
new file mode 100644
index 000000000..01042c787
--- /dev/null
+++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/RealServer.java"
@@ -0,0 +1,7 @@
+
+public class RealServer implements Server {
+ @Override
+ public void doSomeThing() {
+ System.out.println("Real Server");
+ }
+}
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/Server.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/Server.java"
new file mode 100644
index 000000000..d77d0aa29
--- /dev/null
+++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/Server.java"
@@ -0,0 +1,4 @@
+
+public interface Server {
+ public void doSomeThing();
+}
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerFactory.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerFactory.java"
new file mode 100644
index 000000000..2070055b1
--- /dev/null
+++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerFactory.java"
@@ -0,0 +1,17 @@
+
+public class ServerFactory implements ServerProvider {
+ private static ServerProvider serverProvider = new ServerProvider() {
+ public Server getServer() {
+ return new RealServer();
+ }
+ };
+ public static ServerProvider getInstance() {
+ return serverProvider;
+ }
+ public Server getServer() {
+ return serverProvider.getServer();
+ }
+ public static void setServer(ServerProvider sp) {
+ serverProvider = sp;
+ }
+}
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerFactoryTests.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerFactoryTests.java"
new file mode 100644
index 000000000..815c60a37
--- /dev/null
+++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerFactoryTests.java"
@@ -0,0 +1,18 @@
+import junit.framework.TestCase;
+
+public class ServerFactoryTests extends TestCase {
+ public void setUp() {
+ ServerFactory.setServer(new ServerProvider() {
+ public Server getServer() {
+ return new FakeServer();
+ }
+ });
+
+ }
+ public void testSomething() {
+ UseServer use = new UseServer();
+ use.doSomeThing();
+ FakeServer server = (FakeServer) use.getServer();
+ assertEquals("invoked", server.getResult());
+ }
+}
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerProvider.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerProvider.java"
new file mode 100644
index 000000000..6395dd1cb
--- /dev/null
+++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/ServerProvider.java"
@@ -0,0 +1,4 @@
+
+public interface ServerProvider {
+ public Server getServer();
+}
diff --git "a/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/UseServer.java" "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/UseServer.java"
new file mode 100644
index 000000000..a72e38532
--- /dev/null
+++ "b/java-oop-design-pattern/ch6-\353\254\270\354\240\2345-\353\213\265-serverManager/src/UseServer.java"
@@ -0,0 +1,13 @@
+
+public class UseServer {
+ private Server server;
+
+ public Server getServer() {
+ return server;
+ }
+ public void doSomeThing() {
+ ServerProvider factory = ServerFactory.getInstance();
+ server = factory.getServer();
+ server.doSomeThing();
+ }
+}
diff --git a/java-oop-design-pattern/ch7-3-bookRental/.classpath b/java-oop-design-pattern/ch7-3-bookRental/.classpath
new file mode 100644
index 000000000..fb565a588
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 000000000..afedd870f
Binary files /dev/null and b/java-oop-design-pattern/ch7-3-bookRental/bin/Book.class differ
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 000000000..9e383e3cc
Binary files /dev/null and b/java-oop-design-pattern/ch7-3-bookRental/bin/BookDiscountPricePolicy.class differ
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 000000000..d73be947f
Binary files /dev/null and b/java-oop-design-pattern/ch7-3-bookRental/bin/Client.class differ
diff --git a/java-oop-design-pattern/ch7-3-bookRental/bin/Member.class b/java-oop-design-pattern/ch7-3-bookRental/bin/Member.class
new file mode 100644
index 000000000..216eed006
Binary files /dev/null and b/java-oop-design-pattern/ch7-3-bookRental/bin/Member.class differ
diff --git a/java-oop-design-pattern/ch7-3-bookRental/bin/MemberDiscountPricePolicy.class b/java-oop-design-pattern/ch7-3-bookRental/bin/MemberDiscountPricePolicy.class
new file mode 100644
index 000000000..5b1c7e72f
Binary files /dev/null and b/java-oop-design-pattern/ch7-3-bookRental/bin/MemberDiscountPricePolicy.class differ
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 000000000..e71442650
Binary files /dev/null and b/java-oop-design-pattern/ch7-3-bookRental/bin/OrdinaryPricePolicy.class differ
diff --git a/java-oop-design-pattern/ch7-3-bookRental/bin/PricePolicy.class b/java-oop-design-pattern/ch7-3-bookRental/bin/PricePolicy.class
new file mode 100644
index 000000000..4381aea35
Binary files /dev/null and b/java-oop-design-pattern/ch7-3-bookRental/bin/PricePolicy.class differ
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 000000000..66fc5366e
Binary files /dev/null and b/java-oop-design-pattern/ch7-3-bookRental/bin/Rental.class differ
diff --git a/java-oop-design-pattern/ch7-3-bookRental/src/Book.java b/java-oop-design-pattern/ch7-3-bookRental/src/Book.java
new file mode 100644
index 000000000..f4e853424
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/src/Book.java
@@ -0,0 +1,25 @@
+
+
+public class Book {
+ private String name;
+ private int publishYear;
+ private int price;
+
+ public Book(String name, int publishYear, int price) {
+ this.name = name;
+ this.publishYear = publishYear;
+ this.price = price;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public int getPublishYear() {
+ return this.publishYear;
+ }
+
+ public int getPrice() {
+ return this.price;
+ }
+}
diff --git a/java-oop-design-pattern/ch7-3-bookRental/src/BookDiscountPricePolicy.java b/java-oop-design-pattern/ch7-3-bookRental/src/BookDiscountPricePolicy.java
new file mode 100644
index 000000000..c1344ec92
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/src/BookDiscountPricePolicy.java
@@ -0,0 +1,7 @@
+
+
+public class BookDiscountPricePolicy implements PricePolicy {
+ public int calcPrice(int price, int n) {
+ return (int) (price * n * 0.95);
+ }
+}
diff --git a/java-oop-design-pattern/ch7-3-bookRental/src/Client.java b/java-oop-design-pattern/ch7-3-bookRental/src/Client.java
new file mode 100644
index 000000000..76099e5ae
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/src/Client.java
@@ -0,0 +1,22 @@
+
+
+public class Client {
+ public static void main(String[] args) {
+ Member member1 = new Member("member1");
+ Member member2 = new Member("member2");
+
+ Book book1 = new Book("book1", 2005, 1000);
+ Book book2 = new Book("book2", 2004, 1200);
+ Book book3 = new Book("book3", 2001, 4300);
+
+ Rental rental1 = new Rental(member1, book2, new OrdinaryPricePolicy(), 2);
+ Rental rental2 = new Rental(member2, book1, new OrdinaryPricePolicy(), 3);
+ Rental rental3 = new Rental(member2, book3, new BookDiscountPricePolicy(), 4);
+ Rental rental4 = new Rental(member1, book2, new MemberDiscountPricePolicy(), 3);
+
+ System.out.println(rental1.getPrice());
+ System.out.println(rental2.getPrice());
+ System.out.println(rental3.getPrice());
+ System.out.println(rental4.getPrice());
+ }
+}
diff --git a/java-oop-design-pattern/ch7-3-bookRental/src/Member.java b/java-oop-design-pattern/ch7-3-bookRental/src/Member.java
new file mode 100644
index 000000000..f9c184ced
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/src/Member.java
@@ -0,0 +1,23 @@
+
+
+public class Member {
+ private String name;
+ private int accPrice;
+
+ public Member(String name) {
+ this.name = name;
+ accPrice = 0;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void addAccPrice(int price) {
+ accPrice += price;
+ }
+
+ public int getAccPrice() {
+ return accPrice;
+ }
+}
diff --git a/java-oop-design-pattern/ch7-3-bookRental/src/MemberDiscountPricePolicy.java b/java-oop-design-pattern/ch7-3-bookRental/src/MemberDiscountPricePolicy.java
new file mode 100644
index 000000000..145f4463e
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/src/MemberDiscountPricePolicy.java
@@ -0,0 +1,7 @@
+
+
+public class MemberDiscountPricePolicy implements PricePolicy {
+ public int calcPrice(int price, int n) {
+ return (int) (price * n * 0.9);
+ }
+}
diff --git a/java-oop-design-pattern/ch7-3-bookRental/src/OrdinaryPricePolicy.java b/java-oop-design-pattern/ch7-3-bookRental/src/OrdinaryPricePolicy.java
new file mode 100644
index 000000000..a1e6d80e8
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/src/OrdinaryPricePolicy.java
@@ -0,0 +1,7 @@
+
+
+public class OrdinaryPricePolicy implements PricePolicy {
+ public int calcPrice(int price, int n) {
+ return price * n;
+ }
+}
diff --git a/java-oop-design-pattern/ch7-3-bookRental/src/PricePolicy.java b/java-oop-design-pattern/ch7-3-bookRental/src/PricePolicy.java
new file mode 100644
index 000000000..f3ab68c2f
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/src/PricePolicy.java
@@ -0,0 +1,5 @@
+
+
+interface PricePolicy {
+ public int calcPrice(int price, int n);
+}
diff --git a/java-oop-design-pattern/ch7-3-bookRental/src/Rental.java b/java-oop-design-pattern/ch7-3-bookRental/src/Rental.java
new file mode 100644
index 000000000..734698057
--- /dev/null
+++ b/java-oop-design-pattern/ch7-3-bookRental/src/Rental.java
@@ -0,0 +1,20 @@
+
+
+public class Rental {
+ private Member member;
+ private Book book;
+ private PricePolicy pricePolicy;
+ int n;
+
+ public Rental(Member member, Book book, PricePolicy pricePolicy, int n) {
+ this.member = member;
+ this.book = book;
+ this.pricePolicy = pricePolicy;
+ this.n = n;
+ this.member.addAccPrice(pricePolicy.calcPrice(book.getPrice(), n));
+ }
+
+ public int getPrice() {
+ return pricePolicy.calcPrice(book.getPrice(), n);
+ }
+}
diff --git a/java-oop-design-pattern/ch7-light3states/.classpath b/java-oop-design-pattern/ch7-light3states/.classpath
new file mode 100644
index 000000000..fb565a588
--- /dev/null
+++ b/java-oop-design-pattern/ch7-light3states/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 000000000..8e3d7fde1
Binary files /dev/null and b/java-oop-design-pattern/ch7-light3states/bin/Client.class differ
diff --git a/java-oop-design-pattern/ch7-light3states/bin/Light.class b/java-oop-design-pattern/ch7-light3states/bin/Light.class
new file mode 100644
index 000000000..95cb85d57
Binary files /dev/null and b/java-oop-design-pattern/ch7-light3states/bin/Light.class differ
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 000000000..f09b2e3f5
Binary files /dev/null and b/java-oop-design-pattern/ch7-light3states/bin/LightState.class differ
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 000000000..cc2835cd9
Binary files /dev/null and b/java-oop-design-pattern/ch7-light3states/bin/OFF.class differ
diff --git a/java-oop-design-pattern/ch7-light3states/bin/ON.class b/java-oop-design-pattern/ch7-light3states/bin/ON.class
new file mode 100644
index 000000000..628a7e1bd
Binary files /dev/null and b/java-oop-design-pattern/ch7-light3states/bin/ON.class differ
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 000000000..0912ed303
Binary files /dev/null and b/java-oop-design-pattern/ch7-light3states/bin/SLEEPING.class differ
diff --git a/java-oop-design-pattern/ch7-light3states/src/Client.java b/java-oop-design-pattern/ch7-light3states/src/Client.java
new file mode 100644
index 000000000..977a782cc
--- /dev/null
+++ b/java-oop-design-pattern/ch7-light3states/src/Client.java
@@ -0,0 +1,11 @@
+
+public class Client {
+ public static void main(String[] args) {
+ Light light = new Light();
+ light.on_button_pushed();
+ light.on_button_pushed();
+ light.on_button_pushed();
+ light.off_button_pushed();
+ light.on_button_pushed();
+ }
+}
diff --git a/java-oop-design-pattern/ch7-light3states/src/Light.java b/java-oop-design-pattern/ch7-light3states/src/Light.java
new file mode 100644
index 000000000..db66c1384
--- /dev/null
+++ b/java-oop-design-pattern/ch7-light3states/src/Light.java
@@ -0,0 +1,13 @@
+
+public class Light {
+ private LightState state = OFF.getInstance();
+ public void setState(LightState state) {
+ this.state = state;
+ }
+ public void on_button_pushed() {
+ state.on_button_pushed(this);
+ }
+ public void off_button_pushed() {
+ state.off_button_pushed(this);
+ }
+}
diff --git a/java-oop-design-pattern/ch7-light3states/src/LightState.java b/java-oop-design-pattern/ch7-light3states/src/LightState.java
new file mode 100644
index 000000000..37aa37ec9
--- /dev/null
+++ b/java-oop-design-pattern/ch7-light3states/src/LightState.java
@@ -0,0 +1,5 @@
+
+public interface LightState {
+ public void on_button_pushed(Light light);
+ public void off_button_pushed(Light light);
+}
diff --git a/java-oop-design-pattern/ch7-light3states/src/OFF.java b/java-oop-design-pattern/ch7-light3states/src/OFF.java
new file mode 100644
index 000000000..9c36b7fa3
--- /dev/null
+++ b/java-oop-design-pattern/ch7-light3states/src/OFF.java
@@ -0,0 +1,19 @@
+
+public class OFF implements LightState {
+
+ private static LightState instance = new OFF();
+
+ public static LightState getInstance() {
+ return instance;
+ }
+ @Override
+ public void on_button_pushed(Light light) {
+ System.out.println("Light On!!");
+ light.setState(ON.getInstance());
+ }
+ @Override
+ public void off_button_pushed(Light light) {
+ System.out.println("");
+ light.setState(OFF.getInstance());
+ }
+}
diff --git a/java-oop-design-pattern/ch7-light3states/src/ON.java b/java-oop-design-pattern/ch7-light3states/src/ON.java
new file mode 100644
index 000000000..f7d7ceee3
--- /dev/null
+++ b/java-oop-design-pattern/ch7-light3states/src/ON.java
@@ -0,0 +1,21 @@
+
+public class ON implements LightState {
+ private static LightState instance = new ON();
+
+ public static LightState getInstance() {
+ return instance;
+ }
+
+ @Override
+ public void on_button_pushed(Light light) {
+ System.out.println("ħ ");
+ light.setState(SLEEPING.getInstance());
+ }
+
+ @Override
+ public void off_button_pushed(Light light) {
+ System.out.println("Light off!!");
+ light.setState(OFF.getInstance());
+ }
+
+}
diff --git a/java-oop-design-pattern/ch7-light3states/src/SLEEPING.java b/java-oop-design-pattern/ch7-light3states/src/SLEEPING.java
new file mode 100644
index 000000000..2acb5fa70
--- /dev/null
+++ b/java-oop-design-pattern/ch7-light3states/src/SLEEPING.java
@@ -0,0 +1,19 @@
+
+public class SLEEPING implements LightState {
+ private static LightState instance = new SLEEPING();
+
+ public static LightState getInstance() {
+ return instance;
+ }
+ @Override
+ public void on_button_pushed(Light light) {
+ System.out.println("Light On Back!!");
+ light.setState(ON.getInstance());
+ }
+
+ @Override
+ public void off_button_pushed(Light light) {
+ System.out.println("Light Off Back!!");
+ light.setState(OFF.getInstance());
+ }
+}
diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.classpath" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.classpath"
new file mode 100644
index 000000000..fb565a588
--- /dev/null
+++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/.classpath"
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 000000000..32c8518de
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/Client.class" differ
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 000000000..8dddc06fe
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/Drinking.class" differ
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 000000000..c566bdb16
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/EnoughMoneyState.class" differ
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 000000000..633f4500c
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/MoneyBox.class" differ
diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/NoEnoughMoneyState.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/NoEnoughMoneyState.class"
new file mode 100644
index 000000000..8f756f34b
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/NoEnoughMoneyState.class" differ
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 000000000..2ede122ba
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/NoMoneyState.class" differ
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 000000000..5edaa1cae
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/SoldOutState.class" differ
diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/State.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/State.class"
new file mode 100644
index 000000000..e6e11f9d1
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/State.class" differ
diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/VendingMachine.class" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/VendingMachine.class"
new file mode 100644
index 000000000..0cdafd9d1
Binary files /dev/null and "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/bin/VendingMachine.class" differ
diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/Client.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/Client.java"
new file mode 100644
index 000000000..feadf143b
--- /dev/null
+++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/Client.java"
@@ -0,0 +1,22 @@
+//package vending;
+
+public class Client {
+ public static void main(String[] args) {
+ VendingMachine machine = new VendingMachine(0, 1000);
+
+ machine.insertMoney(1000);
+ System.out.println(machine.getState());
+ machine.insertMoney(500);
+ System.out.println(machine.getState());
+ machine.pushButton();
+ System.out.println(machine.getState());
+ machine.returnMoney();
+ System.out.println(machine.getState());
+ machine.insertMoney(1000);
+ System.out.println(machine.getState());
+ machine.insertMoney(1000);
+ System.out.println(machine.getState());
+ machine.pushButton();
+ System.out.println(machine.getState());
+ }
+}
diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/Drinking.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/Drinking.java"
new file mode 100644
index 000000000..55d27fc1c
--- /dev/null
+++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/Drinking.java"
@@ -0,0 +1,23 @@
+//package vending;
+
+public class Drinking {
+ private int price;
+ private int stock;
+
+ public Drinking(int stock, int price) {
+ this.stock = stock;
+ this.price = price;
+ }
+
+ public void dispense() {
+ this.stock--;
+ }
+
+ public int getPrice() {
+ return price;
+ }
+
+ public int getStock() {
+ return stock;
+ }
+}
diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/EnoughMoneyState.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/EnoughMoneyState.java"
new file mode 100644
index 000000000..91e614b00
--- /dev/null
+++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/EnoughMoneyState.java"
@@ -0,0 +1,39 @@
+//package vending;
+
+public class EnoughMoneyState implements State {
+ VendingMachine machine;
+
+ public EnoughMoneyState(VendingMachine machine) {
+ this.machine = machine;
+ }
+
+ @Override
+ public void insertMoney(int money) {
+ machine.getMoneyBox().insert(money);
+ System.out.println(money + " ־ϴ");
+ System.out.println("ݾ" + machine.getMoneyBox().getMoney() + "Դϴ");
+ }
+
+ @Override
+ public void pushButton(int price) {
+ machine.getMoneyBox().dispense(price);
+ machine.getDrinking().dispense();
+ System.out.println(" Խϴ");
+ if (machine.getDrinking().getStock() == 0) {
+ machine.setState(machine.getSoldOutState());
+ } else if (machine.getMoneyBox().getMoney() < machine.getDrinking().getPrice()) {
+ machine.setState(machine.getNoEnoughMoneyState());
+ } else if (machine.getMoneyBox().getMoney() == 0) {
+ machine.setState(machine.getNoMoneyState());
+ }
+ }
+
+ @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/MoneyBox.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/MoneyBox.java"
new file mode 100644
index 000000000..2dba5d868
--- /dev/null
+++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/MoneyBox.java"
@@ -0,0 +1,24 @@
+//package vending;
+
+public class MoneyBox {
+ int money = 0;
+
+ public int getMoney() {
+ return money;
+ }
+
+ public void insert(int money) {
+ this.money += money;
+ }
+
+ public void dispense(int price) {
+ this.money -= price;
+ }
+
+ public int returnMoney() {
+ int tmp = this.money;
+ this.money = 0;
+ return tmp;
+ }
+
+}
diff --git "a/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/NoEnoughMoneyState.java" "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/NoEnoughMoneyState.java"
new file mode 100644
index 000000000..d3e595e2c
--- /dev/null
+++ "b/java-oop-design-pattern/ch7-\353\254\270\354\240\2345-vendingMachine/src/NoEnoughMoneyState.java"
@@ -0,0 +1,35 @@
+//package vending;
+
+public class NoEnoughMoneyState implements State {
+ VendingMachine machine;
+
+ public NoEnoughMoneyState(VendingMachine machine) {
+ this.machine = machine;
+ }
+
+ @Override
+ public void insertMoney(int money) {
+ machine.getMoneyBox().insert(money);
+ System.out.println(money + " ־ϴ");
+ if (machine.getMoneyBox().getMoney() >= 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 000000000..2a036c7a1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Client.class differ
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 000000000..b76ba9b82
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Direction.class differ
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 000000000..0cf2ce387
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Door.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/DoorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/DoorStatus.class
new file mode 100644
index 000000000..01701ae6b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/DoorStatus.class differ
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 000000000..4e7060806
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/ElevatorFactory.class differ
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 000000000..fb08fad13
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiDoor.class differ
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 000000000..d92645ceb
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiElevatorFactory.class differ
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 000000000..29ba6b33c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/HyundaiMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGDoor.class
new file mode 100644
index 000000000..fd596bc5e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGDoor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGElevatorFactory.class
new file mode 100644
index 000000000..b4cfc1cfb
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGElevatorFactory.class differ
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 000000000..aed8e9ef4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/LGMotor.class differ
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 000000000..33c78753c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/Motor.class differ
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 000000000..8ea82b09c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after1/MotorStatus.class differ
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 000000000..cdb0bb128
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Client.class differ
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 000000000..b1034c2f2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Direction.class differ
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 000000000..5b8118737
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Door.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/DoorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/DoorStatus.class
new file mode 100644
index 000000000..48dccf9d4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/DoorStatus.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/ElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/ElevatorFactory.class
new file mode 100644
index 000000000..07f547ec4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/ElevatorFactory.class differ
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 000000000..ec0af9b31
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiDoor.class differ
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 000000000..41f4a55f3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiElevatorFactory.class differ
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 000000000..ab2e76f07
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/HyundaiMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGDoor.class
new file mode 100644
index 000000000..2c25e77fe
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGDoor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGElevatorFactory.class
new file mode 100644
index 000000000..a7d14322e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGElevatorFactory.class differ
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 000000000..1c62c704b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/LGMotor.class differ
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 000000000..576a53fd0
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/Motor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/MotorStatus.class
new file mode 100644
index 000000000..917928167
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/MotorStatus.class differ
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 000000000..23400ec57
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungDoor.class differ
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 000000000..8d7c19c72
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungElevatorFactory.class differ
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 000000000..699323226
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after2/SamsungMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Client.class
new file mode 100644
index 000000000..d381ff2b9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Direction.class
new file mode 100644
index 000000000..362bca93a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Direction.class differ
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 000000000..dd5164f5f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Door.class differ
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 000000000..ae1cf46c2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/DoorStatus.class differ
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 000000000..5af1bda0e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/ElevatorFactory.class differ
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 000000000..02171afa8
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/ElevatorFactoryFactory.class differ
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 000000000..96e8acc1a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiDoor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiElevatorFactory.class
new file mode 100644
index 000000000..f80f4a168
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiElevatorFactory.class differ
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 000000000..f23c2d4fd
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/HyundaiMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGDoor.class
new file mode 100644
index 000000000..e61836c98
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGDoor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGElevatorFactory.class
new file mode 100644
index 000000000..8591e5577
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGElevatorFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGMotor.class
new file mode 100644
index 000000000..6b8c65db7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/LGMotor.class differ
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 000000000..dc9d97254
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/Motor.class differ
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 000000000..ef64e137e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/MotorStatus.class differ
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 000000000..987dd3d54
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungDoor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungElevatorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungElevatorFactory.class
new file mode 100644
index 000000000..c11a2269f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungElevatorFactory.class differ
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 000000000..840236318
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/SamsungMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/VendorID.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/VendorID.class
new file mode 100644
index 000000000..5e1e4fe98
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/after3/VendorID.class differ
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 000000000..242db53c3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Client.class differ
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 000000000..1b5e81ea2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Direction.class differ
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 000000000..8234441ac
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Door.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/DoorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/DoorFactory.class
new file mode 100644
index 000000000..c2cd7ac79
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/DoorFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/DoorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/DoorStatus.class
new file mode 100644
index 000000000..771601545
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/DoorStatus.class differ
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 000000000..0aa7e4633
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/HyundaiDoor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/HyundaiMotor.class
new file mode 100644
index 000000000..3a681efdb
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/HyundaiMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/LGDoor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/LGDoor.class
new file mode 100644
index 000000000..ae7a6ffca
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/LGDoor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/LGMotor.class
new file mode 100644
index 000000000..a274d4f12
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/LGMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Motor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Motor.class
new file mode 100644
index 000000000..456294e4c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/Motor.class differ
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 000000000..dab9bf0eb
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/MotorFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/MotorStatus.class
new file mode 100644
index 000000000..16815b7ee
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/MotorStatus.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/VendorID.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/VendorID.class
new file mode 100644
index 000000000..4f7a06059
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/before1/VendorID.class differ
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 000000000..da63b2ef4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/BasicNaviFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/CheapGPS.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/CheapGPS.class
new file mode 100644
index 000000000..2f3ecdf82
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/CheapGPS.class differ
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 000000000..3657d36d6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/ClientBefore.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/ClientBefore.class
new file mode 100644
index 000000000..fe13c39a0
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/ClientBefore.class differ
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 000000000..b29d1ecd3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/ExpensiveGPS.class differ
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 000000000..13a341f91
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/FastPathFinder.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/GPS.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/GPS.class
new file mode 100644
index 000000000..10de836b8
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/GPS.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/HDScreen.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/HDScreen.class
new file mode 100644
index 000000000..3b906c9bf
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/HDScreen.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/LargeMap.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/LargeMap.class
new file mode 100644
index 000000000..14e717a24
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/LargeMap.class differ
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 000000000..82691aedc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Location.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Map.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Map.class
new file mode 100644
index 000000000..4e81a5bbf
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Map.class differ
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 000000000..51d391a54
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/NaviFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Path.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Path.class
new file mode 100644
index 000000000..81c8d6b2c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Path.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/PathFinder.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/PathFinder.class
new file mode 100644
index 000000000..55239f71f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/PathFinder.class differ
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 000000000..75e76f063
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/PremiumNaviFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SDScreen.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SDScreen.class
new file mode 100644
index 000000000..7b50b6739
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SDScreen.class differ
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 000000000..7794d0fc2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/Screen.class differ
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 000000000..90c6126b5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SlowPathFinder.class differ
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 000000000..cae7892a7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navi/SmallMap.class differ
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 000000000..7422b8035
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/BasicNaviFactory.class differ
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 000000000..261722a2f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/CheapGPS.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Client.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Client.class
new file mode 100644
index 000000000..2beff9e5a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Client.class differ
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 000000000..ae606425a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/ExpensiveGPS.class differ
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 000000000..3dfc8ab84
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/FastPathFinder.class differ
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 000000000..ba3a41fee
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/GPS.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/GPSSimulator.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/GPSSimulator.class
new file mode 100644
index 000000000..9f0fd382b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/GPSSimulator.class differ
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 000000000..8f2f9dd2e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/HDScreen.class differ
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 000000000..54905c793
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/LargeMap.class differ
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 000000000..4eb347838
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Location.class differ
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 000000000..f470883db
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Map.class differ
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 000000000..6c032d89d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/NaviFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/NaviTestFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/NaviTestFactory.class
new file mode 100644
index 000000000..f6f8d2a0e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/NaviTestFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Path.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Path.class
new file mode 100644
index 000000000..ac2f1517a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Path.class differ
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 000000000..f9335352b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/PathFinder.class differ
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 000000000..b10d17675
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/PremiumNaviFactory.class differ
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 000000000..a0d881b60
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SDScreen.class differ
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 000000000..bfae0a634
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/Screen.class differ
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 000000000..0cb1a1d77
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SlowPathFinder.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SmallMap.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SmallMap.class
new file mode 100644
index 000000000..1e9532cf5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/SmallMap.class differ
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 000000000..7a366a696
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestMap.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestPathFinder.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestPathFinder.class
new file mode 100644
index 000000000..812a18959
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestPathFinder.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestScreen.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestScreen.class
new file mode 100644
index 000000000..b32d2fbd4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/navisimulation/TestScreen.class differ
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 000000000..e8436cd99
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerGyroscope.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerLightSensor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerLightSensor.class
new file mode 100644
index 000000000..7eac64f7b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerLightSensor.class differ
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 000000000..5edf6774a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerMotionSensor.class differ
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 000000000..0034bbdd5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/AveragePowerSensorFactory.class differ
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 000000000..775397e0f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/Gyroscope.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LightSensor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LightSensor.class
new file mode 100644
index 000000000..f87d5c572
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LightSensor.class differ
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 000000000..3f391545d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerGyroscope.class differ
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 000000000..d7774f1f4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerLightSensor.class differ
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 000000000..e03d7b953
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerMotionSensor.class differ
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 000000000..6b4e3b0c3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/LowPowerSensorFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/MotionSensor.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/MotionSensor.class
new file mode 100644
index 000000000..8462ec323
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/MotionSensor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/SensorFactory.class b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/SensorFactory.class
new file mode 100644
index 000000000..5b6989433
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/abstractfactory/example/power/SensorFactory.class differ
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 000000000..8fd439324
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Alarm.class differ
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 000000000..66c5b849c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after1/AlarmOnCommand.class differ
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 000000000..6882e474b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Button.class differ
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 000000000..6334abba7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after1/Command.class b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Command.class
new file mode 100644
index 000000000..7747b8f1e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Command.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after1/Lamp.class b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Lamp.class
new file mode 100644
index 000000000..4e32fae2b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after1/Lamp.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after1/LampOnCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/after1/LampOnCommand.class
new file mode 100644
index 000000000..488988d6a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after1/LampOnCommand.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after2/Button.class b/java-oop-design-pattern/ch8_ch14/bin/command/after2/Button.class
new file mode 100644
index 000000000..31178d609
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after2/Button.class differ
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 000000000..cb728071c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after2/Client.class differ
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 000000000..27cf461a6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after2/Command.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after2/Lamp.class b/java-oop-design-pattern/ch8_ch14/bin/command/after2/Lamp.class
new file mode 100644
index 000000000..5fc91a070
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after2/Lamp.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/after2/LampOffCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/after2/LampOffCommand.class
new file mode 100644
index 000000000..0526213f3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after2/LampOffCommand.class differ
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 000000000..ca6897b62
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/after2/LampOnCommand.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before1/Button.class b/java-oop-design-pattern/ch8_ch14/bin/command/before1/Button.class
new file mode 100644
index 000000000..bd9dc6961
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before1/Button.class differ
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 000000000..4a692c97a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before1/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before1/Lamp.class b/java-oop-design-pattern/ch8_ch14/bin/command/before1/Lamp.class
new file mode 100644
index 000000000..16de0576e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before1/Lamp.class differ
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 000000000..9bf382210
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before2/Alarm.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before2/Button.class b/java-oop-design-pattern/ch8_ch14/bin/command/before2/Button.class
new file mode 100644
index 000000000..e1860b8e7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before2/Button.class differ
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 000000000..91714dffa
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before2/Client.class differ
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 000000000..3baec0406
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Alarm.class differ
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 000000000..2b79368af
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Button.class differ
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 000000000..514dacc50
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/before3/Lamp.class b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Lamp.class
new file mode 100644
index 000000000..5b53d73c9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Lamp.class differ
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 000000000..b146389e2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/before3/Mode.class differ
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 000000000..7c6deaa31
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Client.class differ
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 000000000..8f851bca5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Command.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/DestinationSelectionCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/DestinationSelectionCommand.class
new file mode 100644
index 000000000..148beb8e3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/DestinationSelectionCommand.class differ
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 000000000..f424b1add
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/Direction.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorButton.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorButton.class
new file mode 100644
index 000000000..52d23d353
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorButton.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorController.class
new file mode 100644
index 000000000..22ec0365b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorController.class differ
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 000000000..86230ee28
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorManager.class differ
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 000000000..80357cc3a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/elevatorbutton/ElevatorRequestCommand.class differ
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 000000000..e4e88f5df
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelController.class differ
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 000000000..00a29a97a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelDownCommand.class differ
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 000000000..9d7dc982d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/ChannelUpCommand.class differ
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 000000000..c4e363797
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/Client.class differ
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 000000000..79966dc5f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/Command.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/MuteCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/MuteCommand.class
new file mode 100644
index 000000000..3317b68d7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/MuteCommand.class differ
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 000000000..a5c161b12
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/PowerCommand.class differ
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 000000000..4ad941a64
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/RemoteController.class differ
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 000000000..b93641b96
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/remotecontroller2/TV.class differ
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 000000000..4b3502c9e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Client2.class differ
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 000000000..c83d06927
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Client3.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Command.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Command.class
new file mode 100644
index 000000000..ffc674672
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/Command.class differ
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 000000000..c6d3a276f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/MuteCommand.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/PowerCommand.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/PowerCommand.class
new file mode 100644
index 000000000..ce4fff44d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/PowerCommand.class differ
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 000000000..c349c5d7f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/TV.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/TwoButtonController.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/TwoButtonController.class
new file mode 100644
index 000000000..fa3c14e51
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/TwoButtonController.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/Client.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/Client.class
new file mode 100644
index 000000000..57b3f1b72
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/Client.class differ
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 000000000..8a87b5bf7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/TV.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/TwoButtonController.class b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/TwoButtonController.class
new file mode 100644
index 000000000..6fd7e95f5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/command/example/twobuttoncontroller/before/TwoButtonController.class differ
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 000000000..3e5b9a9b5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Body.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Client.class
new file mode 100644
index 000000000..e6de9e017
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Client.class differ
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 000000000..6c75d15ed
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Computer.class differ
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 000000000..e4ddc2951
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/ComputerDevice.class differ
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 000000000..1c10cdd6e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Keyboard.class differ
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 000000000..a2c475643
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after1/Monitor.class differ
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 000000000..c07767557
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Body.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Client.class
new file mode 100644
index 000000000..4745192fc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Client.class differ
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 000000000..7a25625ff
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Computer.class differ
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 000000000..cc78943c9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/ComputerDevice.class differ
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 000000000..99e784530
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Keyboard.class differ
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 000000000..38e825bd5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Monitor.class differ
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 000000000..465842be4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after2/Speaker.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Body.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Body.class
new file mode 100644
index 000000000..8451b861a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Body.class differ
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 000000000..d111f5ab6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/CPU.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Client.class
new file mode 100644
index 000000000..c8b892ac9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Client.class differ
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 000000000..d4543a3f9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/CompositeDevice.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Computer.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Computer.class
new file mode 100644
index 000000000..0def49706
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Computer.class differ
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 000000000..8fcc16dfd
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/ComputerDevice.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/HardDisk.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/HardDisk.class
new file mode 100644
index 000000000..fcc7d1dc0
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/HardDisk.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Keyboard.class b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Keyboard.class
new file mode 100644
index 000000000..5cb9ae908
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Keyboard.class differ
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 000000000..b94a06293
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/MainMemory.class differ
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 000000000..9333f5c93
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Monitor.class differ
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 000000000..4e43ed2f2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/after3/Speaker.class differ
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 000000000..ecc105af9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Body.class differ
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 000000000..cd8fbd6a3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Client.class differ
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 000000000..20fdc7a6c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Computer.class differ
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 000000000..2e12a4571
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Keyboard.class differ
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 000000000..00451821d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before1/Monitor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Body.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Body.class
new file mode 100644
index 000000000..e8f82cd21
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Body.class differ
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 000000000..22886ab8a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Computer.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Computer.class
new file mode 100644
index 000000000..ef836889d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Computer.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Keyboard.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Keyboard.class
new file mode 100644
index 000000000..d89ec912a
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Keyboard.class differ
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 000000000..fe091dadf
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Monitor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Speaker.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Speaker.class
new file mode 100644
index 000000000..2b72b1234
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before2/Speaker.class differ
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 000000000..76b0b0149
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Body.class differ
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 000000000..7c1d54dd7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/CPU.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Client.class
new file mode 100644
index 000000000..4fbc930df
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Client.class differ
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 000000000..bde3a53e5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Computer.class differ
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 000000000..1027387a8
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/HardDisk.class differ
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 000000000..b8ef9ba7d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Keyboard.class differ
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 000000000..32482a022
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/MainMemory.class differ
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 000000000..3585d84d0
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Monitor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Speaker.class b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Speaker.class
new file mode 100644
index 000000000..4884de689
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/before3/Speaker.class differ
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 000000000..040fe708e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/AbstractFile.class differ
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 000000000..a25fdcfd7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/Directory.class b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/Directory.class
new file mode 100644
index 000000000..c4e16c7b5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/Directory.class differ
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 000000000..a6bef3bc1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/after/File.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/Client.class b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/Client.class
new file mode 100644
index 000000000..b48d2a6b5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/Directory.class b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/Directory.class
new file mode 100644
index 000000000..4dd89bb87
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/Directory.class differ
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 000000000..cb5c94b09
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/composite/example/directory/before/File.class differ
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 000000000..3e454413e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/Client.class differ
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 000000000..01d3e28a2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/Display.class differ
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 000000000..704397245
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/DisplayDecorator.class differ
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 000000000..451291e3c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/LaneDecorator.class differ
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 000000000..334a8754b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after1/RoadDisplay.class differ
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 000000000..713fbda7b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/Client.class differ
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 000000000..09e601df3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/Display.class differ
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 000000000..ec4f8bbf4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/DisplayDecorator.class differ
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 000000000..af37eb4ca
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/LaneDecorator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/RoadDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/RoadDisplay.class
new file mode 100644
index 000000000..f6e19eebd
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/RoadDisplay.class differ
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 000000000..1b754efa6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after2/TrafficDecorator.class differ
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 000000000..6dd300435
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Client.class differ
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 000000000..599bf0027
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Client2.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/CrossingDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/CrossingDecorator.class
new file mode 100644
index 000000000..1ddd75759
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/CrossingDecorator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Display.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Display.class
new file mode 100644
index 000000000..3145532ee
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/Display.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/DisplayDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/DisplayDecorator.class
new file mode 100644
index 000000000..b99963000
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/DisplayDecorator.class differ
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 000000000..c310b1238
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/LaneDecorator.class differ
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 000000000..18d1fb20c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/RoadDisplay.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/TrafficDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/TrafficDecorator.class
new file mode 100644
index 000000000..78538e60d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/after3/TrafficDecorator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/Client.class
new file mode 100644
index 000000000..47667fa90
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/Client.class differ
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 000000000..01ed899e0
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/RoadDisplay.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/RoadDisplayWithLane.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/RoadDisplayWithLane.class
new file mode 100644
index 000000000..6b50fb64e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before1/RoadDisplayWithLane.class differ
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 000000000..579b14322
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/Client.class differ
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 000000000..ae2e16b47
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplay.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplayWithLane.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplayWithLane.class
new file mode 100644
index 000000000..3723e2afa
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplayWithLane.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplayWithTraffic.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplayWithTraffic.class
new file mode 100644
index 000000000..37b2733bb
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before2/RoadDisplayWithTraffic.class differ
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 000000000..344bc7cd7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplay.class
new file mode 100644
index 000000000..9f18fc57f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplay.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithLane.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithLane.class
new file mode 100644
index 000000000..c752c9ef6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithLane.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithLaneTraffic.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithLaneTraffic.class
new file mode 100644
index 000000000..a46df28ee
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithLaneTraffic.class differ
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 000000000..034ca5114
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/before3/RoadDisplayWithTraffic.class differ
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 000000000..e88eec5fe
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/AirBagDecorator.class differ
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 000000000..29db7e3fb
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/BasicCar.class differ
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 000000000..adc8ae1e5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/CarComponent.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/CarOptionDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/CarOptionDecorator.class
new file mode 100644
index 000000000..822e6e859
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/CarOptionDecorator.class differ
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 000000000..f8c26835e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/ESCDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/ESCDecorator.class
new file mode 100644
index 000000000..c144691fe
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/ESCDecorator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/NaviDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/NaviDecorator.class
new file mode 100644
index 000000000..84c22a548
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/NaviDecorator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/SCCDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/SCCDecorator.class
new file mode 100644
index 000000000..32d9af5c1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/caroption/SCCDecorator.class differ
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 000000000..7f379bf4f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/BasicEMailContent.class differ
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 000000000..d17c2aae9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/ContentDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/ContentDecorator.class
new file mode 100644
index 000000000..e04540bf2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/ContentDecorator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/EMailContent.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/EMailContent.class
new file mode 100644
index 000000000..d06c5c670
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/EMailContent.class differ
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 000000000..12f8cc74c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/ExternalDecorator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/SecureDecorator.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/SecureDecorator.class
new file mode 100644
index 000000000..8214d97c1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/SecureDecorator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/BasicEMailContent.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/BasicEMailContent.class
new file mode 100644
index 000000000..66f74d58f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/BasicEMailContent.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/Client.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/Client.class
new file mode 100644
index 000000000..ffe9d21a1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/ExternalEMailContent.class b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/ExternalEMailContent.class
new file mode 100644
index 000000000..7cd56cf76
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/ExternalEMailContent.class differ
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 000000000..b49d9fdf5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/decorator/example/email/before/SecureEMailContent.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/Client.class
new file mode 100644
index 000000000..1a8d68c69
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/Client.class differ
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 000000000..726375252
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/Direction.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorController.class
new file mode 100644
index 000000000..f87ab78b5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorController.class differ
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 000000000..ad4b21fcc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorManager.class differ
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 000000000..0061fbb5b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ElevatorScheduler.class differ
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 000000000..14c6d36d3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ResponseTimeScheduler.class differ
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 000000000..ad6b58d46
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/SchedulerFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/SchedulingStrategyID.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/SchedulingStrategyID.class
new file mode 100644
index 000000000..de1785d15
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/SchedulingStrategyID.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ThroughputScheduler.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ThroughputScheduler.class
new file mode 100644
index 000000000..5a13a130e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after1/ThroughputScheduler.class differ
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 000000000..d96bde2dc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/Client.class differ
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 000000000..4d5d32868
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/Direction.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorController.class
new file mode 100644
index 000000000..3dcb93430
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorController.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorManager.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorManager.class
new file mode 100644
index 000000000..5d1bcaf60
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorManager.class differ
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 000000000..fe86b17e1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ElevatorScheduler.class differ
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 000000000..67fbd63ec
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ResponseTimeScheduler.class differ
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 000000000..100502f41
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/SchedulerFactory.class differ
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 000000000..9303e3148
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/SchedulingStrategyID.class differ
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 000000000..0bbb65c86
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after2/ThroughputScheduler.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/Client.class
new file mode 100644
index 000000000..a932527c3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/Client.class differ
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 000000000..3b75f4451
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/Direction.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorController.class
new file mode 100644
index 000000000..54e27abe8
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorController.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManager.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManager.class
new file mode 100644
index 000000000..95f113e0e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManager.class differ
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 000000000..33a3a1861
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithDynamicScheduling.class differ
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 000000000..ee85789c1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.class differ
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 000000000..fba3c63f5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorManagerWithThroughputScheduling.class differ
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 000000000..5bd296a4c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ElevatorScheduler.class differ
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 000000000..5ee80a2e1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ResponseTimeScheduler.class differ
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 000000000..d8dd2b366
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/after3/ThroughputScheduler.class differ
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 000000000..c2ff048b1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/Client.class differ
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 000000000..f56b43201
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/Direction.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ElevatorController.class
new file mode 100644
index 000000000..c9bbf672d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ElevatorController.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ElevatorManager.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ElevatorManager.class
new file mode 100644
index 000000000..d21c91472
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ElevatorManager.class differ
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 000000000..2a99a380c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before1/ThroughputScheduler.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/Client.class
new file mode 100644
index 000000000..c80c29cde
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/Direction.class
new file mode 100644
index 000000000..5b327e773
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/Direction.class differ
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 000000000..3a97665da
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorController.class differ
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 000000000..7e73fc7e6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorManager.class differ
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 000000000..24214f66c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ElevatorScheduler.class differ
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 000000000..224224676
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ResponseTimeScheduler.class differ
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 000000000..c8f200756
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/before2/ThroughputScheduler.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/Car.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/Car.class
new file mode 100644
index 000000000..0a78ad71d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/Car.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarState.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarState.class
new file mode 100644
index 000000000..bdb312572
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarState.class differ
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 000000000..4071b8cd6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarStateFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarStateID.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarStateID.class
new file mode 100644
index 000000000..2212a9e71
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/CarStateID.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/Client.class
new file mode 100644
index 000000000..f859cd642
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/Client.class differ
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 000000000..b309cb934
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/LimpState.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/NormalState.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/NormalState.class
new file mode 100644
index 000000000..cf94d462d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/NormalState.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/Car.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/Car.class
new file mode 100644
index 000000000..d269cb5c0
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/Car.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/CarState.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/CarState.class
new file mode 100644
index 000000000..aeac6fd4b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/CarState.class differ
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 000000000..39fad4187
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/Client.class differ
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 000000000..7845e8db5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/LimpState.class differ
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 000000000..ad176d799
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/carmode/before/NormalState.class differ
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 000000000..1c9d09f3b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Direction.class
new file mode 100644
index 000000000..4078068de
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Direction.class differ
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 000000000..b0bfceea8
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/ElevatorController.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/HyundaiMotor.class
new file mode 100644
index 000000000..9a1d5cde5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/HyundaiMotor.class differ
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 000000000..864ac09e9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/LGMotor.class differ
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 000000000..bcac48474
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/Motor.class differ
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 000000000..10218fb6f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorFactory.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorStatus.class
new file mode 100644
index 000000000..f57d0e289
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorStatus.class differ
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 000000000..d5046f979
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/MotorVendorID.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/Client.class
new file mode 100644
index 000000000..9a1db8a28
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/Direction.class
new file mode 100644
index 000000000..1a1544bfc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/Direction.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/ElevatorController.class
new file mode 100644
index 000000000..35ad97fe6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/ElevatorController.class differ
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 000000000..d892198dc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/LGMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/MotorStatus.class
new file mode 100644
index 000000000..9d934b633
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before1/MotorStatus.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Client.class
new file mode 100644
index 000000000..bc4698ef5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Client.class differ
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 000000000..c08be77dc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Direction.class differ
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 000000000..4a1d467cf
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/ElevatorController.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/HyundaiMotor.class
new file mode 100644
index 000000000..07129f1a3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/HyundaiMotor.class differ
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 000000000..ddeb3f9a9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/LGMotor.class differ
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 000000000..671e03f23
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/Motor.class differ
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 000000000..544fe9f2c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/factorymethod/example/motor/before2/MotorStatus.class differ
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 000000000..b2fcb99f6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after1/DataSheetView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/DataSheetView.class
new file mode 100644
index 000000000..7dd0c23ad
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/DataSheetView.class differ
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 000000000..bf1f4db64
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/MinMaxView.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Observer.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Observer.class
new file mode 100644
index 000000000..3a9b7bc3d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Observer.class differ
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 000000000..fff3c9887
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/ScoreRecord.class differ
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 000000000..16c82becb
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after1/Subject.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Client.class
new file mode 100644
index 000000000..4c83aa684
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Client.class differ
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 000000000..8211b258b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/DataSheetView.class differ
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 000000000..87d4552b6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/MinMaxView.class differ
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 000000000..9d3cfb011
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Observer.class differ
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 000000000..3b34df4ff
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/ScoreRecord.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/after2/StatisticsView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/StatisticsView.class
new file mode 100644
index 000000000..8abb3dca2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/StatisticsView.class differ
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 000000000..3f3a09d97
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/after2/Subject.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before1/Client.class
new file mode 100644
index 000000000..5632062dc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before1/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before1/DataSheetView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before1/DataSheetView.class
new file mode 100644
index 000000000..599f102dc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before1/DataSheetView.class differ
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 000000000..409cf33ea
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before1/ScoreRecord.class differ
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 000000000..eaecf5247
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before2/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before2/MinMaxView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before2/MinMaxView.class
new file mode 100644
index 000000000..c1f53cfc6
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before2/MinMaxView.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before2/ScoreRecord.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before2/ScoreRecord.class
new file mode 100644
index 000000000..fbd4f8124
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before2/ScoreRecord.class differ
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 000000000..6c48d876d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before3/Client.class differ
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 000000000..f90392141
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before3/DataSheetView.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before3/MainMaxView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before3/MainMaxView.class
new file mode 100644
index 000000000..fff17d448
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before3/MainMaxView.class differ
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 000000000..90e8495f2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before3/ScoreRecord.class differ
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 000000000..725f62cea
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before4/Client.class differ
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 000000000..b6b4751d1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before4/DataSheetView.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/before4/MainMaxView.class b/java-oop-design-pattern/ch8_ch14/bin/observer/before4/MainMaxView.class
new file mode 100644
index 000000000..48d397638
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before4/MainMaxView.class differ
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 000000000..cfbbc44de
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/before4/ScoreRecord.class differ
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 000000000..595171d6c
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Battery.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/BatteryLevelDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/BatteryLevelDisplay.class
new file mode 100644
index 000000000..4e66817d5
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/BatteryLevelDisplay.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Client.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Client.class
new file mode 100644
index 000000000..e04b930c9
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/LowBatteryWarning.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/LowBatteryWarning.class
new file mode 100644
index 000000000..1b7a6ca12
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/LowBatteryWarning.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Observer.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Observer.class
new file mode 100644
index 000000000..70eb038b8
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Observer.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Subject.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Subject.class
new file mode 100644
index 000000000..70e27d637
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/Subject.class differ
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 000000000..da5dd395f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/Battery.class differ
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 000000000..80d620d41
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/BatteryLevelDisplay.class differ
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 000000000..666d4d0bc
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/Client.class differ
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 000000000..23870b23f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/battery/before/LowBatteryWarning.class differ
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 000000000..ff48fbb95
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ControlRoomDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ControlRoomDisplay.class
new file mode 100644
index 000000000..08903f9a7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ControlRoomDisplay.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ElevatorController.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ElevatorController.class
new file mode 100644
index 000000000..dbfbe881d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ElevatorController.class differ
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 000000000..e7eedf560
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/ElevatorDisplay.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/FloorDisplay.class b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/FloorDisplay.class
new file mode 100644
index 000000000..f8e19aa87
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/FloorDisplay.class differ
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 000000000..bd4166a44
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Observer.class differ
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 000000000..192f6f1d8
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/Subject.class differ
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 000000000..fc2d5fab1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/observer/example/elevatorcontroller/VoiceNotice.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Client.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Client.class
new file mode 100644
index 000000000..66f210d7f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Client.class differ
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 000000000..36366863e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Direction.class differ
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 000000000..3cb8f7c8e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Door.class differ
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 000000000..a476f25c1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/DoorStatus.class differ
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 000000000..cb5aeeb00
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/HyundaiMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/LGMotor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/LGMotor.class
new file mode 100644
index 000000000..de89383c1
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/LGMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Motor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Motor.class
new file mode 100644
index 000000000..099089137
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/Motor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/MotorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/MotorStatus.class
new file mode 100644
index 000000000..3d7aa1b7f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/after1/MotorStatus.class differ
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 000000000..1d21be082
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Direction.class
new file mode 100644
index 000000000..c6e7da056
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Direction.class differ
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 000000000..7c1706bc7
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/Door.class differ
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 000000000..3b95242db
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/DoorStatus.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/HyundaiMotor.class
new file mode 100644
index 000000000..1180b36e4
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/HyundaiMotor.class differ
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 000000000..bd599a7fd
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before1/MotorStatus.class differ
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 000000000..ebf898818
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Direction.class
new file mode 100644
index 000000000..1e0e84668
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Direction.class differ
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 000000000..f57eba387
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/Door.class differ
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 000000000..002087b03
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/DoorStatus.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/HyundaiMotor.class
new file mode 100644
index 000000000..cdd27eb36
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/HyundaiMotor.class differ
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 000000000..9ebd59b31
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/LGMotor.class differ
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 000000000..48bd0084d
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before2/MotorStatus.class differ
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 000000000..f4931956b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Client.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Direction.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Direction.class
new file mode 100644
index 000000000..ba89475ad
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Direction.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Door.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Door.class
new file mode 100644
index 000000000..5abd5c512
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Door.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/DoorStatus.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/DoorStatus.class
new file mode 100644
index 000000000..7776ab6ce
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/DoorStatus.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/HyundaiMotor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/HyundaiMotor.class
new file mode 100644
index 000000000..9c4b84169
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/HyundaiMotor.class differ
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 000000000..d928841fd
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/LGMotor.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Motor.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Motor.class
new file mode 100644
index 000000000..969b55da2
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/Motor.class differ
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 000000000..f2c79cc3e
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/before3/MotorStatus.class differ
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 000000000..56850d293
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/Client.class differ
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 000000000..fd99954b3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/ComplexReportGenerator.class differ
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 000000000..216180fa3
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/Customer.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/ReportGenerator.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/ReportGenerator.class
new file mode 100644
index 000000000..0300da407
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/ReportGenerator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/SimpleReportGenerator.class b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/SimpleReportGenerator.class
new file mode 100644
index 000000000..1a5ecca9f
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/SimpleReportGenerator.class differ
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 000000000..418ba0254
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/Client.class differ
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 000000000..fa30aa395
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/Customer.class differ
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 000000000..5cea7980b
Binary files /dev/null and b/java-oop-design-pattern/ch8_ch14/bin/templatemethod/example/reportgenerator/before/SimpleReportGenerator.class differ
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Client.java
new file mode 100644
index 000000000..9259edc27
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Client.java
@@ -0,0 +1,20 @@
+package abstractfactory.after1;
+
+public class Client {
+ public static void main(String[] args) {
+
+ ElevatorFactory factory = null ;
+ String vendorName = args[0] ;
+ if ( vendorName.equalsIgnoreCase("LG") )
+ factory = new LGElevatorFactory() ;
+ else
+ factory = new HyundaiElevatorFactory() ;
+
+ Door door = factory.createDoor() ;
+ Motor motor = factory.createMotor() ;
+ motor.setDoor(door) ;
+
+ door.open() ;
+ motor.move(Direction.UP) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Direction.java
new file mode 100644
index 000000000..752b9b0e3
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Direction.java
@@ -0,0 +1,3 @@
+package abstractfactory.after1;
+
+public enum Direction { UP, DOWN }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Door.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Door.java
new file mode 100644
index 000000000..293febf99
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Door.java
@@ -0,0 +1,24 @@
+package abstractfactory.after1;
+
+public abstract class Door {
+ private DoorStatus doorStatus ;
+ public Door() {
+ doorStatus = DoorStatus.CLOSED ;
+ }
+ public DoorStatus getDoorStatus() {
+ return doorStatus ;
+ }
+ public void close() {
+ if ( doorStatus == DoorStatus.CLOSED ) return ;
+ doClose() ;
+ doorStatus = DoorStatus.CLOSED ;
+ }
+ protected abstract void doClose() ;
+ public void open() {
+ if ( doorStatus == DoorStatus.OPENED ) return ;
+ doOpen() ;
+ doorStatus = DoorStatus.OPENED ;
+ }
+ protected abstract void doOpen() ;
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/DoorStatus.java
new file mode 100644
index 000000000..fbfd62774
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/DoorStatus.java
@@ -0,0 +1,3 @@
+package abstractfactory.after1;
+
+public enum DoorStatus { CLOSED, OPENED }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/ElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/ElevatorFactory.java
new file mode 100644
index 000000000..72d056636
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/ElevatorFactory.java
@@ -0,0 +1,6 @@
+package abstractfactory.after1;
+
+public abstract class ElevatorFactory {
+ public abstract Motor createMotor() ;
+ public abstract Door createDoor() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiDoor.java
new file mode 100644
index 000000000..857b9e2c7
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.after1;
+
+public class HyundaiDoor extends Door {
+ protected void doClose() {
+ System.out.println("close Hyundai Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open Hyundai Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiElevatorFactory.java
new file mode 100644
index 000000000..b3587c803
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiElevatorFactory.java
@@ -0,0 +1,10 @@
+package abstractfactory.after1;
+
+public class HyundaiElevatorFactory extends ElevatorFactory {
+ public Motor createMotor() {
+ return new HyundaiMotor() ;
+ }
+ public Door createDoor() {
+ return new HyundaiDoor() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiMotor.java
new file mode 100644
index 000000000..d1675b6bd
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/HyundaiMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.after1;
+
+public class HyundaiMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move Hyundai Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGDoor.java
new file mode 100644
index 000000000..8699d7921
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.after1;
+
+public class LGDoor extends Door {
+ protected void doClose() {
+ System.out.println("close LG Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open LG Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGElevatorFactory.java
new file mode 100644
index 000000000..c6a2502d8
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGElevatorFactory.java
@@ -0,0 +1,10 @@
+package abstractfactory.after1;
+
+public class LGElevatorFactory extends ElevatorFactory {
+ public Motor createMotor() {
+ return new LGMotor() ;
+ }
+ public Door createDoor() {
+ return new LGDoor() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGMotor.java
new file mode 100644
index 000000000..6367d1c0f
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/LGMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.after1;
+
+public class LGMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move LG Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Motor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Motor.java
new file mode 100644
index 000000000..8677eb673
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/Motor.java
@@ -0,0 +1,32 @@
+package abstractfactory.after1;
+
+public abstract class Motor {
+ private Door door ;
+ private MotorStatus motorStatus ;
+
+ public Motor() {
+ motorStatus = MotorStatus.STOPPED ;
+ }
+ public void setDoor(Door door) {
+ this.door = door ;
+ }
+ 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/abstractfactory/after1/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/MotorStatus.java
new file mode 100644
index 000000000..9e8576468
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after1/MotorStatus.java
@@ -0,0 +1,3 @@
+package abstractfactory.after1;
+
+public enum MotorStatus { MOVING, STOPPED}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Client.java
new file mode 100644
index 000000000..02d8f0df7
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Client.java
@@ -0,0 +1,21 @@
+package abstractfactory.after2;
+
+public class Client {
+ public static void main(String[] args) {
+ ElevatorFactory factory = null ;
+ String vendorName = args[0] ;
+ if ( vendorName.equalsIgnoreCase("LG") )
+ factory = new LGElevatorFactory() ;
+ else if ( vendorName.equalsIgnoreCase("Samsung") )
+ factory = new SamsungElevatorFactory() ;
+ else
+ factory = new HyundaiElevatorFactory() ;
+
+ Door door = factory.createDoor() ;
+ Motor motor = factory.createMotor() ;
+ motor.setDoor(door) ;
+
+ door.open() ;
+ motor.move(Direction.UP) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Direction.java
new file mode 100644
index 000000000..1c827dbe9
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Direction.java
@@ -0,0 +1,3 @@
+package abstractfactory.after2;
+
+public enum Direction { UP, DOWN }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Door.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Door.java
new file mode 100644
index 000000000..9cad2809e
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Door.java
@@ -0,0 +1,24 @@
+package abstractfactory.after2;
+
+public abstract class Door {
+ private DoorStatus doorStatus ;
+ public Door() {
+ doorStatus = DoorStatus.CLOSED ;
+ }
+ public DoorStatus getDoorStatus() {
+ return doorStatus ;
+ }
+ public void close() {
+ if ( doorStatus == DoorStatus.CLOSED ) return ;
+ doClose() ;
+ doorStatus = DoorStatus.CLOSED ;
+ }
+ protected abstract void doClose() ;
+ public void open() {
+ if ( doorStatus == DoorStatus.OPENED ) return ;
+ doOpen() ;
+ doorStatus = DoorStatus.OPENED ;
+ }
+ protected abstract void doOpen() ;
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/DoorStatus.java
new file mode 100644
index 000000000..49110712e
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/DoorStatus.java
@@ -0,0 +1,3 @@
+package abstractfactory.after2;
+
+public enum DoorStatus { CLOSED, OPENED }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/ElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/ElevatorFactory.java
new file mode 100644
index 000000000..c08a5f09c
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/ElevatorFactory.java
@@ -0,0 +1,6 @@
+package abstractfactory.after2;
+
+public abstract class ElevatorFactory {
+ public abstract Motor createMotor() ;
+ public abstract Door createDoor() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiDoor.java
new file mode 100644
index 000000000..c14efd554
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.after2;
+
+public class HyundaiDoor extends Door {
+ protected void doClose() {
+ System.out.println("close Hyundai Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open Hyundai Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiElevatorFactory.java
new file mode 100644
index 000000000..3b8a541c5
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiElevatorFactory.java
@@ -0,0 +1,10 @@
+package abstractfactory.after2;
+
+public class HyundaiElevatorFactory extends ElevatorFactory {
+ public Motor createMotor() {
+ return new HyundaiMotor() ;
+ }
+ public Door createDoor() {
+ return new HyundaiDoor() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiMotor.java
new file mode 100644
index 000000000..72b2184c9
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/HyundaiMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.after2;
+
+public class HyundaiMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move Hyundai Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGDoor.java
new file mode 100644
index 000000000..7059ff97f
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.after2;
+
+public class LGDoor extends Door {
+ protected void doClose() {
+ System.out.println("close LG Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open LG Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGElevatorFactory.java
new file mode 100644
index 000000000..b7919524e
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGElevatorFactory.java
@@ -0,0 +1,10 @@
+package abstractfactory.after2;
+
+public class LGElevatorFactory extends ElevatorFactory {
+ public Motor createMotor() {
+ return new LGMotor() ;
+ }
+ public Door createDoor() {
+ return new LGDoor() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGMotor.java
new file mode 100644
index 000000000..5998d833f
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/LGMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.after2;
+
+public class LGMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move LG Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Motor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Motor.java
new file mode 100644
index 000000000..4db154845
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/Motor.java
@@ -0,0 +1,32 @@
+package abstractfactory.after2;
+
+public abstract class Motor {
+ private Door door ;
+ private MotorStatus motorStatus ;
+
+ public Motor() {
+ motorStatus = MotorStatus.STOPPED ;
+ }
+ public void setDoor(Door door) {
+ this.door = door ;
+ }
+ 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/abstractfactory/after2/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/MotorStatus.java
new file mode 100644
index 000000000..4a170d6b7
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/MotorStatus.java
@@ -0,0 +1,3 @@
+package abstractfactory.after2;
+
+public enum MotorStatus { MOVING, STOPPED}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungDoor.java
new file mode 100644
index 000000000..66ad0bb0c
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.after2;
+
+public class SamsungDoor extends Door {
+ protected void doClose() {
+ System.out.println("close Samsung Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open Samsung Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungElevatorFactory.java
new file mode 100644
index 000000000..8fb51b853
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungElevatorFactory.java
@@ -0,0 +1,10 @@
+package abstractfactory.after2;
+
+public class SamsungElevatorFactory extends ElevatorFactory {
+ public Motor createMotor() {
+ return new SamsungMotor() ;
+ }
+ public Door createDoor() {
+ return new SamsungDoor() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungMotor.java
new file mode 100644
index 000000000..53e7f33e0
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after2/SamsungMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.after2;
+
+public class SamsungMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move Samsung Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Client.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Client.java
new file mode 100644
index 000000000..c02051a66
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Client.java
@@ -0,0 +1,24 @@
+package abstractfactory.after3;
+
+public class Client {
+ public static void main(String[] args) {
+
+ String vendorName = args[0] ;
+ VendorID vendorID ;
+ if ( vendorName.equalsIgnoreCase("LG"))
+ vendorID = VendorID.LG ;
+ else if ( vendorName.equalsIgnoreCase("Samsung"))
+ vendorID = VendorID.SAMSUNG ;
+ else
+ vendorID = VendorID.HYUNDAI ;
+
+ ElevatorFactory factory = ElevatorFactoryFactory.getFactory(vendorID) ;
+
+ Door door = factory.createDoor() ;
+ Motor motor = factory.createMotor() ;
+ motor.setDoor(door) ;
+
+ door.open() ;
+ motor.move(Direction.UP) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Direction.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Direction.java
new file mode 100644
index 000000000..aab550070
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Direction.java
@@ -0,0 +1,3 @@
+package abstractfactory.after3;
+
+public enum Direction { UP, DOWN }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Door.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Door.java
new file mode 100644
index 000000000..1cb22fdaf
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Door.java
@@ -0,0 +1,24 @@
+package abstractfactory.after3;
+
+public abstract class Door {
+ private DoorStatus doorStatus ;
+ public Door() {
+ doorStatus = DoorStatus.CLOSED ;
+ }
+ public DoorStatus getDoorStatus() {
+ return doorStatus ;
+ }
+ public void close() {
+ if ( doorStatus == DoorStatus.CLOSED ) return ;
+ doClose() ;
+ doorStatus = DoorStatus.CLOSED ;
+ }
+ protected abstract void doClose() ;
+ public void open() {
+ if ( doorStatus == DoorStatus.OPENED ) return ;
+ doOpen() ;
+ doorStatus = DoorStatus.OPENED ;
+ }
+ protected abstract void doOpen() ;
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/DoorStatus.java
new file mode 100644
index 000000000..e97bbfd99
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/DoorStatus.java
@@ -0,0 +1,3 @@
+package abstractfactory.after3;
+
+public enum DoorStatus { CLOSED, OPENED }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/ElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/ElevatorFactory.java
new file mode 100644
index 000000000..b84b0ef0d
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/ElevatorFactory.java
@@ -0,0 +1,6 @@
+package abstractfactory.after3;
+
+public abstract class ElevatorFactory {
+ public abstract Motor createMotor() ;
+ public abstract Door createDoor() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/ElevatorFactoryFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/ElevatorFactoryFactory.java
new file mode 100644
index 000000000..533a9bebe
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/ElevatorFactoryFactory.java
@@ -0,0 +1,13 @@
+package abstractfactory.after3;
+
+public class ElevatorFactoryFactory {
+ public static ElevatorFactory getFactory(VendorID vendorID) {
+ ElevatorFactory factory = null ;
+ switch ( vendorID ) {
+ case LG: factory = LGElevatorFactory.getInstance() ; break ;
+ case HYUNDAI : factory = HyundaiElevatorFactory.getInstance() ; break ;
+ case SAMSUNG : factory = SamsungElevatorFactory.getInstance() ; break ;
+ }
+ return factory ;
+ }
+}
\ No newline at end of file
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiDoor.java
new file mode 100644
index 000000000..6258e7bec
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.after3;
+
+public class HyundaiDoor extends Door {
+ protected void doClose() {
+ System.out.println("close Hyundai Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open Hyundai Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiElevatorFactory.java
new file mode 100644
index 000000000..547a5a437
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiElevatorFactory.java
@@ -0,0 +1,19 @@
+package abstractfactory.after3;
+
+public class HyundaiElevatorFactory extends ElevatorFactory {
+ private static ElevatorFactory factory ;
+ private HyundaiElevatorFactory() {}
+ public static ElevatorFactory getInstance() {
+ if ( factory == null )
+ factory = new HyundaiElevatorFactory() ;
+ return factory ;
+ }
+
+ public Motor createMotor() {
+ return new HyundaiMotor() ;
+ }
+ public Door createDoor() {
+ return new HyundaiDoor() ;
+ }
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiMotor.java
new file mode 100644
index 000000000..9aebf998a
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/HyundaiMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.after3;
+
+public class HyundaiMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move Hyundai Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGDoor.java
new file mode 100644
index 000000000..10f95684d
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.after3;
+
+public class LGDoor extends Door {
+ protected void doClose() {
+ System.out.println("close LG Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open LG Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGElevatorFactory.java
new file mode 100644
index 000000000..023feb9f6
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGElevatorFactory.java
@@ -0,0 +1,18 @@
+package abstractfactory.after3;
+
+public class LGElevatorFactory extends ElevatorFactory {
+ private static ElevatorFactory factory ;
+ private LGElevatorFactory() {}
+ public static ElevatorFactory getInstance() {
+ if ( factory == null )
+ factory = new LGElevatorFactory() ;
+ return factory ;
+ }
+
+ public Motor createMotor() {
+ return new LGMotor() ;
+ }
+ public Door createDoor() {
+ return new LGDoor() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGMotor.java
new file mode 100644
index 000000000..36ad5debe
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/LGMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.after3;
+
+public class LGMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move LG Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Motor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Motor.java
new file mode 100644
index 000000000..298d337b6
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/Motor.java
@@ -0,0 +1,32 @@
+package abstractfactory.after3;
+
+public abstract class Motor {
+ private Door door ;
+ private MotorStatus motorStatus ;
+
+ public Motor() {
+ motorStatus = MotorStatus.STOPPED ;
+ }
+ public void setDoor(Door door) {
+ this.door = door ;
+ }
+ 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/abstractfactory/after3/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/MotorStatus.java
new file mode 100644
index 000000000..2ec30fb25
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/MotorStatus.java
@@ -0,0 +1,3 @@
+package abstractfactory.after3;
+
+public enum MotorStatus { MOVING, STOPPED}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungDoor.java
new file mode 100644
index 000000000..f951ff0db
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.after3;
+
+public class SamsungDoor extends Door {
+ protected void doClose() {
+ System.out.println("close Samsung Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open Samsung Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungElevatorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungElevatorFactory.java
new file mode 100644
index 000000000..529a3d89d
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungElevatorFactory.java
@@ -0,0 +1,19 @@
+package abstractfactory.after3;
+
+public class SamsungElevatorFactory extends ElevatorFactory {
+ private static ElevatorFactory factory ;
+ private SamsungElevatorFactory() {}
+
+ public static ElevatorFactory getInstance() {
+ if ( factory == null )
+ factory = new SamsungElevatorFactory() ;
+ return factory ;
+ }
+ public Motor createMotor() {
+ return new SamsungMotor() ;
+ }
+ public Door createDoor() {
+ return new SamsungDoor() ;
+ }
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungMotor.java
new file mode 100644
index 000000000..86152651a
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/SamsungMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.after3;
+
+public class SamsungMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move Samsung Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/VendorID.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/VendorID.java
new file mode 100644
index 000000000..9fdab948e
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/after3/VendorID.java
@@ -0,0 +1,3 @@
+package abstractfactory.after3;
+
+public enum VendorID { LG, HYUNDAI, SAMSUNG }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Client.java
new file mode 100644
index 000000000..ee693ecc2
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Client.java
@@ -0,0 +1,19 @@
+package abstractfactory.before1;
+
+public class Client {
+ public static void main(String[] args) {
+ Door lgDoor = DoorFactory.createDoor(VendorID.LG) ;
+ Motor lgMotor = MotorFactory.createMotor(VendorID.LG) ;
+ lgMotor.setDoor(lgDoor) ;
+
+ lgDoor.open() ;
+ lgMotor.move(Direction.UP) ;
+
+ Door hyundaiDoor = DoorFactory.createDoor(VendorID.HYUNDAI) ;
+ Motor hyundaiMotor = MotorFactory.createMotor(VendorID.HYUNDAI) ;
+ hyundaiMotor.setDoor(hyundaiDoor) ;
+
+ hyundaiDoor.open() ;
+ hyundaiMotor.move(Direction.UP) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Direction.java
new file mode 100644
index 000000000..f089d66c3
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Direction.java
@@ -0,0 +1,3 @@
+package abstractfactory.before1;
+
+public enum Direction { UP, DOWN }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Door.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Door.java
new file mode 100644
index 000000000..2a4a9682d
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Door.java
@@ -0,0 +1,23 @@
+package abstractfactory.before1;
+
+public abstract class Door {
+ private DoorStatus doorStatus ;
+ public Door() {
+ doorStatus = DoorStatus.CLOSED ;
+ }
+ public DoorStatus getDoorStatus() {
+ return doorStatus ;
+ }
+ public void close() {
+ if ( doorStatus == DoorStatus.CLOSED ) return ;
+ doClose() ;
+ doorStatus = DoorStatus.CLOSED ;
+ }
+ protected abstract void doClose() ;
+ public void open() {
+ if ( doorStatus == DoorStatus.OPENED ) return ;
+ doOpen() ;
+ doorStatus = DoorStatus.OPENED ;
+ }
+ protected abstract void doOpen() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/DoorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/DoorFactory.java
new file mode 100644
index 000000000..bb46a0eac
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/DoorFactory.java
@@ -0,0 +1,12 @@
+package abstractfactory.before1;
+
+public class DoorFactory {
+ public static Door createDoor(VendorID vendorID) {
+ Door door = null ;
+ switch ( vendorID ) {
+ case LG : door = new LGDoor() ; break ;
+ case HYUNDAI : door = new HyundaiDoor() ; break ;
+ }
+ return door ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/DoorStatus.java
new file mode 100644
index 000000000..73f6bf56d
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/DoorStatus.java
@@ -0,0 +1,3 @@
+package abstractfactory.before1;
+
+public enum DoorStatus { CLOSED, OPENED }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/HyundaiDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/HyundaiDoor.java
new file mode 100644
index 000000000..e0b2736db
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/HyundaiDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.before1;
+
+public class HyundaiDoor extends Door {
+ protected void doClose() {
+ System.out.println("close Hyundai Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open Hyundai Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/HyundaiMotor.java
new file mode 100644
index 000000000..d96713580
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/HyundaiMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.before1;
+
+public class HyundaiMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move Hyundai Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/LGDoor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/LGDoor.java
new file mode 100644
index 000000000..58a496576
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/LGDoor.java
@@ -0,0 +1,10 @@
+package abstractfactory.before1;
+
+public class LGDoor extends Door {
+ protected void doClose() {
+ System.out.println("close LG Door") ;
+ }
+ protected void doOpen() {
+ System.out.println("open LG Door") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/LGMotor.java
new file mode 100644
index 000000000..84ea84b2b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/LGMotor.java
@@ -0,0 +1,7 @@
+package abstractfactory.before1;
+
+public class LGMotor extends Motor {
+ protected void moveMotor(Direction direction) {
+ System.out.println("move LG Motor") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Motor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Motor.java
new file mode 100644
index 000000000..1c2755dbd
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/Motor.java
@@ -0,0 +1,32 @@
+package abstractfactory.before1;
+
+public abstract class Motor {
+ private Door door ;
+ private MotorStatus motorStatus ;
+
+ public Motor() {
+ motorStatus = MotorStatus.STOPPED ;
+ }
+ public void setDoor(Door door) {
+ this.door = door ;
+ }
+ 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/abstractfactory/before1/MotorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/MotorFactory.java
new file mode 100644
index 000000000..50964d0ad
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/MotorFactory.java
@@ -0,0 +1,12 @@
+package abstractfactory.before1;
+
+public class MotorFactory {
+ public static Motor createMotor(VendorID 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/abstractfactory/before1/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/MotorStatus.java
new file mode 100644
index 000000000..b3e14a4f2
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/MotorStatus.java
@@ -0,0 +1,3 @@
+package abstractfactory.before1;
+
+public enum MotorStatus { MOVING, STOPPED}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/VendorID.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/VendorID.java
new file mode 100644
index 000000000..f56482643
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/before1/VendorID.java
@@ -0,0 +1,3 @@
+package abstractfactory.before1;
+
+public enum VendorID { LG, HYUNDAI }
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/BasicNaviFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/BasicNaviFactory.java
new file mode 100644
index 000000000..f86d0bead
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/BasicNaviFactory.java
@@ -0,0 +1,16 @@
+package abstractfactory.example.navi;
+
+public class BasicNaviFactory extends NaviFactory {
+ public GPS createGPS() {
+ return new CheapGPS() ;
+ }
+ public Screen createScreen() {
+ return new SDScreen() ;
+ }
+ public PathFinder createPathFinder() {
+ return new SlowPathFinder() ;
+ }
+ public Map createMap() {
+ return new SmallMap() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/CheapGPS.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/CheapGPS.java
new file mode 100644
index 000000000..31efb0285
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/CheapGPS.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navi;
+
+public class CheapGPS extends GPS {
+ public Location findCurrentLocation() {
+ System.out.println("find current location with Cheap GPS") ;
+ return null;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Client.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Client.java
new file mode 100644
index 000000000..02f1b90b9
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Client.java
@@ -0,0 +1,24 @@
+package abstractfactory.example.navi;
+
+public class Client {
+ public static void main(String[] args) {
+ NaviFactory factory = null ;
+ String vendorName = args[0] ;
+ if ( vendorName.equalsIgnoreCase("Basic") )
+ factory = new BasicNaviFactory() ;
+ else
+ factory = new PremiumNaviFactory() ;
+
+ GPS gps = factory.createGPS() ;
+ Screen mapScreen = factory.createScreen() ;
+ PathFinder pathFinder = factory.createPathFinder() ;
+
+ Map map = factory.createMap() ;
+ mapScreen.drawMap(map) ;
+
+ Location l1 = gps.findCurrentLocation() ;
+ Location l2 = gps.findCurrentLocation() ;
+
+ pathFinder.findPath(l1, l2) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/ClientBefore.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/ClientBefore.java
new file mode 100644
index 000000000..1da21a3ae
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/ClientBefore.java
@@ -0,0 +1,17 @@
+package abstractfactory.example.navi;
+
+public class ClientBefore {
+ public static void main(String[] args) {
+ GPS gps = new CheapGPS() ;
+ Screen mapScreen = new SDScreen() ;
+ PathFinder pathFinder = new SlowPathFinder() ;
+
+ Map map = new SmallMap() ;
+ mapScreen.drawMap(map) ;
+
+ Location l1 = gps.findCurrentLocation() ;
+ Location l2 = gps.findCurrentLocation() ;
+
+ pathFinder.findPath(l1, l2) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/ExpensiveGPS.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/ExpensiveGPS.java
new file mode 100644
index 000000000..327f489c2
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/ExpensiveGPS.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navi;
+
+public class ExpensiveGPS extends GPS {
+ public Location findCurrentLocation() {
+ System.out.println("find current location with Expensive GPS") ;
+ return null;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/FastPathFinder.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/FastPathFinder.java
new file mode 100644
index 000000000..c3e98dd85
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/FastPathFinder.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navi;
+
+public class FastPathFinder extends PathFinder {
+ public Path findPath(Location from, Location to) {
+ System.out.println("Fast Path Finder") ;
+ return null;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/GPS.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/GPS.java
new file mode 100644
index 000000000..02d89377c
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/GPS.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navi;
+
+public abstract class GPS {
+ public abstract Location findCurrentLocation() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/HDScreen.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/HDScreen.java
new file mode 100644
index 000000000..63e924553
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/HDScreen.java
@@ -0,0 +1,7 @@
+package abstractfactory.example.navi;
+
+public class HDScreen extends Screen {
+ public void drawMap(Map map) {
+ System.out.println("draw map " + map.getClass().getName() + " on HD screen") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/LargeMap.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/LargeMap.java
new file mode 100644
index 000000000..f2a1d90b6
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/LargeMap.java
@@ -0,0 +1,4 @@
+package abstractfactory.example.navi;
+
+public class LargeMap extends Map {
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Location.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Location.java
new file mode 100644
index 000000000..755400ddc
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Location.java
@@ -0,0 +1,4 @@
+package abstractfactory.example.navi;
+
+public class Location {
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Map.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Map.java
new file mode 100644
index 000000000..2fe6f2f50
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Map.java
@@ -0,0 +1,4 @@
+package abstractfactory.example.navi;
+
+public abstract class Map {
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/NaviFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/NaviFactory.java
new file mode 100644
index 000000000..3db6f96fb
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/NaviFactory.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navi;
+
+public abstract class NaviFactory {
+ public abstract GPS createGPS() ;
+ public abstract Screen createScreen() ;
+ public abstract PathFinder createPathFinder() ;
+ public abstract Map createMap() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Path.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Path.java
new file mode 100644
index 000000000..b95c1dfb4
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Path.java
@@ -0,0 +1,4 @@
+package abstractfactory.example.navi;
+
+public class Path {
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/PathFinder.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/PathFinder.java
new file mode 100644
index 000000000..f14438181
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/PathFinder.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navi;
+
+public abstract class PathFinder {
+ public abstract Path findPath(Location from, Location to) ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/PremiumNaviFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/PremiumNaviFactory.java
new file mode 100644
index 000000000..97bf99a77
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/PremiumNaviFactory.java
@@ -0,0 +1,16 @@
+package abstractfactory.example.navi;
+
+public class PremiumNaviFactory extends NaviFactory {
+ public GPS createGPS() {
+ return new ExpensiveGPS() ;
+ }
+ public Screen createScreen() {
+ return new HDScreen() ;
+ }
+ public PathFinder createPathFinder() {
+ return new FastPathFinder() ;
+ }
+ public Map createMap() {
+ return new LargeMap() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SDScreen.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SDScreen.java
new file mode 100644
index 000000000..7962091ca
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SDScreen.java
@@ -0,0 +1,7 @@
+package abstractfactory.example.navi;
+
+public class SDScreen extends Screen {
+ public void drawMap(Map map) {
+ System.out.println("draw map " + map.getClass().getName() + " on SD screen") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Screen.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Screen.java
new file mode 100644
index 000000000..7d5f50c33
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/Screen.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navi;
+
+public abstract class Screen {
+ public abstract void drawMap(Map map) ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SlowPathFinder.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SlowPathFinder.java
new file mode 100644
index 000000000..c3e939bf0
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SlowPathFinder.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navi;
+
+public class SlowPathFinder extends PathFinder {
+ public Path findPath(Location from, Location to) {
+ System.out.println("Slow Path Finder") ;
+ return null;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SmallMap.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SmallMap.java
new file mode 100644
index 000000000..d0890eb15
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navi/SmallMap.java
@@ -0,0 +1,4 @@
+package abstractfactory.example.navi;
+
+public class SmallMap extends Map {
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/BasicNaviFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/BasicNaviFactory.java
new file mode 100644
index 000000000..d3398ab6e
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/BasicNaviFactory.java
@@ -0,0 +1,16 @@
+package abstractfactory.example.navisimulation;
+
+public class BasicNaviFactory extends NaviFactory {
+ public GPS createGPS() {
+ return new CheapGPS() ;
+ }
+ public Screen createMapScreen() {
+ return new SDScreen() ;
+ }
+ public PathFinder createPathFinder() {
+ return new SlowPathFinder() ;
+ }
+ public Map createMap() {
+ return new SmallMap() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/CheapGPS.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/CheapGPS.java
new file mode 100644
index 000000000..256c62135
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/CheapGPS.java
@@ -0,0 +1,10 @@
+package abstractfactory.example.navisimulation;
+
+public class CheapGPS extends GPS {
+
+ public Location findCurrentLocation() {
+ System.out.println("find current location with Cheap GPS") ;
+ return null;
+ }
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Client.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Client.java
new file mode 100644
index 000000000..56059237c
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Client.java
@@ -0,0 +1,20 @@
+package abstractfactory.example.navisimulation;
+
+public class Client {
+ public static void main(String[] args) {
+ NaviFactory basicNavifactory = new BasicNaviFactory() ;
+ NaviFactory testFactory = new NaviTestFactory() ;
+
+ GPS gps = testFactory.createGPS() ;
+ Screen mapScreen = testFactory.createMapScreen() ;
+ PathFinder pathFinder = basicNavifactory.createPathFinder() ;
+
+ Map map = testFactory.createMap() ;
+ mapScreen.drawMap(map) ;
+
+ Location l1 = gps.findCurrentLocation() ;
+ Location l2 = gps.findCurrentLocation() ;
+
+ pathFinder.findPath(l1, l2) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/ExpensiveGPS.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/ExpensiveGPS.java
new file mode 100644
index 000000000..3b7ba1326
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/ExpensiveGPS.java
@@ -0,0 +1,10 @@
+package abstractfactory.example.navisimulation;
+
+public class ExpensiveGPS extends GPS {
+
+ public Location findCurrentLocation() {
+ System.out.println("find current location with Expensive GPS") ;
+ return null;
+ }
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/FastPathFinder.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/FastPathFinder.java
new file mode 100644
index 000000000..327b205e0
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/FastPathFinder.java
@@ -0,0 +1,9 @@
+package abstractfactory.example.navisimulation;
+
+public class FastPathFinder extends PathFinder {
+ public Path findPath(Location from, Location to) {
+ System.out.println("Fast Path Finder") ;
+ return null;
+ }
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/GPS.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/GPS.java
new file mode 100644
index 000000000..607ee3954
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/GPS.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navisimulation;
+
+public abstract class GPS {
+ public abstract Location findCurrentLocation() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/GPSSimulator.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/GPSSimulator.java
new file mode 100644
index 000000000..3d52bbfa4
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/GPSSimulator.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navisimulation;
+
+public class GPSSimulator extends GPS {
+ public Location findCurrentLocation() {
+ System.out.println("find current location with GPS Simulator") ;
+ return null;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/HDScreen.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/HDScreen.java
new file mode 100644
index 000000000..31d321446
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/HDScreen.java
@@ -0,0 +1,7 @@
+package abstractfactory.example.navisimulation;
+
+public class HDScreen extends Screen {
+ public void drawMap(Map map) {
+ System.out.println("draw map " + map.getClass().getName() + " on HD screen") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/LargeMap.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/LargeMap.java
new file mode 100644
index 000000000..9c33b7d4b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/LargeMap.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navisimulation;
+
+public class LargeMap extends Map {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Location.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Location.java
new file mode 100644
index 000000000..c8a1c8a8c
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Location.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navisimulation;
+
+public class Location {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Map.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Map.java
new file mode 100644
index 000000000..a30393b9a
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Map.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navisimulation;
+
+public class Map {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/NaviFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/NaviFactory.java
new file mode 100644
index 000000000..12a7bb3e6
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/NaviFactory.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navisimulation;
+
+public abstract class NaviFactory {
+ public abstract GPS createGPS() ;
+ public abstract Screen createMapScreen() ;
+ public abstract PathFinder createPathFinder() ;
+ public abstract Map createMap() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/NaviTestFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/NaviTestFactory.java
new file mode 100644
index 000000000..e4a02e415
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/NaviTestFactory.java
@@ -0,0 +1,16 @@
+package abstractfactory.example.navisimulation;
+
+public class NaviTestFactory extends NaviFactory {
+ public GPS createGPS() {
+ return new GPSSimulator() ;
+ }
+ public Screen createMapScreen() {
+ return new TestScreen() ;
+ }
+ public PathFinder createPathFinder() {
+ return new TestPathFinder() ;
+ }
+ public Map createMap() {
+ return new TestMap() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Path.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Path.java
new file mode 100644
index 000000000..77a60e2d8
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Path.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navisimulation;
+
+public class Path {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/PathFinder.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/PathFinder.java
new file mode 100644
index 000000000..9a47691e9
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/PathFinder.java
@@ -0,0 +1,7 @@
+package abstractfactory.example.navisimulation;
+
+public abstract class PathFinder {
+
+ public abstract Path findPath(Location from, Location to) ;
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/PremiumNaviFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/PremiumNaviFactory.java
new file mode 100644
index 000000000..dfb3524fa
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/PremiumNaviFactory.java
@@ -0,0 +1,16 @@
+package abstractfactory.example.navisimulation;
+
+public class PremiumNaviFactory extends NaviFactory {
+ public GPS createGPS() {
+ return new ExpensiveGPS() ;
+ }
+ public Screen createMapScreen() {
+ return new HDScreen() ;
+ }
+ public PathFinder createPathFinder() {
+ return new FastPathFinder() ;
+ }
+ public Map createMap() {
+ return new LargeMap() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SDScreen.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SDScreen.java
new file mode 100644
index 000000000..a4ebbdaa5
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SDScreen.java
@@ -0,0 +1,7 @@
+package abstractfactory.example.navisimulation;
+
+public class SDScreen extends Screen {
+ public void drawMap(Map map) {
+ System.out.println("draw map " + map.getClass().getName() + " on SD screen") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Screen.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Screen.java
new file mode 100644
index 000000000..1cb8bb444
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/Screen.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navisimulation;
+
+public abstract class Screen {
+ public abstract void drawMap(Map map) ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SlowPathFinder.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SlowPathFinder.java
new file mode 100644
index 000000000..0ccaf36c5
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SlowPathFinder.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navisimulation;
+
+public class SlowPathFinder extends PathFinder {
+ public Path findPath(Location from, Location to) {
+ System.out.println("Slow Path Finder") ;
+ return null;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SmallMap.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SmallMap.java
new file mode 100644
index 000000000..bc091ec51
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/SmallMap.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.navisimulation;
+
+public class SmallMap extends Map {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestMap.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestMap.java
new file mode 100644
index 000000000..ad85cdb4a
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestMap.java
@@ -0,0 +1,4 @@
+package abstractfactory.example.navisimulation;
+
+public class TestMap extends Map {
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestPathFinder.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestPathFinder.java
new file mode 100644
index 000000000..7528db2c2
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestPathFinder.java
@@ -0,0 +1,8 @@
+package abstractfactory.example.navisimulation;
+
+public class TestPathFinder extends PathFinder {
+ public Path findPath(Location from, Location to) {
+ System.out.println("Test Path Finder") ;
+ return null;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestScreen.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestScreen.java
new file mode 100644
index 000000000..23acfed61
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/navisimulation/TestScreen.java
@@ -0,0 +1,7 @@
+package abstractfactory.example.navisimulation;
+
+public class TestScreen extends Screen {
+ public void drawMap(Map map) {
+ System.out.println("draw map " + map.getClass().getName() + " on Test screen") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerGyroscope.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerGyroscope.java
new file mode 100644
index 000000000..b0d145d86
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerGyroscope.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public class AveragePowerGyroscope extends Gyroscope {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerLightSensor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerLightSensor.java
new file mode 100644
index 000000000..6801a947b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerLightSensor.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public class AveragePowerLightSensor extends LightSensor {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerMotionSensor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerMotionSensor.java
new file mode 100644
index 000000000..91b7fd705
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerMotionSensor.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public class AveragePowerMotionSensor extends MotionSensor {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerSensorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerSensorFactory.java
new file mode 100644
index 000000000..c5c4d8770
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/AveragePowerSensorFactory.java
@@ -0,0 +1,13 @@
+package abstractfactory.example.power;
+
+public class AveragePowerSensorFactory extends SensorFactory {
+ public LightSensor createLightSensor() {
+ return new AveragePowerLightSensor() ;
+ }
+ public Gyroscope createGyroscope() {
+ return new AveragePowerGyroscope() ;
+ }
+ public MotionSensor createMotionSensor() {
+ return new AveragePowerMotionSensor() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/Gyroscope.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/Gyroscope.java
new file mode 100644
index 000000000..80be60b25
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/Gyroscope.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public abstract class Gyroscope {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LightSensor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LightSensor.java
new file mode 100644
index 000000000..21e66605c
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LightSensor.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public abstract class LightSensor {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerGyroscope.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerGyroscope.java
new file mode 100644
index 000000000..573b587cf
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerGyroscope.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public class LowPowerGyroscope extends Gyroscope {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerLightSensor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerLightSensor.java
new file mode 100644
index 000000000..bf079eb0b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerLightSensor.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public class LowPowerLightSensor extends LightSensor {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerMotionSensor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerMotionSensor.java
new file mode 100644
index 000000000..96d44c4ab
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerMotionSensor.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public class LowPowerMotionSensor extends MotionSensor {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerSensorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerSensorFactory.java
new file mode 100644
index 000000000..d6e32a5c1
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/LowPowerSensorFactory.java
@@ -0,0 +1,14 @@
+package abstractfactory.example.power;
+
+public class LowPowerSensorFactory extends SensorFactory {
+ public LightSensor createLightSensor() {
+ return new LowPowerLightSensor() ;
+ }
+ public Gyroscope createGyroscope() {
+ return new LowPowerGyroscope() ;
+ }
+ public MotionSensor createMotionSensor() {
+ return new LowPowerMotionSensor() ;
+ }
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/MotionSensor.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/MotionSensor.java
new file mode 100644
index 000000000..73d5fb28e
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/MotionSensor.java
@@ -0,0 +1,5 @@
+package abstractfactory.example.power;
+
+public class MotionSensor {
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/SensorFactory.java b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/SensorFactory.java
new file mode 100644
index 000000000..2915001ad
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/abstractfactory/example/power/SensorFactory.java
@@ -0,0 +1,7 @@
+package abstractfactory.example.power;
+
+public abstract class SensorFactory {
+ public abstract LightSensor createLightSensor() ;
+ public abstract Gyroscope createGyroscope() ;
+ public abstract MotionSensor createMotionSensor() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after1/Alarm.java b/java-oop-design-pattern/ch8_ch14/src/command/after1/Alarm.java
new file mode 100644
index 000000000..91201b12b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after1/Alarm.java
@@ -0,0 +1,7 @@
+package command.after1;
+
+public class Alarm {
+ public void start() {
+ System.out.println("Alarming...") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after1/AlarmOnCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/after1/AlarmOnCommand.java
new file mode 100644
index 000000000..97e72354b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after1/AlarmOnCommand.java
@@ -0,0 +1,12 @@
+package command.after1;
+
+public class AlarmOnCommand implements Command {
+ private Alarm theAlarm ;
+ public AlarmOnCommand(Alarm theAlarm) {
+ this.theAlarm = theAlarm ;
+ }
+ public void execute() {
+ theAlarm.start() ;
+ }
+
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after1/Button.java b/java-oop-design-pattern/ch8_ch14/src/command/after1/Button.java
new file mode 100644
index 000000000..78ce54a4d
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after1/Button.java
@@ -0,0 +1,14 @@
+package command.after1;
+
+public class Button {
+ private Command theCommand ;
+ public Button(Command theCommand) {
+ setCommand(theCommand) ;
+ }
+ public void setCommand(Command newCommand) {
+ this.theCommand = newCommand ;
+ }
+ public void pressed() {
+ theCommand.execute() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/command/after1/Client.java
new file mode 100644
index 000000000..4cc333d0c
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after1/Client.java
@@ -0,0 +1,19 @@
+package command.after1;
+
+public class Client {
+ public static void main(String[] args) {
+ Lamp lamp = new Lamp() ;
+ Command lampOnCommand = new LampOnCommand(lamp) ;
+
+ Button button1 = new Button(lampOnCommand) ;
+ button1.pressed() ;
+
+ Alarm alarm = new Alarm() ;
+ Command alarmOnCommand = new AlarmOnCommand(alarm) ;
+ Button button2 = new Button(alarmOnCommand) ;
+ button2.pressed() ;
+
+ button2.setCommand(lampOnCommand) ;
+ button2.pressed() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after1/Command.java b/java-oop-design-pattern/ch8_ch14/src/command/after1/Command.java
new file mode 100644
index 000000000..00b2a2f0b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after1/Command.java
@@ -0,0 +1,5 @@
+package command.after1;
+
+public interface Command {
+ abstract public void execute() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after1/Lamp.java b/java-oop-design-pattern/ch8_ch14/src/command/after1/Lamp.java
new file mode 100644
index 000000000..b7751f5c0
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after1/Lamp.java
@@ -0,0 +1,7 @@
+package command.after1;
+
+public class Lamp {
+ public void turnOn() {
+ System.out.println("Lamp On") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after1/LampOnCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/after1/LampOnCommand.java
new file mode 100644
index 000000000..4c71bb81b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after1/LampOnCommand.java
@@ -0,0 +1,11 @@
+package command.after1;
+
+public class LampOnCommand implements Command {
+ private Lamp theLamp;
+ public LampOnCommand(Lamp theLamp) {
+ this.theLamp = theLamp ;
+ }
+ public void execute() {
+ theLamp.turnOn() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after2/Button.java b/java-oop-design-pattern/ch8_ch14/src/command/after2/Button.java
new file mode 100644
index 000000000..3bb659faa
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after2/Button.java
@@ -0,0 +1,14 @@
+package command.after2;
+
+public class Button {
+ private Command theCommand ;
+ public Button(Command theCommand) {
+ setCommand(theCommand) ;
+ }
+ public void setCommand(Command newCommand) {
+ this.theCommand = newCommand ;
+ }
+ public void pressed() {
+ theCommand.execute() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/command/after2/Client.java
new file mode 100644
index 000000000..01da692f5
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after2/Client.java
@@ -0,0 +1,15 @@
+package command.after2;
+
+public class Client {
+ public static void main(String[] args) {
+ Lamp lamp = new Lamp() ;
+ Command lampOnCommand = new LampOnCommand(lamp) ;
+ Command lampOffCommand = new LampOffCommand(lamp) ;
+
+ Button button1 = new Button(lampOnCommand) ;
+ button1.pressed() ;
+
+ button1.setCommand(lampOffCommand) ;
+ button1.pressed() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after2/Command.java b/java-oop-design-pattern/ch8_ch14/src/command/after2/Command.java
new file mode 100644
index 000000000..f19d096b8
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after2/Command.java
@@ -0,0 +1,5 @@
+package command.after2;
+
+public interface Command {
+ abstract public void execute() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after2/Lamp.java b/java-oop-design-pattern/ch8_ch14/src/command/after2/Lamp.java
new file mode 100644
index 000000000..ab604fd83
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after2/Lamp.java
@@ -0,0 +1,10 @@
+package command.after2;
+
+public class Lamp {
+ public void turnOn() {
+ System.out.println("Lamp On") ;
+ }
+ public void turnOff() {
+ System.out.println("Lamp Off") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after2/LampOffCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/after2/LampOffCommand.java
new file mode 100644
index 000000000..24dabae63
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after2/LampOffCommand.java
@@ -0,0 +1,11 @@
+package command.after2;
+
+public class LampOffCommand implements Command {
+ private Lamp theLamp;
+ public LampOffCommand(Lamp theLamp) {
+ this.theLamp = theLamp ;
+ }
+ public void execute() {
+ theLamp.turnOff() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/after2/LampOnCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/after2/LampOnCommand.java
new file mode 100644
index 000000000..442500a0a
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/after2/LampOnCommand.java
@@ -0,0 +1,11 @@
+package command.after2;
+
+public class LampOnCommand implements Command {
+ private Lamp theLamp;
+ public LampOnCommand(Lamp theLamp) {
+ this.theLamp = theLamp ;
+ }
+ public void execute() {
+ theLamp.turnOn() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before1/Button.java b/java-oop-design-pattern/ch8_ch14/src/command/before1/Button.java
new file mode 100644
index 000000000..122deda28
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before1/Button.java
@@ -0,0 +1,11 @@
+package command.before1;
+
+public class Button {
+ private Lamp theLamp ;
+ public Button(Lamp theLamp) {
+ this.theLamp = theLamp ;
+ }
+ public void pressed() {
+ theLamp.turnOn() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/command/before1/Client.java
new file mode 100644
index 000000000..a1e906e7e
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before1/Client.java
@@ -0,0 +1,9 @@
+package command.before1;
+
+public class Client {
+ public static void main(String[] args) {
+ Lamp lamp = new Lamp() ;
+ Button lampButton = new Button(lamp) ;
+ lampButton.pressed() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before1/Lamp.java b/java-oop-design-pattern/ch8_ch14/src/command/before1/Lamp.java
new file mode 100644
index 000000000..4a35aecd2
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before1/Lamp.java
@@ -0,0 +1,7 @@
+package command.before1;
+
+public class Lamp {
+ public void turnOn() {
+ System.out.println("Lamp On") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before2/Alarm.java b/java-oop-design-pattern/ch8_ch14/src/command/before2/Alarm.java
new file mode 100644
index 000000000..7b13e7c10
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before2/Alarm.java
@@ -0,0 +1,7 @@
+package command.before2;
+
+public class Alarm {
+ public void start() {
+ System.out.println("Alarming...") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before2/Button.java b/java-oop-design-pattern/ch8_ch14/src/command/before2/Button.java
new file mode 100644
index 000000000..d42e062f9
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before2/Button.java
@@ -0,0 +1,12 @@
+package command.before2;
+
+public class Button {
+ private Alarm theAlarm ;
+
+ public Button(Alarm theAlarm) {
+ this.theAlarm = theAlarm ;
+ }
+ public void pressed() {
+ theAlarm.start() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/command/before2/Client.java
new file mode 100644
index 000000000..313845859
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before2/Client.java
@@ -0,0 +1,9 @@
+package command.before2;
+
+public class Client {
+ public static void main(String[] args) {
+ Alarm alarm = new Alarm() ;
+ Button alarmButton = new Button(alarm) ;
+ alarmButton.pressed() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before3/Alarm.java b/java-oop-design-pattern/ch8_ch14/src/command/before3/Alarm.java
new file mode 100644
index 000000000..5a3f4826d
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before3/Alarm.java
@@ -0,0 +1,7 @@
+package command.before3;
+
+public class Alarm {
+ public void start() {
+ System.out.println("Alarming...") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before3/Button.java b/java-oop-design-pattern/ch8_ch14/src/command/before3/Button.java
new file mode 100644
index 000000000..a0330a866
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before3/Button.java
@@ -0,0 +1,23 @@
+package command.before3;
+
+enum Mode { LAMP, ALARM} ;
+
+public class Button {
+ private Lamp theLamp ;
+ private Alarm theAlarm ;
+ private Mode theMode ;
+
+ public Button(Lamp theLamp, Alarm theAlarm) {
+ this.theLamp = theLamp ;
+ this.theAlarm = theAlarm ;
+ }
+ public void setMode(Mode mode) {
+ this.theMode = mode ;
+ }
+ public void pressed() {
+ switch ( theMode ) {
+ case LAMP: theLamp.turnOn() ; break ;
+ case ALARM: theAlarm.start() ; break ;
+ }
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before3/Client.java b/java-oop-design-pattern/ch8_ch14/src/command/before3/Client.java
new file mode 100644
index 000000000..32350f6c9
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before3/Client.java
@@ -0,0 +1,15 @@
+package command.before3;
+
+public class Client {
+ public static void main(String[] args) {
+ Lamp lamp = new Lamp() ;
+ Alarm alarm = new Alarm() ;
+ Button button = new Button(lamp, alarm) ;
+
+ button.setMode(Mode.LAMP) ;
+ button.pressed() ;
+
+ button.setMode(Mode.ALARM) ;
+ button.pressed() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/before3/Lamp.java b/java-oop-design-pattern/ch8_ch14/src/command/before3/Lamp.java
new file mode 100644
index 000000000..8c2ade462
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/before3/Lamp.java
@@ -0,0 +1,7 @@
+package command.before3;
+
+public class Lamp {
+ public void turnOn() {
+ System.out.println("Lamp On") ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Client.java b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Client.java
new file mode 100644
index 000000000..bbabf6fa1
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Client.java
@@ -0,0 +1,30 @@
+package command.example.elevatorbutton;
+
+public class Client {
+ public static void main(String[] args) {
+ ElevatorController controller1 = new ElevatorController(1) ;
+ ElevatorController controller2 = new ElevatorController(2) ;
+
+ ElevatorManager em = new ElevatorManager(2) ;
+ em.addController(controller1) ;
+ em.addController(controller2) ;
+
+ // 1 1 ư
+ Command destinationCommand1stController = new DestinationSelectionCommand(1, controller1) ;
+ ElevatorButton destinationButton1stFloor = new ElevatorButton(destinationCommand1stController) ;
+ destinationButton1stFloor.pressed() ;
+
+
+ // 2 2 ư
+ Command destinationCommand2ndController = new DestinationSelectionCommand(2, controller2) ;
+ ElevatorButton destinationButton2ndFloor = new ElevatorButton(destinationCommand2ndController) ;
+ destinationButton2ndFloor.pressed() ;
+
+ // 2 Ʒ ̵ϱ û ư
+ Command requestDownCommand = new ElevatorRequestCommand(2, Direction.DOWN, em) ;
+ ElevatorButton requestDownFloorButton2ndFloor = new ElevatorButton(requestDownCommand) ;
+
+ // 2 Ʒ û ư
+ requestDownFloorButton2ndFloor.pressed() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Command.java b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Command.java
new file mode 100644
index 000000000..6155cd7c3
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Command.java
@@ -0,0 +1,5 @@
+package command.example.elevatorbutton;
+
+public interface Command {
+ abstract public void execute() ;
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/DestinationSelectionCommand.java b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/DestinationSelectionCommand.java
new file mode 100644
index 000000000..0db9d8d7a
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/DestinationSelectionCommand.java
@@ -0,0 +1,13 @@
+package command.example.elevatorbutton;
+
+public class DestinationSelectionCommand implements Command {
+ private ElevatorController controller ;
+ private int destination ;
+ public DestinationSelectionCommand(int destination, ElevatorController controller) {
+ this.destination = destination ;
+ this.controller = controller ;
+ }
+ public void execute() {
+ controller.gotoFloor(destination) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Direction.java b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Direction.java
new file mode 100644
index 000000000..78e89e14d
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/Direction.java
@@ -0,0 +1,5 @@
+package command.example.elevatorbutton;
+
+public enum Direction {
+ UP, DOWN
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorButton.java b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorButton.java
new file mode 100644
index 000000000..ed52fe4d6
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorButton.java
@@ -0,0 +1,11 @@
+package command.example.elevatorbutton;
+
+public class ElevatorButton {
+ private Command command ;
+ public ElevatorButton(Command command) {
+ this.command = command ;
+ }
+ public void pressed() {
+ command.execute() ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorController.java
new file mode 100644
index 000000000..7c296730b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorController.java
@@ -0,0 +1,13 @@
+package command.example.elevatorbutton;
+
+public class ElevatorController {
+ private int id ;
+ private int curFloor ;
+ public ElevatorController(int id) {
+ this.id = id ;
+ }
+ public void gotoFloor(int destination) {
+ curFloor = destination ;
+ System.out.println("Elevator [" + id + "] Current Floor: " + curFloor) ;
+ }
+}
diff --git a/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorManager.java
new file mode 100644
index 000000000..e3f26f10b
--- /dev/null
+++ b/java-oop-design-pattern/ch8_ch14/src/command/example/elevatorbutton/ElevatorManager.java
@@ -0,0 +1,21 @@
+package command.example.elevatorbutton;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ElevatorManager {
+ private List 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