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 entries = new ArrayList() ; + + public Directory(String name) { this.name = name ; } + public void addEntry(Object entry) { + entries.add(entry) ; + + if ( entry instanceof File ) ((File) entry).setDepth(depth+1) ; + if ( entry instanceof Directory ) ((Directory) entry).setDepth(depth+1) ; + } + private void setDepth(int depth) { + this.depth = depth ; + } + public void removeEntry(Object entry) { + entries.remove(entry) ; + } + public String getName() { return name ; } + public int getSize() { + int size = 0 ; + for ( Object entry: entries ) { + if ( entry instanceof File ) size += ((File) entry).getSize() ; + if ( entry instanceof Directory ) size += ((Directory) entry).getSize() ; + } + return size ; + } + public void print() { + for ( int i = 0 ; i < depth ; i ++ ) + System.out.print("\t") ; + System.out.println("[Directory] " + name + ", Size: " + getSize()) ; + + for ( Object entry: entries ) { + if ( entry instanceof File ) ((File) entry).print() ; + if ( entry instanceof Directory )((Directory) entry).print() ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/File.java b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/File.java new file mode 100644 index 000000000..0e6cd1015 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/composite/example/directory/before/File.java @@ -0,0 +1,22 @@ +package composite.example.directory.before; + +public class File { + private String name ; + private int size ; + private int depth = 0 ; + + public File(String name, int size) { + this.name = name ; + this.size = size ; + } + public void setDepth(int depth) { + this.depth = depth ; + } + public String getName() { return name ; } + public int getSize() { return size ; } + public void print() { + for ( int i = 0 ; i < depth ; i ++ ) + System.out.print("\t") ; + System.out.println("[File] " + name + ", Size: " + size) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Client.java new file mode 100644 index 000000000..20baea772 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Client.java @@ -0,0 +1,11 @@ +package decorator.after1; + +public class Client { + public static void main(String[] args) { + Display road = new RoadDisplay() ; + road.draw() ; + + Display roadWithLane = new LaneDecorator(new RoadDisplay()) ; + roadWithLane.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Display.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Display.java new file mode 100644 index 000000000..2029502a0 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/Display.java @@ -0,0 +1,5 @@ +package decorator.after1; + +public abstract class Display { + public abstract void draw() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/DisplayDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/DisplayDecorator.java new file mode 100644 index 000000000..93cef3596 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/DisplayDecorator.java @@ -0,0 +1,11 @@ +package decorator.after1; + +public class DisplayDecorator extends Display { + private Display decoratedDisplay ; + public DisplayDecorator(Display decoratedDisplay) { + this.decoratedDisplay = decoratedDisplay ; + } + public void draw() { + decoratedDisplay.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/LaneDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/LaneDecorator.java new file mode 100644 index 000000000..8b63b0230 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/LaneDecorator.java @@ -0,0 +1,14 @@ +package decorator.after1; + +public class LaneDecorator extends DisplayDecorator { + public LaneDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + public void draw() { + super.draw(); + drawLane() ; + } + private void drawLane() { + System.out.println("\t ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after1/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/RoadDisplay.java new file mode 100644 index 000000000..825169c77 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after1/RoadDisplay.java @@ -0,0 +1,7 @@ +package decorator.after1; + +public class RoadDisplay extends Display { + public void draw() { + System.out.println("⺻ ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Client.java new file mode 100644 index 000000000..f3eb886a5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Client.java @@ -0,0 +1,17 @@ +package decorator.after2; + +public class Client { + public static void main(String[] args) { + Display road = new RoadDisplay() ; + road.draw() ; + + Display roadWithLane = new LaneDecorator(new RoadDisplay()) ; + roadWithLane.draw() ; + + Display roadWithTraffic = new TrafficDecorator(new RoadDisplay()) ; + roadWithTraffic.draw() ; + + Display roadWithLaneAndTraffic = new TrafficDecorator(new LaneDecorator(new RoadDisplay())) ; + roadWithLaneAndTraffic.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Display.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Display.java new file mode 100644 index 000000000..255f05b26 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/Display.java @@ -0,0 +1,5 @@ +package decorator.after2; + +public abstract class Display { + public abstract void draw() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/DisplayDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/DisplayDecorator.java new file mode 100644 index 000000000..00b3ac8c6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/DisplayDecorator.java @@ -0,0 +1,12 @@ +package decorator.after2; + +public class DisplayDecorator extends Display { + private Display decoratedDisplay ; + + public DisplayDecorator(Display decoratedDisplay) { + this.decoratedDisplay = decoratedDisplay ; + } + public void draw() { + decoratedDisplay.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/LaneDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/LaneDecorator.java new file mode 100644 index 000000000..d1ef652b2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/LaneDecorator.java @@ -0,0 +1,17 @@ +package decorator.after2; + +public class LaneDecorator extends DisplayDecorator { + + public LaneDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + + public void draw() { + super.draw(); + drawLane() ; + } + private void drawLane() { + System.out.println("\t ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/RoadDisplay.java new file mode 100644 index 000000000..0b1d4fb40 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/RoadDisplay.java @@ -0,0 +1,9 @@ +package decorator.after2; + +public class RoadDisplay extends Display { + + public void draw() { + System.out.println("⺻ ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after2/TrafficDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/TrafficDecorator.java new file mode 100644 index 000000000..2c2824c7f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after2/TrafficDecorator.java @@ -0,0 +1,14 @@ +package decorator.after2; + +public class TrafficDecorator extends DisplayDecorator { + public TrafficDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + public void draw() { + super.draw(); + drawTraffic() ; + } + private void drawTraffic() { + System.out.println("\t뷮 ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client.java new file mode 100644 index 000000000..dc81bd8bb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client.java @@ -0,0 +1,17 @@ +package decorator.after3; + +public class Client { + public static void main(String[] args) { + Display roadWithTraffic = new TrafficDecorator(new RoadDisplay()) ; + roadWithTraffic.draw() ; + + Display roadWithLaneAndTraffic = new TrafficDecorator(new LaneDecorator(new RoadDisplay())) ; + roadWithLaneAndTraffic.draw() ; + + Display roadWithCrossingAndTraffic = new TrafficDecorator(new CrossingDecorator(new RoadDisplay())) ; + roadWithCrossingAndTraffic.draw() ; + + Display roadWithCrossingAndTrafficAndLane = new LaneDecorator(new TrafficDecorator(new CrossingDecorator(new RoadDisplay()))) ; + roadWithCrossingAndTrafficAndLane.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client2.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client2.java new file mode 100644 index 000000000..0adf57fa3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Client2.java @@ -0,0 +1,17 @@ +package decorator.after3; + +public class Client2 { + public static void main(String[] args) { + Display road = new RoadDisplay() ; + for ( String decoratorName : args ) { + if ( decoratorName.equalsIgnoreCase("Lane")) + road = new LaneDecorator(road) ; + if ( decoratorName.equalsIgnoreCase("Traffic")) + road = new TrafficDecorator(road) ; + + if ( decoratorName.equalsIgnoreCase("Crossing")) + road = new CrossingDecorator(road) ; + } + road.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/CrossingDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/CrossingDecorator.java new file mode 100644 index 000000000..af7715552 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/CrossingDecorator.java @@ -0,0 +1,14 @@ +package decorator.after3; + +public class CrossingDecorator extends DisplayDecorator { + public CrossingDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + public void draw() { + super.draw(); + drawCrossing() ; + } + private void drawCrossing() { + System.out.println("\t ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Display.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Display.java new file mode 100644 index 000000000..7f482f09c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/Display.java @@ -0,0 +1,5 @@ +package decorator.after3; + +public abstract class Display { + public abstract void draw() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/DisplayDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/DisplayDecorator.java new file mode 100644 index 000000000..cc579db0b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/DisplayDecorator.java @@ -0,0 +1,12 @@ +package decorator.after3; + +public class DisplayDecorator extends Display { + private Display decoratedDisplay ; + + public DisplayDecorator(Display decoratedDisplay) { + this.decoratedDisplay = decoratedDisplay ; + } + public void draw() { + decoratedDisplay.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/LaneDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/LaneDecorator.java new file mode 100644 index 000000000..947c743dc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/LaneDecorator.java @@ -0,0 +1,17 @@ +package decorator.after3; + +public class LaneDecorator extends DisplayDecorator { + + public LaneDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + + public void draw() { + super.draw(); + drawLane() ; + } + private void drawLane() { + System.out.println("\t ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/RoadDisplay.java new file mode 100644 index 000000000..6a301ecc3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/RoadDisplay.java @@ -0,0 +1,9 @@ +package decorator.after3; + +public class RoadDisplay extends Display { + + public void draw() { + System.out.println("⺻ ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/after3/TrafficDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/TrafficDecorator.java new file mode 100644 index 000000000..3c0acd2e3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/after3/TrafficDecorator.java @@ -0,0 +1,15 @@ +package decorator.after3; + +public class TrafficDecorator extends DisplayDecorator { + public TrafficDecorator(Display decoratedDisplay) { + super(decoratedDisplay); + } + public void draw() { + super.draw(); + drawTraffic() ; + } + private void drawTraffic() { + System.out.println("\t뷮 ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/Client.java new file mode 100644 index 000000000..fcb091f3b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/Client.java @@ -0,0 +1,11 @@ +package decorator.before1; + +public class Client { + public static void main(String[] args) { + RoadDisplay road = new RoadDisplay() ; + road.draw() ; + + RoadDisplay roadWithLane = new RoadDisplayWithLane() ; + roadWithLane.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplay.java new file mode 100644 index 000000000..f3171e621 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplay.java @@ -0,0 +1,7 @@ +package decorator.before1; + +public class RoadDisplay { + public void draw() { + System.out.println(" ⺻ ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplayWithLane.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplayWithLane.java new file mode 100644 index 000000000..7b999fbcd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before1/RoadDisplayWithLane.java @@ -0,0 +1,11 @@ +package decorator.before1; + +public class RoadDisplayWithLane extends RoadDisplay { + public void draw() { + super.draw(); + drawLane(); + } + private void drawLane() { + System.out.println(" ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/Client.java new file mode 100644 index 000000000..56920c391 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/Client.java @@ -0,0 +1,8 @@ +package decorator.before2; + +public class Client { + public static void main(String[] args) { + RoadDisplay roadWithTraffic = new RoadDisplayWithTraffic() ; + roadWithTraffic.draw() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplay.java new file mode 100644 index 000000000..12b9e3dba --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplay.java @@ -0,0 +1,9 @@ +package decorator.before2; + +public class RoadDisplay { + + public void draw() { + System.out.println(" ⺻ ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithLane.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithLane.java new file mode 100644 index 000000000..c692d7b64 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithLane.java @@ -0,0 +1,10 @@ +package decorator.before2; + +public class RoadDisplayWithLane extends RoadDisplay { + public void draw() { + super.draw(); + System.out.println(" ǥ") ; + } + + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithTraffic.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithTraffic.java new file mode 100644 index 000000000..affc0344f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before2/RoadDisplayWithTraffic.java @@ -0,0 +1,11 @@ +package decorator.before2; + +public class RoadDisplayWithTraffic extends RoadDisplay { + public void draw() { + super.draw(); + drawTraffic(); + } + private void drawTraffic() { + System.out.println("뷮 ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/Client.java new file mode 100644 index 000000000..34e4bf313 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/Client.java @@ -0,0 +1,9 @@ +package decorator.before3; + +public class Client { + public static void main(String[] args) { + RoadDisplay roadWithLandTraffic = new RoadDisplayWithLaneTraffic() ; + roadWithLandTraffic.draw() ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplay.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplay.java new file mode 100644 index 000000000..7e2729c40 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplay.java @@ -0,0 +1,9 @@ +package decorator.before3; + +public class RoadDisplay { + + public void draw() { + System.out.println(" ⺻ ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLane.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLane.java new file mode 100644 index 000000000..285df1e02 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLane.java @@ -0,0 +1,12 @@ +package decorator.before3; + +public class RoadDisplayWithLane extends RoadDisplay { + public void draw() { + super.draw(); + drawLane(); + } + private void drawLane() { + System.out.println(" ǥ") ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLaneTraffic.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLaneTraffic.java new file mode 100644 index 000000000..3e3d5996a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithLaneTraffic.java @@ -0,0 +1,16 @@ +package decorator.before3; + +public class RoadDisplayWithLaneTraffic extends RoadDisplay { + public void draw() { + super.draw(); + drawLane(); + drawTraffic(); + } + private void drawTraffic() { + System.out.println("뷮 ǥ") ; + } + + private void drawLane() { + System.out.println(" ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithTraffic.java b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithTraffic.java new file mode 100644 index 000000000..a212210a6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/before3/RoadDisplayWithTraffic.java @@ -0,0 +1,11 @@ +package decorator.before3; + +public class RoadDisplayWithTraffic extends RoadDisplay { + public void draw() { + super.draw(); + drawTraffic(); + } + private void drawTraffic() { + System.out.println("뷮 ǥ") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/AirBagDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/AirBagDecorator.java new file mode 100644 index 000000000..54a56ce54 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/AirBagDecorator.java @@ -0,0 +1,22 @@ +package decorator.example.caroption; + +public class AirBagDecorator extends CarOptionDecorator { + private int airBagPrice ; + public AirBagDecorator(CarComponent decoratedCar, int airBagPrice) { + super(decoratedCar); + this.airBagPrice = airBagPrice ; + } + public int getPrice() { + int decoratedCarPrice = super.getPrice() ; + int airBagPrice = getAirBagPrice() ; + + return decoratedCarPrice + airBagPrice ; + } + private int getAirBagPrice() { + return airBagPrice ; + } + public String getCarInfo() { + return super.getCarInfo() + " with Air Bag" ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/BasicCar.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/BasicCar.java new file mode 100644 index 000000000..f238fb955 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/BasicCar.java @@ -0,0 +1,14 @@ +package decorator.example.caroption; + +public class BasicCar extends CarComponent { + private int price ; + public BasicCar(int price) { + this.price = price ; + } + public int getPrice() { + return price ; + } + public String getCarInfo() { + return "Car" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarComponent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarComponent.java new file mode 100644 index 000000000..b59d08207 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarComponent.java @@ -0,0 +1,6 @@ +package decorator.example.caroption; + +public abstract class CarComponent { + public abstract int getPrice() ; + public abstract String getCarInfo() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarOptionDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarOptionDecorator.java new file mode 100644 index 000000000..51b5b259d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/CarOptionDecorator.java @@ -0,0 +1,14 @@ +package decorator.example.caroption; + +public class CarOptionDecorator extends CarComponent { + private CarComponent decoratedCar ; + public CarOptionDecorator(CarComponent decoratedCar) { + this.decoratedCar = decoratedCar ; + } + public int getPrice() { + return decoratedCar.getPrice() ; + } + public String getCarInfo() { + return decoratedCar.getCarInfo() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/Client.java new file mode 100644 index 000000000..ecd027e68 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/Client.java @@ -0,0 +1,42 @@ +package decorator.example.caroption; + +import decorator.after3.CrossingDecorator; +import decorator.after3.LaneDecorator; +import decorator.after3.TrafficDecorator; + +public class Client { + public static void main(String[] args) { + CarComponent car = new BasicCar(1000) ; + for ( String decoratorName : args ) { + if ( decoratorName.equalsIgnoreCase("AirBag")) + car = new AirBagDecorator(car, 100) ; + if ( decoratorName.equalsIgnoreCase("ESC")) + car = new ESCDecorator(car, 50) ; + + if ( decoratorName.equalsIgnoreCase("Navi")) + car = new NaviDecorator(car, 30) ; + + if ( decoratorName.equalsIgnoreCase("SCC")) + car = new SCCDecorator(car, 70) ; + } + System.out.println(car.getPrice()) ; + System.out.println(car.getCarInfo()) ; + /* + CarComponent basic = new BasicCar(1000) ; + System.out.println(basic.getPrice()) ; + + CarComponent carWithAriBag = new AirBagDecorator(basic, 100); + System.out.println(carWithAriBag.getPrice()) ; + + CarComponent carWithAriBagAndESC = new ESCDecorator(carWithAriBag, 50) ; + System.out.println(carWithAriBagAndESC.getPrice()) ; + + CarComponent carWithAriBagAndNavi = new NaviDecorator(carWithAriBag, 30) ; + System.out.println(carWithAriBagAndNavi.getPrice()) ; + + CarComponent carWithAriBagAndESCAndSSC = new SSCDecorator(carWithAriBagAndESC, 70) ; + System.out.println(carWithAriBagAndESCAndSSC.getPrice()) ; + */ + + } +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/ESCDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/ESCDecorator.java new file mode 100644 index 000000000..f3a88ca80 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/ESCDecorator.java @@ -0,0 +1,21 @@ +package decorator.example.caroption; + +public class ESCDecorator extends CarOptionDecorator { + private int escPrice ; + public ESCDecorator(CarComponent decoratedCar, int escPrice) { + super(decoratedCar); + this.escPrice = escPrice ; + } + public int getPrice() { + int decoratedCarPrice = super.getPrice() ; + int escPrice = getESCPrice() ; + + return decoratedCarPrice + escPrice ; + } + private int getESCPrice() { + return escPrice ; + } + public String getCarInfo() { + return super.getCarInfo() + " with Electronic Stability Control" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/NaviDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/NaviDecorator.java new file mode 100644 index 000000000..4e2d41018 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/NaviDecorator.java @@ -0,0 +1,21 @@ +package decorator.example.caroption; + +public class NaviDecorator extends CarOptionDecorator { + private int naviPrice ; + public NaviDecorator(CarComponent decoratedCar, int naviPrice) { + super(decoratedCar); + this.naviPrice = naviPrice ; + } + public int getPrice() { + int decoratedCarPrice = super.getPrice() ; + int naviPrice = getNaviPrice() ; + + return decoratedCarPrice + naviPrice ; + } + private int getNaviPrice() { + return naviPrice ; + } + public String getCarInfo() { + return super.getCarInfo() + " with Navigation" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/SCCDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/SCCDecorator.java new file mode 100644 index 000000000..0211e5d51 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/caroption/SCCDecorator.java @@ -0,0 +1,21 @@ +package decorator.example.caroption; + +public class SCCDecorator extends CarOptionDecorator { + private int sccPrice ; + public SCCDecorator(CarComponent decoratedCar, int sccPrice) { + super(decoratedCar); + this.sccPrice = sccPrice ; + } + public int getPrice() { + int decoratedCarPrice = super.getPrice() ; + int sscPrice = getSCCPrice() ; + + return decoratedCarPrice + sscPrice ; + } + private int getSCCPrice() { + return sccPrice ; + } + public String getCarInfo() { + return super.getCarInfo() + " with Smart Cruise Conrol" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/BasicEMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/BasicEMailContent.java new file mode 100644 index 000000000..4d39022d6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/BasicEMailContent.java @@ -0,0 +1,9 @@ +package decorator.example.email; + +public class BasicEMailContent extends EMailContent { + private String content; + public BasicEMailContent(String content) { this.content = content; } + public String getContent() { + return content; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/Client.java new file mode 100644 index 000000000..e63ededcc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/Client.java @@ -0,0 +1,17 @@ +package decorator.example.email; + +public class Client { + public static void main(String[] args) { + EMailContent simple = new BasicEMailContent("Hello") ; + System.out.println(simple.getContent()) ; + + EMailContent external = new ExternalDecorator(simple); + System.out.println(external.getContent()) ; + + EMailContent secure = new SecureDecorator(simple) ; + System.out.println(secure.getContent()) ; + + EMailContent secureAfterExternal = new SecureDecorator(external) ; + System.out.println(secureAfterExternal.getContent()) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ContentDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ContentDecorator.java new file mode 100644 index 000000000..287a27d21 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ContentDecorator.java @@ -0,0 +1,11 @@ +package decorator.example.email; + +public abstract class ContentDecorator extends EMailContent { + private EMailContent decoratedContent ; + public ContentDecorator(EMailContent decoratedContent) { + this.decoratedContent = decoratedContent ; + } + public String getContent() { + return decoratedContent.getContent() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/EMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/EMailContent.java new file mode 100644 index 000000000..8c2d2a658 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/EMailContent.java @@ -0,0 +1,5 @@ +package decorator.example.email; + +public abstract class EMailContent { + public abstract String getContent(); +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ExternalDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ExternalDecorator.java new file mode 100644 index 000000000..22462748e --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/ExternalDecorator.java @@ -0,0 +1,15 @@ +package decorator.example.email; + +public class ExternalDecorator extends ContentDecorator { + public ExternalDecorator(EMailContent decoratedContent) { + super(decoratedContent); + } + public String getContent() { + String content = super.getContent() ; + String externalContent = addDisclaimer(content) ; + return externalContent ; + } + private String addDisclaimer(String content) { + return content + " Company Disclaimer"; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/SecureDecorator.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/SecureDecorator.java new file mode 100644 index 000000000..0643ffe9a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/SecureDecorator.java @@ -0,0 +1,15 @@ +package decorator.example.email; + +public class SecureDecorator extends ContentDecorator { + public SecureDecorator(EMailContent decoratedContent) { + super(decoratedContent); + } + public String getContent() { + String content = super.getContent() ; + String encryptedContent = encrypt(content) ; + return encryptedContent ; + } + private String encrypt(String content) { + return content + " Encrypted"; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/BasicEMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/BasicEMailContent.java new file mode 100644 index 000000000..a3fa82eb4 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/BasicEMailContent.java @@ -0,0 +1,9 @@ +package decorator.example.email.before; + +public class BasicEMailContent { + private String content; + public BasicEMailContent(String content) { this.content = content; } + public String getContent() { + return content; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/Client.java new file mode 100644 index 000000000..ba8cf2ee1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/Client.java @@ -0,0 +1,14 @@ +package decorator.example.email.before; + +public class Client { + public static void main(String[] args) { + BasicEMailContent simple = new BasicEMailContent("Hello") ; + System.out.println(simple.getContent()) ; + + ExternalEMailContent external = new ExternalEMailContent("Hello"); + System.out.println(external.getContent()) ; + + SecureEMailContent secure = new SecureEMailContent("Hello") ; + System.out.println(secure.getContent()) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/ExternalEMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/ExternalEMailContent.java new file mode 100644 index 000000000..d332b0b07 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/ExternalEMailContent.java @@ -0,0 +1,15 @@ +package decorator.example.email.before; + +public class ExternalEMailContent extends BasicEMailContent { + public ExternalEMailContent(String content) { + super(content); + } + public String getContent() { + String content = super.getContent() ; + String externalContent = addDisclaimer(content) ; + return externalContent ; + } + private String addDisclaimer(String content) { + return content + " Company Disclaimer"; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/SecureEMailContent.java b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/SecureEMailContent.java new file mode 100644 index 000000000..a9bdbd000 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/decorator/example/email/before/SecureEMailContent.java @@ -0,0 +1,15 @@ +package decorator.example.email.before; + +public class SecureEMailContent extends BasicEMailContent { + public SecureEMailContent(String content) { + super(content); + } + public String getContent() { + String content = super.getContent() ; + String encryptedContent = encrypt(content) ; + return encryptedContent ; + } + private String encrypt(String content) { + return content + " Encrypted"; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Client.java new file mode 100644 index 000000000..315bf1060 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Client.java @@ -0,0 +1,14 @@ +package factorymethod.after1; + +public class Client { + public static void main(String[] args) { + ElevatorManager emWithResponseTimerScheduler = new ElevatorManager(2, SchedulingStrategyID.RESPONSE_TIME) ; + emWithResponseTimerScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithThroughputScheduler = new ElevatorManager(2, SchedulingStrategyID.THROUGHPUT) ; + emWithThroughputScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithDynamicScheduler = new ElevatorManager(2, SchedulingStrategyID.DYNAMIC) ; + emWithDynamicScheduler.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Direction.java new file mode 100644 index 000000000..8ab5c54b4 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.after1; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorController.java new file mode 100644 index 000000000..58ca3da2d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.after1; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorManager.java new file mode 100644 index 000000000..af2b83a93 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorManager.java @@ -0,0 +1,32 @@ +package factorymethod.after1; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import factorymethod.before1.ElevatorController; + +public class ElevatorManager { + private List controllers ; + private SchedulingStrategyID strategyID ; + + public ElevatorManager(int controllerCount, SchedulingStrategyID strategyID) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + this.strategyID = strategyID ; + } + public void setStrategyID(SchedulingStrategyID strategyID) { + this.strategyID = strategyID; + } + void requestElevator(int destination, Direction direction) { + ElevatorScheduler scheduler = SchedulerFactory.getScheduler(strategyID) ; + System.out.println(scheduler) ; // Singleton Pattern ƴ϶ Scheduler Object ٸ ȴ. + + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorScheduler.java new file mode 100644 index 000000000..92dc411a2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ElevatorScheduler.java @@ -0,0 +1,7 @@ +package factorymethod.after1; + +public interface ElevatorScheduler { + + public int selectElevator(ElevatorManager elevatorManager, int destination, Direction direction); + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ResponseTimeScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ResponseTimeScheduler.java new file mode 100644 index 000000000..60810eb13 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ResponseTimeScheduler.java @@ -0,0 +1,8 @@ +package factorymethod.after1; + +public class ResponseTimeScheduler implements ElevatorScheduler { + + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 1 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulerFactory.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulerFactory.java new file mode 100644 index 000000000..d78940bc6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulerFactory.java @@ -0,0 +1,23 @@ +package factorymethod.after1; + +import java.util.Calendar; + +// ũ ̿ singleton ̶ +public class SchedulerFactory { + public static ElevatorScheduler getScheduler(SchedulingStrategyID strategyID) { + ElevatorScheduler scheduler = null ; + switch ( strategyID ) { + case RESPONSE_TIME : scheduler = new ResponseTimeScheduler() ; break ; + case THROUGHPUT : scheduler = new ThroughputScheduler() ; break ; + case DYNAMIC : { + int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) ; + if ( hour < 12 ) // + scheduler = new ResponseTimeScheduler() ; + else // + scheduler = new ThroughputScheduler() ; + break ; + } + } + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulingStrategyID.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulingStrategyID.java new file mode 100644 index 000000000..47e2ff55f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/SchedulingStrategyID.java @@ -0,0 +1,3 @@ +package factorymethod.after1; + +public enum SchedulingStrategyID { RESPONSE_TIME, THROUGHPUT, DYNAMIC } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ThroughputScheduler.java new file mode 100644 index 000000000..bd1bc17a6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after1/ThroughputScheduler.java @@ -0,0 +1,12 @@ +package factorymethod.after1; + +public class ThroughputScheduler implements ElevatorScheduler { + + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + + return 0 ; + + } + + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Client.java new file mode 100644 index 000000000..9c70459b9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Client.java @@ -0,0 +1,14 @@ +package factorymethod.after2; + +public class Client { + public static void main(String[] args) { + ElevatorManager emWithResponseTimerScheduler = new ElevatorManager(2, SchedulingStrategyID.RESPONSE_TIME) ; + emWithResponseTimerScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithThroughputScheduler = new ElevatorManager(2, SchedulingStrategyID.THROUGHPUT) ; + emWithThroughputScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithDynamicScheduler = new ElevatorManager(2, SchedulingStrategyID.DYNAMIC) ; + emWithDynamicScheduler.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Direction.java new file mode 100644 index 000000000..efdf9cf4b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.after2; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorController.java new file mode 100644 index 000000000..7b48919bb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.after2; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorManager.java new file mode 100644 index 000000000..00f620a8a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorManager.java @@ -0,0 +1,25 @@ +package factorymethod.after2; + +import java.util.ArrayList; +import java.util.List; + +public class ElevatorManager { + private List controllers ; + private SchedulingStrategyID strategyID ; + + public ElevatorManager(int controllerCount, SchedulingStrategyID strategyID) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + this.strategyID = strategyID ; + } + void requestElevator(int destination, Direction direction) { + ElevatorScheduler scheduler = SchedulerFactory.getScheduler(strategyID) ; + System.out.println(scheduler) ; // Singleton Pattern ƴ϶ Scheduler Object ϴ + + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorScheduler.java new file mode 100644 index 000000000..586ea45ac --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ElevatorScheduler.java @@ -0,0 +1,5 @@ +package factorymethod.after2; + +public interface ElevatorScheduler { + public int selectElevator(ElevatorManager elevatorManager, int destination, Direction direction); +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ResponseTimeScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ResponseTimeScheduler.java new file mode 100644 index 000000000..953074cba --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ResponseTimeScheduler.java @@ -0,0 +1,14 @@ +package factorymethod.after2; + +public class ResponseTimeScheduler implements ElevatorScheduler { + private static ElevatorScheduler scheduler ; + private ResponseTimeScheduler() {} + public static ElevatorScheduler getInstance() { + if ( scheduler == null ) + scheduler = new ResponseTimeScheduler() ; + return scheduler ; + } + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 1 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulerFactory.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulerFactory.java new file mode 100644 index 000000000..83a044540 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulerFactory.java @@ -0,0 +1,23 @@ +package factorymethod.after2; + +import java.util.Calendar; + +// 2 Scheduler Singleton +public class SchedulerFactory { + public static ElevatorScheduler getScheduler(SchedulingStrategyID strategyID) { + ElevatorScheduler scheduler = null ; + switch ( strategyID ) { + case RESPONSE_TIME : scheduler = ResponseTimeScheduler.getInstance() ; break ; + case THROUGHPUT : scheduler = ThroughputScheduler.getInstance() ; break ; + case DYNAMIC : { + int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) ; + if ( hour < 12 ) // + scheduler = ResponseTimeScheduler.getInstance() ; + else // + scheduler = ThroughputScheduler.getInstance() ; + break ; + } + } + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulingStrategyID.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulingStrategyID.java new file mode 100644 index 000000000..33963190d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/SchedulingStrategyID.java @@ -0,0 +1,3 @@ +package factorymethod.after2; + +public enum SchedulingStrategyID { RESPONSE_TIME, THROUGHPUT, DYNAMIC } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ThroughputScheduler.java new file mode 100644 index 000000000..f345c3f77 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after2/ThroughputScheduler.java @@ -0,0 +1,14 @@ +package factorymethod.after2; + +public class ThroughputScheduler implements ElevatorScheduler { + private static ElevatorScheduler scheduler ; + private ThroughputScheduler() {} + public static ElevatorScheduler getInstance() { + if ( scheduler == null ) + scheduler = new ThroughputScheduler() ; + return scheduler ; + } + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 0 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Client.java new file mode 100644 index 000000000..79b5d3979 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Client.java @@ -0,0 +1,14 @@ +package factorymethod.after3; + +public class Client { + public static void main(String[] args) { + ElevatorManager emWithResponseTimerScheduler = new ElevatorManagerWithResponseTimeScheduling(2) ; + emWithResponseTimerScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithThroughputScheduler = new ElevatorManagerWithThroughputScheduling(2) ; + emWithThroughputScheduler.requestElevator(10, Direction.UP) ; + + ElevatorManager emWithDynamicScheduler = new ElevatorManagerWithDynamicScheduling(2) ; + emWithDynamicScheduler.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Direction.java new file mode 100644 index 000000000..4cc34400b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.after3; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorController.java new file mode 100644 index 000000000..2d45289a0 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.after3; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManager.java new file mode 100644 index 000000000..a82640652 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManager.java @@ -0,0 +1,22 @@ +package factorymethod.after3; + +import java.util.ArrayList; +import java.util.List; + +public abstract class ElevatorManager { + private List controllers ; + public ElevatorManager(int controllerCount) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + } + protected abstract ElevatorScheduler getScheduler() ; + void requestElevator(int destination, Direction direction) { + ElevatorScheduler scheduler = getScheduler() ; + + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithDynamicScheduling.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithDynamicScheduling.java new file mode 100644 index 000000000..dad44cf23 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithDynamicScheduling.java @@ -0,0 +1,18 @@ +package factorymethod.after3; + +import java.util.Calendar; + +public class ElevatorManagerWithDynamicScheduling extends ElevatorManager { + public ElevatorManagerWithDynamicScheduling(int controllerCount) { + super(controllerCount) ; + } + protected ElevatorScheduler getScheduler() { + ElevatorScheduler scheduler = null ; + int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) ; + if ( hour < 12 ) // + scheduler = ResponseTimeScheduler.getInstance() ; + else // + scheduler = ThroughputScheduler.getInstance() ; + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.java new file mode 100644 index 000000000..d87500ed7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithResponseTimeScheduling.java @@ -0,0 +1,11 @@ +package factorymethod.after3; + +public class ElevatorManagerWithResponseTimeScheduling extends ElevatorManager { + public ElevatorManagerWithResponseTimeScheduling(int controllerCount) { + super(controllerCount) ; + } + protected ElevatorScheduler getScheduler() { + ElevatorScheduler scheduler = ResponseTimeScheduler.getInstance() ; + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithThroughputScheduling.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithThroughputScheduling.java new file mode 100644 index 000000000..1442cac80 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorManagerWithThroughputScheduling.java @@ -0,0 +1,12 @@ +package factorymethod.after3; + + +public class ElevatorManagerWithThroughputScheduling extends ElevatorManager { + public ElevatorManagerWithThroughputScheduling(int controllerCount) { + super(controllerCount) ; + } + protected ElevatorScheduler getScheduler() { + ElevatorScheduler scheduler = ThroughputScheduler.getInstance() ; + return scheduler ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorScheduler.java new file mode 100644 index 000000000..597877b37 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ElevatorScheduler.java @@ -0,0 +1,5 @@ +package factorymethod.after3; + +public interface ElevatorScheduler { + public int selectElevator(ElevatorManager elevatorManager, int destination, Direction direction); +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ResponseTimeScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ResponseTimeScheduler.java new file mode 100644 index 000000000..441157e29 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ResponseTimeScheduler.java @@ -0,0 +1,14 @@ +package factorymethod.after3; + +public class ResponseTimeScheduler implements ElevatorScheduler { + private static ElevatorScheduler scheduler ; + private ResponseTimeScheduler() {} + public static ElevatorScheduler getInstance() { + if ( scheduler == null ) + scheduler = new ResponseTimeScheduler() ; + return scheduler ; + } + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 1 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ThroughputScheduler.java new file mode 100644 index 000000000..c7ecb6467 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/after3/ThroughputScheduler.java @@ -0,0 +1,14 @@ +package factorymethod.after3; + +public class ThroughputScheduler implements ElevatorScheduler { + private static ElevatorScheduler scheduler ; + private ThroughputScheduler() {} + public static ElevatorScheduler getInstance() { + if ( scheduler == null ) + scheduler = new ThroughputScheduler() ; + return scheduler ; + } + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 0 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Client.java new file mode 100644 index 000000000..7c7ffa51b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Client.java @@ -0,0 +1,8 @@ +package factorymethod.before1; + +public class Client { + public static void main(String[] args) { + ElevatorManager em = new ElevatorManager(2) ; + em.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Direction.java new file mode 100644 index 000000000..54718eb05 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.before1; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorController.java new file mode 100644 index 000000000..bb1e01578 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.before1; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorManager.java new file mode 100644 index 000000000..739189d08 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ElevatorManager.java @@ -0,0 +1,21 @@ +package factorymethod.before1; + +import java.util.ArrayList; +import java.util.List; + +public class ElevatorManager { + private List controllers ; + private ThroughputScheduler scheduler ; + public ElevatorManager(int controllerCount) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + scheduler = new ThroughputScheduler() ; + } + void requestElevator(int destination, Direction direction) { + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ThroughputScheduler.java new file mode 100644 index 000000000..0ef465465 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before1/ThroughputScheduler.java @@ -0,0 +1,7 @@ +package factorymethod.before1; + +public class ThroughputScheduler { + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 0 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Client.java new file mode 100644 index 000000000..4b923e104 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Client.java @@ -0,0 +1,9 @@ +package factorymethod.before2; + +public class Client { + public static void main(String[] args) { + ElevatorManager em = new ElevatorManager(2) ; + + em.requestElevator(10, Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Direction.java new file mode 100644 index 000000000..22a2f86af --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/Direction.java @@ -0,0 +1,5 @@ +package factorymethod.before2; + +public enum Direction { + UP, DOWN +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorController.java new file mode 100644 index 000000000..2a2d53fb8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorController.java @@ -0,0 +1,15 @@ +package factorymethod.before2; + +public class ElevatorController { + private int id ; + private int curFloor ; + public ElevatorController(int id) { + this.id = id ; + curFloor = 1 ; + } + public void gotoFloor(int destination) { + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorManager.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorManager.java new file mode 100644 index 000000000..ea59708c8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorManager.java @@ -0,0 +1,30 @@ +package factorymethod.before2; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import factorymethod.before1.ElevatorController; + +public class ElevatorManager { + private List controllers ; + public ElevatorManager(int controllerCount) { + controllers = new ArrayList(controllerCount) ; + for ( int i = 0 ; i < controllerCount ; i ++ ) { + ElevatorController controller = new ElevatorController(i+1) ; + controllers.add(controller) ; + } + } + void requestElevator(int destination, Direction direction) { + ElevatorScheduler scheduler ; + // 0..23 + int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) ; + if ( hour < 12 ) // + scheduler = new ResponseTimeScheduler() ; + else // + scheduler = new ThroughputScheduler() ; + + int selectedElevator = scheduler.selectElevator(this, destination, direction) ; + controllers.get(selectedElevator).gotoFloor(destination) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorScheduler.java new file mode 100644 index 000000000..5fc39f2c5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ElevatorScheduler.java @@ -0,0 +1,5 @@ +package factorymethod.before2; + +public interface ElevatorScheduler { + public int selectElevator(ElevatorManager elevatorManager, int destination, Direction direction); +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ResponseTimeScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ResponseTimeScheduler.java new file mode 100644 index 000000000..4f6e30aca --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ResponseTimeScheduler.java @@ -0,0 +1,7 @@ +package factorymethod.before2; + +public class ResponseTimeScheduler implements ElevatorScheduler { + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 1 ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ThroughputScheduler.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ThroughputScheduler.java new file mode 100644 index 000000000..e22acbdc7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/before2/ThroughputScheduler.java @@ -0,0 +1,8 @@ +package factorymethod.before2; + +public class ThroughputScheduler implements ElevatorScheduler { + public int selectElevator(ElevatorManager manager, int destination, Direction direction) { + return 0 ; + + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Car.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Car.java new file mode 100644 index 000000000..e1dcc83d0 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Car.java @@ -0,0 +1,48 @@ +package factorymethod.example.carmode; + +public class Car { + private int speed ; + + private CarState normalState ; + private CarState limpState ; + + private CarState curState ; + + public Car() { + normalState = CarStateFactory.getState(CarStateID.NORMAL, this) ; + limpState = CarStateFactory.getState(CarStateID.LIMP_MODE, this) ; + curState = normalState ; + } + public CarState getLimpMode() { + return limpState ; + } + public void setStae(CarState state) { + curState = state ; + } + + public void stop() { + curState.stop() ; + } + public void speedDown(int targetSpeed) { + curState.speedDown(targetSpeed) ; + } + public void engineFailedDetected() { + curState.engineFailedDetected() ; + } + public void speedUp(int targetSpeed) { + curState.speedUp(targetSpeed) ; + } + public void engineRepaired() { + curState.engineRepaired() ; + } + + public int getSpeed() { + return speed; + } + public void setSpeed(int speed) { + this.speed = speed; + } + public CarState getNormalMode() { + return normalState ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarState.java new file mode 100644 index 000000000..b5fbeef7b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarState.java @@ -0,0 +1,23 @@ +package factorymethod.example.carmode; + +public abstract class CarState { + protected Car car; + protected CarState(Car car) { + this.car = car ; + } + public void stop() { + car.setSpeed(0) ; + } + public void speedDown(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed < car.getSpeed() ) + car.setSpeed(targetSpeed) ; + + System.out.println(" ==> " + car.getSpeed()) ; + + } + public abstract void speedUp(int targetSpeed) ; + public abstract void engineFailedDetected() ; + public abstract void engineRepaired() ; + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateFactory.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateFactory.java new file mode 100644 index 000000000..532cf5f45 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateFactory.java @@ -0,0 +1,12 @@ +package factorymethod.example.carmode; + +public class CarStateFactory { + public static CarState getState(CarStateID stateID, Car car) { + CarState state = null ; + switch ( stateID ) { + case NORMAL : state = NormalState.getInstance(car) ; break ; + case LIMP_MODE : state = LimpState.getInstance(car) ; break ; + } + return state ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateID.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateID.java new file mode 100644 index 000000000..1106e9382 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/CarStateID.java @@ -0,0 +1,5 @@ +package factorymethod.example.carmode; + +public enum CarStateID { + NORMAL, LIMP_MODE +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Client.java new file mode 100644 index 000000000..f23151830 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/Client.java @@ -0,0 +1,26 @@ +package factorymethod.example.carmode; + +public class Client { + + public static void main(String[] args) { + Car car = new Car() ; + + car.speedUp(150) ; + car.speedDown(130) ; + + car.engineFailedDetected() ; + + car.speedUp(100) ; + + car.speedDown(30) ; + + car.speedUp(50) ; + + car.speedUp(100) ; + + car.engineRepaired() ; + + car.speedUp(100) ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/LimpState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/LimpState.java new file mode 100644 index 000000000..2f6617ad6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/LimpState.java @@ -0,0 +1,27 @@ +package factorymethod.example.carmode; + +public class LimpState extends CarState { + public static final int LIMP_MODE_MAX_SPEED = 60 ; + private static CarState state ; + + private LimpState(Car car) { + super(car) ; + } + public void speedUp(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed > car.getSpeed() && targetSpeed < LIMP_MODE_MAX_SPEED ) + car.setSpeed(targetSpeed) ; + System.out.println(" ==> " + car.getSpeed()) ; + } + public void engineFailedDetected() { + // ̹ Limp Mode + } + public static CarState getInstance(Car car) { + if ( state == null ) + state = new LimpState(car) ; + return state ; + } + public void engineRepaired() { + car.setStae(car.getNormalMode()) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/NormalState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/NormalState.java new file mode 100644 index 000000000..b70aa966a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/NormalState.java @@ -0,0 +1,30 @@ +package factorymethod.example.carmode; + +public class NormalState extends CarState { + private static CarState state ; + + private NormalState(Car car) { + super(car) ; + } + public void speedUp(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed > car.getSpeed() ) + car.setSpeed(targetSpeed) ; + System.out.println(" ==> " + car.getSpeed()) ; + } + public void engineFailedDetected() { + System.out.print("Speed: " + car.getSpeed()) ; + car.setSpeed(LimpState.LIMP_MODE_MAX_SPEED) ; + System.out.println(" ==> " + car.getSpeed()) ; + + car.setStae(car.getLimpMode()) ; + } + public static CarState getInstance(Car car) { + if ( state == null ) + state = new NormalState(car) ; + return state ; + } + public void engineRepaired() { + System.out.println("Unexpted Event") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Car.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Car.java new file mode 100644 index 000000000..c2f7bb775 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Car.java @@ -0,0 +1,44 @@ +package factorymethod.example.carmode.before; + +public class Car { + private int speed ; + private CarState normalState ; + private CarState limpState ; + private CarState curState ; + + public Car() { + normalState = new NormalState(this) ; + limpState = new LimpState(this) ; + curState = normalState ; + } + public CarState getLimpMode() { + return limpState ; + } + public void setStae(CarState state) { + curState = state ; + } + public void stop() { + curState.stop() ; + } + public void speedDown(int targetSpeed) { + curState.speedDown(targetSpeed) ; + } + public void engineFailedDetected() { + curState.engineFailedDetected() ; + } + public void speedUp(int targetSpeed) { + curState.speedUp(targetSpeed) ; + } + public void engineRepaired() { + curState.engineRepaired() ; + } + public int getSpeed() { + return speed; + } + public void setSpeed(int speed) { + this.speed = speed; + } + public CarState getNormalMode() { + return normalState ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/CarState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/CarState.java new file mode 100644 index 000000000..a3947ecba --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/CarState.java @@ -0,0 +1,23 @@ +package factorymethod.example.carmode.before; + +public abstract class CarState { + protected Car car; + protected CarState(Car car) { + this.car = car ; + } + public void stop() { + car.setSpeed(0) ; + } + public void speedDown(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed < car.getSpeed() ) + car.setSpeed(targetSpeed) ; + + System.out.println(" ==> " + car.getSpeed()) ; + + } + public abstract void speedUp(int targetSpeed) ; + public abstract void engineFailedDetected() ; + public abstract void engineRepaired() ; + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Client.java new file mode 100644 index 000000000..9eb72508a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/Client.java @@ -0,0 +1,26 @@ +package factorymethod.example.carmode.before; + +public class Client { + + public static void main(String[] args) { + Car car = new Car() ; + + car.speedUp(150) ; + car.speedDown(130) ; + + car.engineFailedDetected() ; + + car.speedUp(100) ; + + car.speedDown(30) ; + + car.speedUp(50) ; + + car.speedUp(100) ; + + car.engineRepaired() ; + + car.speedUp(100) ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/LimpState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/LimpState.java new file mode 100644 index 000000000..5e312607d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/LimpState.java @@ -0,0 +1,20 @@ +package factorymethod.example.carmode.before; + +public class LimpState extends CarState { + public static final int LIMP_MODE_MAX_SPEED = 60 ; + public LimpState(Car car) { + super(car) ; + } + public void speedUp(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed > car.getSpeed() && targetSpeed < LIMP_MODE_MAX_SPEED ) + car.setSpeed(targetSpeed) ; + System.out.println(" ==> " + car.getSpeed()) ; + } + public void engineFailedDetected() { + // ̹ Limp Mode + } + public void engineRepaired() { + car.setStae(car.getNormalMode()) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/NormalState.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/NormalState.java new file mode 100644 index 000000000..6d3ced481 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/carmode/before/NormalState.java @@ -0,0 +1,23 @@ +package factorymethod.example.carmode.before; + +public class NormalState extends CarState { + public NormalState(Car car) { + super(car) ; + } + public void speedUp(int targetSpeed) { + System.out.print("Speed: " + car.getSpeed()) ; + if ( targetSpeed > car.getSpeed() ) + car.setSpeed(targetSpeed) ; + System.out.println(" ==> " + car.getSpeed()) ; + } + public void engineFailedDetected() { + System.out.print("Speed: " + car.getSpeed()) ; + car.setSpeed(LimpState.LIMP_MODE_MAX_SPEED) ; + System.out.println(" ==> " + car.getSpeed()) ; + + car.setStae(car.getLimpMode()) ; + } + public void engineRepaired() { + System.out.println("Unexpted Event") ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Client.java new file mode 100644 index 000000000..df2519b2f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Client.java @@ -0,0 +1,15 @@ +package factorymethod.example.motor; + +public class Client { + public static void main(String[] args) { + Motor lgMotor = MotorFactory.getMotor(MotorVendorID.LG) ; + ElevatorController controller1 = new ElevatorController(1, lgMotor) ; + controller1.gotoFloor(5) ; + controller1.gotoFloor(3) ; + + Motor hyundaiMotor = MotorFactory.getMotor(MotorVendorID.HYUNDAI) ; + ElevatorController controller2 = new ElevatorController(2, hyundaiMotor) ; + controller2.gotoFloor(4) ; + controller2.gotoFloor(6) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Direction.java new file mode 100644 index 000000000..b05fc60bc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Direction.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/ElevatorController.java new file mode 100644 index 000000000..a96499727 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/ElevatorController.java @@ -0,0 +1,28 @@ +package factorymethod.example.motor; + +public class ElevatorController { + private int id ; + private int curFloor = 1 ; + private Motor motor ; + public ElevatorController(int id, Motor motor) { + this.id = id ; + this.motor = motor ; + } + public void gotoFloor(int destination) { + if ( destination == curFloor ) return ; + + Direction direction ; + if ( destination > curFloor ) + direction = Direction.UP ; + else + direction = Direction.DOWN ; + + motor.move(direction) ; + + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor + " with " + motor.getClass().getName() ) ; + + motor.stop() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/HyundaiMotor.java new file mode 100644 index 000000000..62084e31c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/HyundaiMotor.java @@ -0,0 +1,7 @@ +package factorymethod.example.motor; + +public class HyundaiMotor extends Motor { + protected void moveMotor(Direction direction) { + System.out.println("move Hyundai Motor " + direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/LGMotor.java new file mode 100644 index 000000000..d21237664 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/LGMotor.java @@ -0,0 +1,7 @@ +package factorymethod.example.motor; + +public class LGMotor extends Motor { + protected void moveMotor(Direction direction) { + System.out.println("move LG Motor " + direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Motor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Motor.java new file mode 100644 index 000000000..a68d52d5f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/Motor.java @@ -0,0 +1,24 @@ +package factorymethod.example.motor; + +public abstract class Motor { + private MotorStatus motorStatus ; + public Motor() { + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + moveMotor(direction) ; + setMotorStatus(MotorStatus.MOVING) ; + } + protected abstract void moveMotor(Direction direction) ; + public void stop() { + motorStatus = MotorStatus.STOPPED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorFactory.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorFactory.java new file mode 100644 index 000000000..4d3d6ace9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorFactory.java @@ -0,0 +1,13 @@ +package factorymethod.example.motor; + +public class MotorFactory { + public static Motor getMotor(MotorVendorID vendorID) { + Motor motor = null ; + switch ( vendorID ) { + case LG : motor = new LGMotor() ; break ; + case HYUNDAI : motor = new HyundaiMotor() ; break ; + } + + return motor ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorStatus.java new file mode 100644 index 000000000..e3f1f4199 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorStatus.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorVendorID.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorVendorID.java new file mode 100644 index 000000000..60b4d99fc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/MotorVendorID.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor; + +public enum MotorVendorID { LG, HYUNDAI } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Client.java new file mode 100644 index 000000000..43eb385ab --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Client.java @@ -0,0 +1,11 @@ +package factorymethod.example.motor.before1; + + +public class Client { + public static void main(String[] args) { + LGMotor lgMotor = new LGMotor() ; + ElevatorController controller1 = new ElevatorController(1, lgMotor) ; + controller1.gotoFloor(5) ; + controller1.gotoFloor(3) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Direction.java new file mode 100644 index 000000000..4a813b97a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/Direction.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor.before1; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/ElevatorController.java new file mode 100644 index 000000000..c3a74e173 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/ElevatorController.java @@ -0,0 +1,28 @@ +package factorymethod.example.motor.before1; + +public class ElevatorController { + private int id ; + private int curFloor = 1; + private LGMotor motor ; + public ElevatorController(int id, LGMotor motor) { + this.id = id ; + this.motor = motor ; + } + public void gotoFloor(int destination) { + if ( destination == curFloor ) return ; + + Direction direction ; + if ( destination > curFloor ) + direction = Direction.UP ; + else + direction = Direction.DOWN ; + + motor.move(direction) ; + + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor + " with " + motor.getClass().getName() ) ; + + motor.stop() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/LGMotor.java new file mode 100644 index 000000000..37414d322 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/LGMotor.java @@ -0,0 +1,23 @@ +package factorymethod.example.motor.before1; + +public class LGMotor { + private MotorStatus motorStatus ; + public LGMotor() { + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + System.out.println("move LG Motor " + direction) ; + setMotorStatus(MotorStatus.MOVING) ; + } + public void stop() { + motorStatus = MotorStatus.STOPPED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/MotorStatus.java new file mode 100644 index 000000000..eda52ff52 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before1/MotorStatus.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor.before1; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Client.java new file mode 100644 index 000000000..b36ca6e48 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Client.java @@ -0,0 +1,16 @@ +package factorymethod.example.motor.before2; + + +public class Client { + public static void main(String[] args) { + Motor lgMotor = new LGMotor() ; + ElevatorController controller1 = new ElevatorController(1, lgMotor) ; + controller1.gotoFloor(5) ; + controller1.gotoFloor(3) ; + + Motor hyundaiMotor = new HyundaiMotor() ; + ElevatorController controller2 = new ElevatorController(2, hyundaiMotor) ; + controller2.gotoFloor(4) ; + controller2.gotoFloor(6) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Direction.java new file mode 100644 index 000000000..d48e1c219 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Direction.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor.before2; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/ElevatorController.java new file mode 100644 index 000000000..8f7d6cdf2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/ElevatorController.java @@ -0,0 +1,28 @@ +package factorymethod.example.motor.before2; + +public class ElevatorController { + private int id ; + private int curFloor = 1 ; + private Motor motor ; + public ElevatorController(int id, Motor motor) { + this.id = id ; + this.motor = motor ; + } + public void gotoFloor(int destination) { + if ( destination == curFloor ) return ; + + Direction direction ; + if ( destination > curFloor ) + direction = Direction.UP ; + else + direction = Direction.DOWN ; + + motor.move(direction) ; + + System.out.print("Elevator [" + id + "] Floor: " + curFloor) ; + curFloor = destination ; + System.out.println(" ==> " + curFloor + " with " + motor.getClass().getName() ) ; + + motor.stop() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/HyundaiMotor.java new file mode 100644 index 000000000..5214c4439 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/HyundaiMotor.java @@ -0,0 +1,7 @@ +package factorymethod.example.motor.before2; + +public class HyundaiMotor extends Motor { + protected void moveMotor(Direction direction) { + System.out.println("move Hyundai Motor " + direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/LGMotor.java new file mode 100644 index 000000000..9d81c6588 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/LGMotor.java @@ -0,0 +1,7 @@ +package factorymethod.example.motor.before2; + +public class LGMotor extends Motor { + protected void moveMotor(Direction direction) { + System.out.println("move LG Motor " + direction) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Motor.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Motor.java new file mode 100644 index 000000000..416d67aa4 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/Motor.java @@ -0,0 +1,24 @@ +package factorymethod.example.motor.before2; + +public abstract class Motor { + private MotorStatus motorStatus ; + public Motor() { + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + moveMotor(direction) ; + setMotorStatus(MotorStatus.MOVING) ; + } + protected abstract void moveMotor(Direction direction) ; + public void stop() { + motorStatus = MotorStatus.STOPPED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/MotorStatus.java new file mode 100644 index 000000000..bf44a1f07 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/factorymethod/example/motor/before2/MotorStatus.java @@ -0,0 +1,3 @@ +package factorymethod.example.motor.before2; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Client.java new file mode 100644 index 000000000..e41c33bcf --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Client.java @@ -0,0 +1,21 @@ +package observer.after1; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + DataSheetView dataSheetView3 = new DataSheetView(scoreRecord, 3) ; + DataSheetView dataSheetView5 = new DataSheetView(scoreRecord, 5) ; + MinMaxView minMaxView = new MinMaxView(scoreRecord) ; + + scoreRecord.attach(dataSheetView3) ; + scoreRecord.attach(dataSheetView5) ; + scoreRecord.attach(minMaxView) ; + + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/DataSheetView.java new file mode 100644 index 000000000..0bfa67e56 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.after1; + +import java.util.List; + +public class DataSheetView implements Observer { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/MinMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/MinMaxView.java new file mode 100644 index 000000000..4b9f3c93c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/MinMaxView.java @@ -0,0 +1,22 @@ +package observer.after1; + +import java.util.Collections; +import java.util.List; + +public class MinMaxView implements Observer { + private ScoreRecord scoreRecord ; + + public MinMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayMinMax(record); + } + private void displayMinMax(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/Observer.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Observer.java new file mode 100644 index 000000000..ceb9e9110 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Observer.java @@ -0,0 +1,5 @@ +package observer.after1; + +public interface Observer { + abstract public void update() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/ScoreRecord.java new file mode 100644 index 000000000..4a7ac151c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/ScoreRecord.java @@ -0,0 +1,16 @@ +package observer.after1; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord extends Subject { + private List scores = new ArrayList() ; + + public void addScore(int score) { + scores.add(score) ; + notifyObservers() ; + } + public List getScoreRecord() { + return scores ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after1/Subject.java b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Subject.java new file mode 100644 index 000000000..def743fb8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after1/Subject.java @@ -0,0 +1,18 @@ +package observer.after1; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Subject { + private List observers = new ArrayList() ; + + public void attach(Observer observer) { + observers.add(observer) ; + } + public void detach(Observer observer) { + observers.remove(observer) ; + } + public void notifyObservers() { + for ( Observer o : observers ) o.update() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Client.java new file mode 100644 index 000000000..5055acf0d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Client.java @@ -0,0 +1,29 @@ +package observer.after2; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + + DataSheetView dataSheetView3 = new DataSheetView(scoreRecord, 3) ; + scoreRecord.attach(dataSheetView3) ; + + MinMaxView minMaxView = new MinMaxView(scoreRecord) ; + scoreRecord.attach(minMaxView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + + scoreRecord.detach(dataSheetView3) ; + StatisticsView statisticsView = new StatisticsView(scoreRecord) ; + scoreRecord.attach(statisticsView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/DataSheetView.java new file mode 100644 index 000000000..fde462c02 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.after2; + +import java.util.List; + +public class DataSheetView implements Observer { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/MinMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/MinMaxView.java new file mode 100644 index 000000000..30957427c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/MinMaxView.java @@ -0,0 +1,22 @@ +package observer.after2; + +import java.util.Collections; +import java.util.List; + +public class MinMaxView implements Observer { + private ScoreRecord scoreRecord ; + + public MinMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayMinMax(record); + } + private void displayMinMax(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/Observer.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Observer.java new file mode 100644 index 000000000..1c11f04a3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Observer.java @@ -0,0 +1,5 @@ +package observer.after2; + +public interface Observer { + abstract public void update() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/ScoreRecord.java new file mode 100644 index 000000000..0b6c3db56 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/ScoreRecord.java @@ -0,0 +1,18 @@ +package observer.after2; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord extends Subject { + private List scores = new ArrayList() ; + + public void addScore(int score) { + scores.add(score) ; + + notifyObservers() ; + } + public List getScoreRecord() { + return scores ; + } + +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/StatisticsView.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/StatisticsView.java new file mode 100644 index 000000000..3a9023267 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/StatisticsView.java @@ -0,0 +1,24 @@ +package observer.after2; + +import java.util.Collections; +import java.util.List; + +public class StatisticsView implements Observer { + private ScoreRecord scoreRecord ; + + public StatisticsView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayStatistics(record); + } + private void displayStatistics(List record) { + int sum = 0 ; + for ( int score : record ) + sum += score ; + float average = (float) sum / record.size() ; + System.out.println("Sum: " + sum + " Average: " + average) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/after2/Subject.java b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Subject.java new file mode 100644 index 000000000..49486173a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/after2/Subject.java @@ -0,0 +1,18 @@ +package observer.after2; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Subject { + private List observers = new ArrayList() ; + + public void attach(Observer observer) { + observers.add(observer) ; + } + public void detach(Observer observer) { + observers.remove(observer) ; + } + public void notifyObservers() { + for ( Observer o : observers ) o.update() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/before1/Client.java new file mode 100644 index 000000000..57b5b36b5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before1/Client.java @@ -0,0 +1,16 @@ +package observer.before1; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + DataSheetView dataSheetView = new DataSheetView(scoreRecord, 3) ; + + scoreRecord.setDataSheetView(dataSheetView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before1/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before1/DataSheetView.java new file mode 100644 index 000000000..a7c5f1af2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before1/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.before1; + +import java.util.List; + +public class DataSheetView { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before1/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/before1/ScoreRecord.java new file mode 100644 index 000000000..25bcc70d3 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before1/ScoreRecord.java @@ -0,0 +1,21 @@ +package observer.before1; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord { + private List scores = new ArrayList() ; + private DataSheetView dataSheetView ; + + public void setDataSheetView(DataSheetView dataSheetView) { + this.dataSheetView = dataSheetView ; + } + public void addScore(int score) { + scores.add(score) ; + + dataSheetView.update() ; + } + public List getScoreRecord() { + return scores ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/before2/Client.java new file mode 100644 index 000000000..641bb77cc --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before2/Client.java @@ -0,0 +1,16 @@ +package observer.before2; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + MinMaxView minMaxView = new MinMaxView(scoreRecord) ; + + scoreRecord.setMinMaxView(minMaxView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before2/MinMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before2/MinMaxView.java new file mode 100644 index 000000000..c837e8a0a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before2/MinMaxView.java @@ -0,0 +1,22 @@ +package observer.before2; + +import java.util.Collections; +import java.util.List; + +public class MinMaxView { + private ScoreRecord scoreRecord ; + + public MinMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayStatistics(record); + } + private void displayStatistics(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before2/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/before2/ScoreRecord.java new file mode 100644 index 000000000..9db7fb4c8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before2/ScoreRecord.java @@ -0,0 +1,21 @@ +package observer.before2; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord { + private List scores = new ArrayList() ; + private MinMaxView minMaxView ; + + public void setMinMaxView(MinMaxView minMaxView) { + this.minMaxView = minMaxView ; + } + public void addScore(int score) { + scores.add(score) ; + + minMaxView.update() ; + } + public List getScoreRecord() { + return scores ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before3/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/before3/Client.java new file mode 100644 index 000000000..238f6e5a8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before3/Client.java @@ -0,0 +1,20 @@ +package observer.before3; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + DataSheetView dataSheetView3 = new DataSheetView(scoreRecord, 3) ; + DataSheetView dataSheetView5 = new DataSheetView(scoreRecord, 5) ; + MainMaxView minMaxView = new MainMaxView(scoreRecord) ; + + scoreRecord.addDataSheetView(dataSheetView3) ; + scoreRecord.addDataSheetView(dataSheetView5) ; + scoreRecord.setMinMaxView(minMaxView) ; + + for (int index = 1 ; index <= 5 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before3/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before3/DataSheetView.java new file mode 100644 index 000000000..cd4bbe561 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before3/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.before3; + +import java.util.List; + +public class DataSheetView { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before3/MainMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before3/MainMaxView.java new file mode 100644 index 000000000..6d0e380a1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before3/MainMaxView.java @@ -0,0 +1,22 @@ +package observer.before3; + +import java.util.Collections; +import java.util.List; + +public class MainMaxView { + private ScoreRecord scoreRecord ; + + public MainMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayMinMax(record); + } + private void displayMinMax(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before3/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/before3/ScoreRecord.java new file mode 100644 index 000000000..59cbb33ca --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before3/ScoreRecord.java @@ -0,0 +1,27 @@ +package observer.before3; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord { + private List scores = new ArrayList() ; + private List dataSheetViews = new ArrayList() ; + private MainMaxView minMaxView ; + + public void addDataSheetView(DataSheetView dataSheetView) { + dataSheetViews.add(dataSheetView) ; + } + + public void setMinMaxView(MainMaxView minMaxView) { + this.minMaxView = minMaxView ; + } + public void addScore(int score) { + scores.add(score) ; + for ( DataSheetView dataSheetView: dataSheetViews ) + dataSheetView.update() ; + minMaxView.update() ; + } + public List getScoreRecord() { + return scores ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before4/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/before4/Client.java new file mode 100644 index 000000000..6edf68131 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before4/Client.java @@ -0,0 +1,26 @@ +package observer.before4; + +public class Client { + public static void main(String[] args) { + ScoreRecord scoreRecord = new ScoreRecord() ; + + DataSheetView dataSheetView3 = new DataSheetView(scoreRecord, 3) ; + scoreRecord.addDataSheetView(dataSheetView3) ; + + for (int index = 1 ; index <= 3 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + + MainMaxView statisticsView = new MainMaxView(scoreRecord) ; + scoreRecord.setMinMaxView(statisticsView) ; + + for (int index = 1 ; index <= 2 ; index ++ ) { + int score = index * 10 ; + System.out.println("Adding " + score) ; + scoreRecord.addScore(score) ; + } + + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before4/DataSheetView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before4/DataSheetView.java new file mode 100644 index 000000000..9697c32ea --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before4/DataSheetView.java @@ -0,0 +1,24 @@ +package observer.before4; + +import java.util.List; + +public class DataSheetView { + private ScoreRecord scoreRecord ; + private int viewCount ; + + public DataSheetView(ScoreRecord scoreRecord, int viewCount) { + this.scoreRecord = scoreRecord ; + this.viewCount = viewCount ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + displayScores(record, viewCount); + } + private void displayScores(List record, int viewCount) { + System.out.print("List of " + viewCount + " entries: ") ; + for ( int i = 0 ; i < viewCount && i < record.size() ; i ++ ) { + System.out.print(record.get(i) + " ") ; + } + System.out.println() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before4/MainMaxView.java b/java-oop-design-pattern/ch8_ch14/src/observer/before4/MainMaxView.java new file mode 100644 index 000000000..70f2083d5 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before4/MainMaxView.java @@ -0,0 +1,22 @@ +package observer.before4; + +import java.util.Collections; +import java.util.List; + +public class MainMaxView { + private ScoreRecord scoreRecord ; + + public MainMaxView(ScoreRecord scoreRecord) { + this.scoreRecord = scoreRecord ; + } + public void update() { + List record = scoreRecord.getScoreRecord() ; + + displayMinMax(record); + } + private void displayMinMax(List record) { + int min = Collections.min(record, null) ; + int max = Collections.max(record, null) ; + System.out.println("Min: " + min + " Max: " + max) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/before4/ScoreRecord.java b/java-oop-design-pattern/ch8_ch14/src/observer/before4/ScoreRecord.java new file mode 100644 index 000000000..7522e2162 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/before4/ScoreRecord.java @@ -0,0 +1,30 @@ +package observer.before4; + +import java.util.ArrayList; +import java.util.List; + +public class ScoreRecord { + private List scores = new ArrayList() ; + private List dataSheetViews = new ArrayList() ; + private MainMaxView statisticsView ; + + public void addScore(int score) { + scores.add(score) ; + + for ( DataSheetView dataSheetView: dataSheetViews ) + dataSheetView.update() ; + statisticsView.update() ; + } + + public List getScoreRecord() { + return scores ; + } + + public void addDataSheetView(DataSheetView dataSheetView) { + dataSheetViews.add(dataSheetView) ; + } + + public void setMinMaxView(MainMaxView statisticsView) { + this.statisticsView = statisticsView ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Battery.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Battery.java new file mode 100644 index 000000000..a8e8c6e4a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Battery.java @@ -0,0 +1,10 @@ +package observer.example.battery; + +public class Battery extends Subject { + private int level = 100 ; + public void consume(int amount) { + level -= amount ; + notifyObservers() ; + } + public int getLevel() { return level ; } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/BatteryLevelDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/BatteryLevelDisplay.java new file mode 100644 index 000000000..50ce8607c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/BatteryLevelDisplay.java @@ -0,0 +1,12 @@ +package observer.example.battery; + +public class BatteryLevelDisplay implements Observer { + private Battery battery ; + public BatteryLevelDisplay(Battery battery) { + this.battery = battery ; + } + public void update() { + int level = battery.getLevel() ; + System.out.println("Level: " + level) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Client.java new file mode 100644 index 000000000..c40e65853 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Client.java @@ -0,0 +1,17 @@ +package observer.example.battery; + +public class Client { + public static void main(String[] args) { + Battery battery = new Battery() ; + + Observer batteryDisplay = new BatteryLevelDisplay(battery) ; + Observer lowBatteryWarning = new LowBatteryWarning(battery) ; + + battery.attach(batteryDisplay) ; + battery.attach(lowBatteryWarning) ; + + battery.consume(20) ; + battery.consume(50) ; + battery.consume(10) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/LowBatteryWarning.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/LowBatteryWarning.java new file mode 100644 index 000000000..dddfec6a1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/LowBatteryWarning.java @@ -0,0 +1,14 @@ +package observer.example.battery; + +public class LowBatteryWarning implements Observer { + private static final int LOW_BATTERY = 30 ; + private Battery battery ; + public LowBatteryWarning(Battery battery) { + this.battery = battery ; + } + public void update() { + int level = battery.getLevel() ; + if ( level < LOW_BATTERY ) + System.out.println(" Low Battery : " + level + " Compared with " + LOW_BATTERY) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Observer.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Observer.java new file mode 100644 index 000000000..c78c0139a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Observer.java @@ -0,0 +1,5 @@ +package observer.example.battery; + +public interface Observer { + abstract public void update() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Subject.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Subject.java new file mode 100644 index 000000000..6184c2180 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/Subject.java @@ -0,0 +1,18 @@ +package observer.example.battery; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Subject { + private List observers = new ArrayList() ; + + public void attach(Observer observer) { + observers.add(observer) ; + } + public void detach(Observer observer) { + observers.remove(observer) ; + } + public void notifyObservers() { + for ( Observer o : observers ) o.update() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Battery.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Battery.java new file mode 100644 index 000000000..be92526ea --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Battery.java @@ -0,0 +1,21 @@ +package observer.example.battery.before; + +public class Battery { + private int level = 100 ; + private BatteryLevelDisplay display ; + private LowBatteryWarning warning ; + + public void setDisplay(BatteryLevelDisplay display) { + this.display = display ; + } + public void setWarning(LowBatteryWarning warning) { + this.warning = warning ; + } + public void consume(int amount) { + level -= amount ; + + display.update() ; + warning.update() ; + } + public int getLevel() { return level ; } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/BatteryLevelDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/BatteryLevelDisplay.java new file mode 100644 index 000000000..ac4c28aa7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/BatteryLevelDisplay.java @@ -0,0 +1,12 @@ +package observer.example.battery.before; + +public class BatteryLevelDisplay { + private Battery battery ; + public BatteryLevelDisplay(Battery battery) { + this.battery = battery ; + } + public void update() { + int level = battery.getLevel() ; + System.out.println("Level: " + level) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Client.java new file mode 100644 index 000000000..e8200b049 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/Client.java @@ -0,0 +1,17 @@ +package observer.example.battery.before; + +public class Client { + public static void main(String[] args) { + Battery battery = new Battery() ; + + BatteryLevelDisplay batteryDisplay = new BatteryLevelDisplay(battery) ; + LowBatteryWarning lowBatteryWarning = new LowBatteryWarning(battery) ; + + battery.setDisplay(batteryDisplay) ; + battery.setWarning(lowBatteryWarning) ; + + battery.consume(20) ; + battery.consume(50) ; + battery.consume(10) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/LowBatteryWarning.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/LowBatteryWarning.java new file mode 100644 index 000000000..af0bc6023 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/battery/before/LowBatteryWarning.java @@ -0,0 +1,14 @@ +package observer.example.battery.before; + +public class LowBatteryWarning { + private static final int LOW_BATTERY = 30 ; + private Battery battery ; + public LowBatteryWarning(Battery battery) { + this.battery = battery ; + } + public void update() { + int level = battery.getLevel() ; + if ( level < LOW_BATTERY ) + System.out.println(" Low Battery : " + level + " Compared with " + LOW_BATTERY) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Client.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Client.java new file mode 100644 index 000000000..8b7163f5d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Client.java @@ -0,0 +1,20 @@ +package observer.example.elevatorcontroller; + +public class Client { + public static void main(String[] args) { + ElevatorController controller = new ElevatorController() ; + + Observer elevatorDisplay = new ElevatorDisplay(controller) ; + Observer voiceNotice = new VoiceNotice(controller) ; + Observer floorDisplay = new FloorDisplay(controller) ; + Observer controlRoomDisplay = new ControlRoomDisplay(controller) ; + + controller.attach(elevatorDisplay) ; + controller.attach(voiceNotice) ; + controller.attach(floorDisplay) ; + controller.attach(controlRoomDisplay) ; + + controller.gotoFloor(5) ; + controller.gotoFloor(10) ; + } +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ControlRoomDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ControlRoomDisplay.java new file mode 100644 index 000000000..d42b5a963 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ControlRoomDisplay.java @@ -0,0 +1,12 @@ +package observer.example.elevatorcontroller; + +public class ControlRoomDisplay implements Observer { + private ElevatorController controller ; + public ControlRoomDisplay(ElevatorController controller) { + this.controller = controller ; + } + public void update() { + int curFloor = controller.getCurFloor() ; + System.out.println("Control Room: " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorController.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorController.java new file mode 100644 index 000000000..98f9b3ff8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorController.java @@ -0,0 +1,12 @@ +package observer.example.elevatorcontroller; + +public class ElevatorController extends Subject { + private int curFloor = 1; + public void gotoFloor(int destination) { + curFloor = destination ; + notifyObservers() ; + } + public int getCurFloor() { + return curFloor ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorDisplay.java new file mode 100644 index 000000000..81d1c8e44 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/ElevatorDisplay.java @@ -0,0 +1,12 @@ +package observer.example.elevatorcontroller; + +public class ElevatorDisplay implements Observer { + private ElevatorController controller ; + public ElevatorDisplay(ElevatorController controller) { + this.controller = controller ; + } + public void update() { + int curFloor = controller.getCurFloor() ; + System.out.println("Elevator Display: " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/FloorDisplay.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/FloorDisplay.java new file mode 100644 index 000000000..073d3fe1a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/FloorDisplay.java @@ -0,0 +1,12 @@ +package observer.example.elevatorcontroller; + +public class FloorDisplay implements Observer { + private ElevatorController controller ; + public FloorDisplay(ElevatorController controller) { + this.controller = controller ; + } + public void update() { + int curFloor = controller.getCurFloor() ; + System.out.println("Floor Display: " + curFloor) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Observer.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Observer.java new file mode 100644 index 000000000..c0f4dc36b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Observer.java @@ -0,0 +1,5 @@ +package observer.example.elevatorcontroller; + +public interface Observer { + abstract public void update() ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Subject.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Subject.java new file mode 100644 index 000000000..b66e92594 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/Subject.java @@ -0,0 +1,18 @@ +package observer.example.elevatorcontroller; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Subject { + private List observers = new ArrayList() ; + + public void attach(Observer observer) { + observers.add(observer) ; + } + public void detach(Observer observer) { + observers.remove(observer) ; + } + public void notifyObservers() { + for ( Observer o : observers ) o.update() ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/VoiceNotice.java b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/VoiceNotice.java new file mode 100644 index 000000000..54c16d651 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/observer/example/elevatorcontroller/VoiceNotice.java @@ -0,0 +1,13 @@ +package observer.example.elevatorcontroller; + +public class VoiceNotice implements Observer { + private ElevatorController controller ; + public VoiceNotice(ElevatorController controller) { + this.controller = controller ; + } + public void update() { + int curFloor = controller.getCurFloor() ; + System.out.println("Voice Notice: " + curFloor) ; + + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Client.java new file mode 100644 index 000000000..e5ec6c649 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Client.java @@ -0,0 +1,9 @@ +package templatemethod.after1; + +public class Client { + public static void main(String[] args) { + Door door = new Door() ; + LGMotor lgMotor = new LGMotor(door) ; + lgMotor.move(Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Direction.java new file mode 100644 index 000000000..09e1f5ba9 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Direction.java @@ -0,0 +1,3 @@ +package templatemethod.after1; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Door.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Door.java new file mode 100644 index 000000000..3e299ba1c --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Door.java @@ -0,0 +1,17 @@ +package templatemethod.after1; + +public class Door { + private DoorStatus doorStatus ; + public Door() { + doorStatus = DoorStatus.CLOSED ; + } + public DoorStatus getDoorStatus() { + return doorStatus ; + } + public void close() { + doorStatus = DoorStatus.CLOSED ; + } + public void open() { + doorStatus = DoorStatus.OPENED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/DoorStatus.java new file mode 100644 index 000000000..265986edd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/DoorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.after1; + +public enum DoorStatus { CLOSED, OPENED } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/HyundaiMotor.java new file mode 100644 index 000000000..714729c27 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/HyundaiMotor.java @@ -0,0 +1,10 @@ +package templatemethod.after1; + +public class HyundaiMotor extends Motor { + public HyundaiMotor(Door door) { + super(door) ; + } + protected void moveMotor(Direction direction) { + // Hyundai Motor Ų. + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/LGMotor.java new file mode 100644 index 000000000..3f11b5fa6 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/LGMotor.java @@ -0,0 +1,10 @@ +package templatemethod.after1; + +public class LGMotor extends Motor { + public LGMotor(Door door) { + super(door) ; + } + protected void moveMotor(Direction direction) { + // LG Motor Ų. + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Motor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Motor.java new file mode 100644 index 000000000..e9ef70de1 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/Motor.java @@ -0,0 +1,30 @@ +package templatemethod.after1; + +public abstract class Motor { + private Door door ; + private MotorStatus motorStatus ; + + public Motor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } + protected abstract void moveMotor(Direction direction) ; +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/MotorStatus.java new file mode 100644 index 000000000..04a228f4f --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/after1/MotorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.after1; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Client.java new file mode 100644 index 000000000..51dc86569 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Client.java @@ -0,0 +1,9 @@ +package templatemethod.before1; + +public class Client { + public static void main(String[] args) { + Door door = new Door() ; + HyundaiMotor hyundaiMotor = new HyundaiMotor(door) ; + hyundaiMotor.move(Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Direction.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Direction.java new file mode 100644 index 000000000..96b513a5d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Direction.java @@ -0,0 +1,3 @@ +package templatemethod.before1; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Door.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Door.java new file mode 100644 index 000000000..1829072ec --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/Door.java @@ -0,0 +1,17 @@ +package templatemethod.before1; + +public class Door { + private DoorStatus doorStatus ; + public Door() { + doorStatus = DoorStatus.CLOSED ; + } + public DoorStatus getDoorStatus() { + return doorStatus ; + } + public void close() { + doorStatus = DoorStatus.CLOSED ; + } + public void open() { + doorStatus = DoorStatus.OPENED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/DoorStatus.java new file mode 100644 index 000000000..ab11bef51 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/DoorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before1; + +public enum DoorStatus { CLOSED, OPENED } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/HyundaiMotor.java new file mode 100644 index 000000000..2167233ff --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/HyundaiMotor.java @@ -0,0 +1,32 @@ +package templatemethod.before1; + +public class HyundaiMotor { + private Door door ; + private MotorStatus motorStatus ; + + public HyundaiMotor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + private void moveHyundaiMotor(Direction direction) { + // Hyundai Motor Ų. + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveHyundaiMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/MotorStatus.java new file mode 100644 index 000000000..a2a79da29 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before1/MotorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before1; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Client.java new file mode 100644 index 000000000..3a322a5eb --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Client.java @@ -0,0 +1,9 @@ +package templatemethod.before2; + +public class Client { + public static void main(String[] args) { + Door door = new Door() ; + LGMotor lgMotor = new LGMotor(door) ; + lgMotor.move(Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Direction.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Direction.java new file mode 100644 index 000000000..6b0763387 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Direction.java @@ -0,0 +1,3 @@ +package templatemethod.before2; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Door.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Door.java new file mode 100644 index 000000000..64ce5b69b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/Door.java @@ -0,0 +1,17 @@ +package templatemethod.before2; + +public class Door { + private DoorStatus doorStatus ; + public Door() { + doorStatus = DoorStatus.CLOSED ; + } + public DoorStatus getDoorStatus() { + return doorStatus ; + } + public void close() { + doorStatus = DoorStatus.CLOSED ; + } + public void open() { + doorStatus = DoorStatus.OPENED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/DoorStatus.java new file mode 100644 index 000000000..c84ad12a8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/DoorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before2; + +public enum DoorStatus { CLOSED, OPENED } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/HyundaiMotor.java new file mode 100644 index 000000000..b6ec1f757 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/HyundaiMotor.java @@ -0,0 +1,32 @@ +package templatemethod.before2; + +public class HyundaiMotor { + private Door door ; + private MotorStatus motorStatus ; + + public HyundaiMotor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + private void moveHyundaiMotor(Direction direction) { + // Hyundai Motor Ų. + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveHyundaiMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/LGMotor.java new file mode 100644 index 000000000..b70a31368 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/LGMotor.java @@ -0,0 +1,32 @@ +package templatemethod.before2; + +public class LGMotor { + private Door door ; + private MotorStatus motorStatus ; + + public LGMotor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + private void moveLGMotor(Direction direction) { + // LG Motor Ų. + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + private void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveLGMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/MotorStatus.java new file mode 100644 index 000000000..db72a2bcd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before2/MotorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before2; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Client.java new file mode 100644 index 000000000..cb311fbd7 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Client.java @@ -0,0 +1,9 @@ +package templatemethod.before3; + +public class Client { + public static void main(String[] args) { + Door door = new Door() ; + LGMotor lgMotor = new LGMotor(door) ; + lgMotor.move(Direction.UP) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Direction.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Direction.java new file mode 100644 index 000000000..68c664553 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Direction.java @@ -0,0 +1,3 @@ +package templatemethod.before3; + +public enum Direction { UP, DOWN } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Door.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Door.java new file mode 100644 index 000000000..520b17b69 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Door.java @@ -0,0 +1,17 @@ +package templatemethod.before3; + +public class Door { + private DoorStatus doorStatus ; + public Door() { + doorStatus = DoorStatus.CLOSED ; + } + public DoorStatus getDoorStatus() { + return doorStatus ; + } + public void close() { + doorStatus = DoorStatus.CLOSED ; + } + public void open() { + doorStatus = DoorStatus.OPENED ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/DoorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/DoorStatus.java new file mode 100644 index 000000000..f96e7ab98 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/DoorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before3; + +public enum DoorStatus { CLOSED, OPENED } diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/HyundaiMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/HyundaiMotor.java new file mode 100644 index 000000000..3ea400635 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/HyundaiMotor.java @@ -0,0 +1,22 @@ +package templatemethod.before3; + +public class HyundaiMotor extends Motor { + public HyundaiMotor(Door door) { + super(door) ; + } + private void moveHyundaiMotor(Direction direction) { + // Hyundai Motor Ų. + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveHyundaiMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/LGMotor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/LGMotor.java new file mode 100644 index 000000000..6b27f1813 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/LGMotor.java @@ -0,0 +1,22 @@ +package templatemethod.before3; + +public class LGMotor extends Motor { + public LGMotor(Door door) { + super(door) ; + } + private void moveLGMotor(Direction direction) { + // LG Motor Ų. + } + public void move(Direction direction) { + MotorStatus motorStatus = getMotorStatus() ; + if ( motorStatus == MotorStatus.MOVING ) return ; + + DoorStatus doorStatus = door.getDoorStatus() ; + if ( doorStatus == DoorStatus.OPENED ) + door.close() ; + + moveLGMotor(direction) ; + + setMotorStatus(MotorStatus.MOVING) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Motor.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Motor.java new file mode 100644 index 000000000..c5d0282bd --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/Motor.java @@ -0,0 +1,17 @@ +package templatemethod.before3; + +public abstract class Motor { + protected Door door ; + private MotorStatus motorStatus ; + + public Motor(Door door) { + this.door = door ; + motorStatus = MotorStatus.STOPPED ; + } + public MotorStatus getMotorStatus() { + return motorStatus; + } + protected void setMotorStatus(MotorStatus motorStatus) { + this.motorStatus = motorStatus; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/MotorStatus.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/MotorStatus.java new file mode 100644 index 000000000..d589ba4e8 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/before3/MotorStatus.java @@ -0,0 +1,3 @@ +package templatemethod.before3; + +public enum MotorStatus { MOVING, STOPPED} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Client.java new file mode 100644 index 000000000..8710cd396 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Client.java @@ -0,0 +1,23 @@ +package templatemethod.example.reportgenerator; + +import java.util.ArrayList; +import java.util.List; + +public class Client { + + public static void main(String[] args) { + List customers = new ArrayList() ; + + customers.add(new Customer("ȫ浿", 150)) ; + customers.add(new Customer("", 350)) ; + customers.add(new Customer("", 50)) ; + customers.add(new Customer("Ǹ", 450)) ; + customers.add(new Customer("ְ", 550)) ; + + ReportGenerator simpleGenerator = new SimpleReportGenerator() ; + System.out.println(simpleGenerator.generate(customers)) ; + + ReportGenerator complexGenerator = new ComplexReportGenerator() ; + System.out.println(complexGenerator.generate(customers)) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ComplexReportGenerator.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ComplexReportGenerator.java new file mode 100644 index 000000000..41bb9da72 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ComplexReportGenerator.java @@ -0,0 +1,23 @@ +package templatemethod.example.reportgenerator; + +import java.util.List; + +public class ComplexReportGenerator extends ReportGenerator { + protected boolean customerReportCondition(Customer customer) { + return customer.getPoint() >= 100 ; + } + protected String getReportHeader(List customers) { + return String.format(" : %d Դϴ\n", customers.size()) ; + } + + protected String getReportForCustomer(Customer customer) { + return String.format("%d: %s\n", customer.getPoint(), customer.getName()) ; + } + protected String getReportFooter(List customers) { + int totalPoint = 0 ; + for ( Customer customer: customers) + totalPoint += customer.getPoint() ; + + return String.format(" հ: %d", totalPoint) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Customer.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Customer.java new file mode 100644 index 000000000..8b0d24e2b --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/Customer.java @@ -0,0 +1,23 @@ +package templatemethod.example.reportgenerator; + +public class Customer { + private String name ; + private int point ; + + public Customer(String name, int point) { + this.setName(name) ; + this.setPoint(point) ; + } + public int getPoint() { + return point; + } + public void setPoint(int point) { + this.point = point; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ReportGenerator.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ReportGenerator.java new file mode 100644 index 000000000..d96e709f2 --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/ReportGenerator.java @@ -0,0 +1,32 @@ +package templatemethod.example.reportgenerator; + +import java.util.ArrayList; +import java.util.List; + +public abstract class ReportGenerator { + public String generate(List customers) { + List selectedCustomers = select(customers) ; + + String report = getReportHeader(selectedCustomers) ; + + for ( int i = 0 ; i < selectedCustomers.size() ; i ++ ) { + Customer customer = selectedCustomers.get(i) ; + report += getReportForCustomer(customer) ; + } + report += getReportFooter(selectedCustomers) ; + + return report ; + } + + protected List select(List customers) { + List selected = new ArrayList() ; + for ( Customer customer: customers ) + if ( customerReportCondition(customer) ) selected.add(customer) ; + return selected; + } + + protected abstract boolean customerReportCondition(Customer customer) ; + protected abstract String getReportHeader(List customers) ; + protected abstract String getReportForCustomer(Customer customer) ; + protected abstract String getReportFooter(List customers) ; +} \ No newline at end of file diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/SimpleReportGenerator.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/SimpleReportGenerator.java new file mode 100644 index 000000000..bd002627d --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/SimpleReportGenerator.java @@ -0,0 +1,18 @@ +package templatemethod.example.reportgenerator; + +import java.util.List; + +public class SimpleReportGenerator extends ReportGenerator { + protected boolean customerReportCondition(Customer customer) { + return true ; + } + protected String getReportHeader(List customers) { + return String.format(" : %d \n", customers.size()) ; + } + protected String getReportForCustomer(Customer customer) { + return String.format("%s: %d\n", customer.getName(), customer.getPoint()) ; + } + protected String getReportFooter(List customers) { + return "" ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Client.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Client.java new file mode 100644 index 000000000..ca9cbcbed --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Client.java @@ -0,0 +1,20 @@ +package templatemethod.example.reportgenerator.before; + +import java.util.ArrayList; +import java.util.List; + +public class Client { + + public static void main(String[] args) { + List customers = new ArrayList() ; + + customers.add(new Customer("ȫ浿", 150)) ; + customers.add(new Customer("", 350)) ; + customers.add(new Customer("", 50)) ; + customers.add(new Customer("Ǹ", 450)) ; + customers.add(new Customer("ְ", 550)) ; + + SimpleReportGenerator simpleGenerator = new SimpleReportGenerator() ; + System.out.println(simpleGenerator.generate(customers)) ; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Customer.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Customer.java new file mode 100644 index 000000000..dfeaacdac --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/Customer.java @@ -0,0 +1,23 @@ +package templatemethod.example.reportgenerator.before; + +public class Customer { + private String name ; + private int point ; + + public Customer(String name, int point) { + this.setName(name) ; + this.setPoint(point) ; + } + public int getPoint() { + return point; + } + public void setPoint(int point) { + this.point = point; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } +} diff --git a/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/SimpleReportGenerator.java b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/SimpleReportGenerator.java new file mode 100644 index 000000000..de4495b4a --- /dev/null +++ b/java-oop-design-pattern/ch8_ch14/src/templatemethod/example/reportgenerator/before/SimpleReportGenerator.java @@ -0,0 +1,16 @@ +package templatemethod.example.reportgenerator.before; + +import java.util.List; + +public class SimpleReportGenerator { + public String generate(List customers) { + + String report = String.format(" : %d \n", customers.size()) ; + + for ( int i = 0 ; i < customers.size() ; i ++ ) { + Customer customer = customers.get(i) ; + report += String.format("%s: %d\n", customer.getName(), customer.getPoint()) ; + } + return report ; + } +} diff --git a/oop-in-spring/practice/solid/README.md b/oop-in-spring/practice/solid/README.md new file mode 100644 index 000000000..12ba86428 --- /dev/null +++ b/oop-in-spring/practice/solid/README.md @@ -0,0 +1,64 @@ +# 내가 이해한 SOLID 원칙 +## 🤔 SOLID 원칙이란 무엇인가요? +- 어떻게 하면, 객체지향 프로그래밍할 때, 객체 지향의 4대 특성인 `캡슐화`, `상속`, `추상화`, `다형성`을 잘 활용해서, 응집력을 높이고 결합력을 낮추는지에 대해 구체적인 방법에 대해 기술해 놓은 원칙이다. + +## 🤷‍♀️ SOLID 원칙이 왜 중요한가요? 또는 왜 사용하나요? +- 이 원칙을 무조건적으로 지켜야 하는 것은 아니다. +- 그런데, 만약 이 원칙에 준수하여 `자바` 프로그래밍을 한다면, +- 객체 지향이 주는 장점인 `유연성`, `재사용성`, `유지보수성` 있는 코드를 작성할 수 있게 된다. +- 따라서, 자바라는 객체 지향 언어를 이용해, 객제 지향 프로그램을 `올바르게` 설계해 나갈 수 있기 때문에, 많은 개발자들이 이 원칙을 사용하고 중요하다고 생각하는 것이다. + +> cf. 디자인 패턴들도 이 원칙에 입각하여 만들어진 것이다. + +## 🧐 SOLID 원칙에는 어떤 것들이 있나요? +> 1. SRP(Single Responsibility Principle, 단일 책임 원칙) : `캡슐화`를 활용해서 객체에 포함된 정보의 손상 및 오용을 방지하여, `유지보수성`을 확보할 수 있는 원칙 +> 2. OCP(Open Closed Principle, 개방 폐쇄 원칙) : `추상화`를 통해 `다형성`을 활용함으로써, 확장에 따른 클래스 수정은 최소화하여, 코드의 `유지보수성`을 확보할 수 있는 원칙 +> 3. LSP(Listov Substitution Principle, 리스코프 치환 원칙) : `다형성`을 활용해서 코드의 `유지보수성`을 확보할 수 있는 원칙 +> 4. ISP(Interface Segregation Principle): 인터페이스 분리 원칙 : `캡슐화`를 활용해서 코드의 `유지보수성`을 확보할 수 있는 원칙 +> 5. DIP(Dependency Inversion Principle, 의존 역전 원칙) : `추상화`를 활용해서 코드의 `유연성` 및 `유지보수성`을 확보할 수 있는 원칙 + +### 🎈[SOLID 원칙 1] SRP(Single Responsibility Principle): 단일 책임 원칙 +> _"어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다." - 로버트 C. 마틴_ + + + +### 🎈[SOLID 원칙 2] OCP(Open Closed Principle): 개방 폐쇄 원칙 +> _소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 변경에 대해서는 닫혀 있어야 한다. - 로버트 C. 마틴_ +> +> -> 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다. + +- 기능 추가 + + + +### 🎈[SOLID 원칙 3] LSP(Listov Substitution Principle): 리스코프 치환 원칙 +> _서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다. - 로버트 C. 마틴_ + +→ 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없어야 한다. + +- 기능 추가 +- + + +### 🎈[SOLID 원칙 4] ISP(Interface Segregation Principle): 인터페이스 분리 원칙 +> _클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다. - 로버트 C. 마틴_ + + +### 🎈[SOLID 원칙 5] DIP(Dependency Inversion Principle): 의존 역전 원칙 +> _고차원 모듈은 저차원 모듈에 의존하면 안 된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다. 추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화된 것에 의존해야 한다. - 로버트 C. 마틴_ + +#### DIP 위반한 사례 +- + +#### Java 코드에서 DIP가 적용된 사례 +- ArrayList, Set 클래스가 Collection 인터페이스에 의존하고 있는 것을 예로 들 수 있다. +- 보통 ArrayList 나 HashSet 자료형을 인스턴스화 할때 변수 타입을 ArrayList, HashSet 같은 구체 클래스 타입으로 선언하는 것이 아닌, List 나 Set 같은 인터페이스 타입으로 선언한다. +- 이것도 DIP 원칙을 따른 코드 선언이라고 봐도 무방하다. + + +#### 내가 경험 중 DIP 적용된 기술을 사용해 본 경험 +- JDBC는 개발자가 어떤 DB를 사용하던지 동일한 인터페이스를 통해 DB에 데이터를 읽고 쓸 수 있게 해준다. +- 그런데, 만약 JDBC가 DIP를 적용되지 않아, 구체적인 DB에 API가 의존했다면, DB를 H2 -> MySQL로 바꿨을 때, 엄청난 수정 비용이 들 것이다. + +# Reference +- [인파 블로거 - [OOP] 💠 객체 지향 설계의 5가지 원칙 - S.O.L.I.D](https://inpa.tistory.com/entry/OOP-%F0%9F%92%A0-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%EC%84%A4%EA%B3%84%EC%9D%98-5%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99-SOLID) diff --git a/oop-in-spring/practice/solid/dip/AbstractToy.java b/oop-in-spring/practice/solid/dip/AbstractToy.java new file mode 100644 index 000000000..674f53c6d --- /dev/null +++ b/oop-in-spring/practice/solid/dip/AbstractToy.java @@ -0,0 +1,13 @@ +public abstract class AbstractToy { + private String name; + + protected AbstractToy(String name) { + this.name = name; + } + + protected String getName() { + return this.name; + } + + protected abstract void play(); +} diff --git a/oop-in-spring/practice/solid/dip/DipMain.java b/oop-in-spring/practice/solid/dip/DipMain.java new file mode 100644 index 000000000..5b62d7084 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/DipMain.java @@ -0,0 +1,36 @@ +public class DipMain { + public static void main(String[] args) { + + /** DIP 준수하지 않은 경우 **/ + // (1) 아이가 인형을 가지고 놀 때 + KidWithDoll kidWithDoll = new KidWithDoll(3); + kidWithDoll.play(); + + kidWithDoll.grow(); + + // (2) 아이가 로봇을 가지고 놀 때 + KidWithRobot kidWithRobot = new KidWithRobot(kidWithDoll.getAge()); + kidWithRobot.play(); + + kidWithRobot.grow(); + + // (3) 아이가 레고를 가지고 놀 때 + KidWithLego kidWithLego = new KidWithLego(kidWithRobot.getAge()); + kidWithLego.play(); + + /** DIP 적용시킨 사례 **/ + Kid kid = new Kid(6); + + // (1) 아이가 인형을 가지고 놀 때 + kid.play(new Doll()); + + kid.grow(); + + // (2) 아이가 로봇을 가지고 놀 때 + kid.play(new Robot()); + kid.grow(); + + // (3) 아이가 레고를 가지고 놀 때 + kid.play(new Lego()); + } +} \ No newline at end of file diff --git a/oop-in-spring/practice/solid/dip/Doll.java b/oop-in-spring/practice/solid/dip/Doll.java new file mode 100644 index 000000000..b6844d18c --- /dev/null +++ b/oop-in-spring/practice/solid/dip/Doll.java @@ -0,0 +1,15 @@ +public class Doll extends AbstractToy { + + public Doll() { + super("doll"); + } + + @Override + public void play() { + this.talk(); + } + + public void talk() { + System.out.println("인형이 말을 합니다."); + } +} diff --git a/oop-in-spring/practice/solid/dip/Kid.java b/oop-in-spring/practice/solid/dip/Kid.java new file mode 100644 index 000000000..dfc138c80 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/Kid.java @@ -0,0 +1,17 @@ +public class Kid { + + private int age; + + public Kid(int age) { + this.age = age; + } + + void play(AbstractToy toy) { + System.out.println("아이가 " + toy.getName() + "을 가지고 놀고 있어요"); + toy.play(); + } + + void grow() { + this.age++; + } +} diff --git a/oop-in-spring/practice/solid/dip/KidWithDoll.java b/oop-in-spring/practice/solid/dip/KidWithDoll.java new file mode 100644 index 000000000..ec1b162f3 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/KidWithDoll.java @@ -0,0 +1,27 @@ +public class KidWithDoll { + Doll doll; + + private int age; + + public KidWithDoll(int age) { + this.age = age; + this.doll = new Doll(); + } + + public int getAge() { + return this.age; + } + + public void setAge(int age) { + this.age = age; + } + + void grow() { + this.age++; + } + + void play() { + System.out.println("아이가 " + doll.getName() + "을 가지고 놀고 있어요"); + doll.talk(); + } +} diff --git a/oop-in-spring/practice/solid/dip/KidWithLego.java b/oop-in-spring/practice/solid/dip/KidWithLego.java new file mode 100644 index 000000000..91aef415f --- /dev/null +++ b/oop-in-spring/practice/solid/dip/KidWithLego.java @@ -0,0 +1,26 @@ +public class KidWithLego { + Lego lego; + private int age; + + public KidWithLego(int age) { + this.age = age; + this.lego = new Lego(); + } + + public int getAge() { + return this.age; + } + + public void setAge(int age) { + this.age = age; + } + + void grow() { + this.age++; + } + + void play() { + System.out.println("아이가 " + lego.getName() + "을 가지고 놀고 있어요"); + lego.assemble(); + } +} diff --git a/oop-in-spring/practice/solid/dip/KidWithRobot.java b/oop-in-spring/practice/solid/dip/KidWithRobot.java new file mode 100644 index 000000000..2bf93e523 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/KidWithRobot.java @@ -0,0 +1,27 @@ +public class KidWithRobot { + Robot robot; + + private int age; + + public KidWithRobot(int age) { + this.age = age; + this.robot = new Robot(); + } + + public int getAge() { + return this.age; + } + + void grow() { + this.age++; + } + + public void setAge(int age) { + this.age = age; + } + + void play() { + System.out.println("아이가 " + robot.getName() + "을 가지고 놀고 있어요"); + robot.shoot(); + } +} diff --git a/oop-in-spring/practice/solid/dip/Lego.java b/oop-in-spring/practice/solid/dip/Lego.java new file mode 100644 index 000000000..04cc6eadf --- /dev/null +++ b/oop-in-spring/practice/solid/dip/Lego.java @@ -0,0 +1,14 @@ +public class Lego extends AbstractToy { + public Lego() { + super("lego"); + } + + @Override + public void play() { + this.assemble(); + } + + public void assemble() { + System.out.println("레고가 조립되었어요"); + } +} diff --git a/oop-in-spring/practice/solid/dip/Robot.java b/oop-in-spring/practice/solid/dip/Robot.java new file mode 100644 index 000000000..66608f412 --- /dev/null +++ b/oop-in-spring/practice/solid/dip/Robot.java @@ -0,0 +1,15 @@ +public class Robot extends AbstractToy { + + public Robot() { + super("robot"); + } + + @Override + public void play() { + this.shoot(); + } + + public void shoot() { + System.out.println("로봇이 총을 쏩니다."); + } +}