diff --git a/.vscode/settings.json b/.vscode/settings.json index 0abed45..af5813f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,5 +5,6 @@ "jdk.*", "org.graalvm.*", "io.micrometer.shaded.*" - ] + ], + "java.configuration.updateBuildConfiguration": "interactive" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8624104..9fa97bf 100644 --- a/pom.xml +++ b/pom.xml @@ -14,15 +14,15 @@ UTF-8 - 1.7 - 1.7 + 21 + 21 junit junit - 4.11 + 4.13.2 test @@ -42,7 +42,7 @@ maven-compiler-plugin - 3.8.0 + 3.11.0 maven-surefire-plugin diff --git a/src/main/java/info/istlab/dp/dp1/FactoryMethodTest.java b/src/main/java/info/istlab/dp/dp1/FactoryMethodTest.java index be7316f..81ad69f 100644 --- a/src/main/java/info/istlab/dp/dp1/FactoryMethodTest.java +++ b/src/main/java/info/istlab/dp/dp1/FactoryMethodTest.java @@ -1,10 +1,5 @@ package info.istlab.dp.dp1; -import java.io.FileWriter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Calendar; - /** * オペレーティングシステムによって異なる改行の扱いを抽象化 * @@ -19,60 +14,39 @@ */ public class FactoryMethodTest { public static void main(String[] args) { - TextFile file = TextFile.createTextFile(); - System.out.println("生成されたオブジェクトのクラスは ["+file.getClass().getSimpleName()+"] です"); - - ArrayList lines = new ArrayList(); - lines.add("aaa"); - lines.add("bbb"); - lines.add("ccc"); - file.write(lines, "logfile.txt"); - - Calendar cal = Calendar.getInstance(); - System.out.println(cal.getClass().getName()); + DocumentCreator creator = new WordCreator(); + creator.openDocument(); // Word文書を開く } } -class TextFile { - protected String EOL; - protected TextFile(){} - public static TextFile createTextFile(){ - String os = System.getProperty("os.name").toLowerCase(); - System.out.println(os); - if (os.contains("windows")){ - return new WinTextFile(); // CR LF (0x0D 0x0A) \r\n - } else if (os.contains("oldmac")){ - return new OldMacTextFile(); // CR - } else if (os.contains("linux") || os.contains("mac os x")){ - return new LinuxTextFile(); // LF - } - return null; - } - public void write(ArrayList lines, String filename){ - try { - FileWriter filewriter = new FileWriter(filename, false); - for(String line: lines){ - filewriter.write(line + EOL); // 改行の種類 - } - filewriter.close(); - } catch (IOException e) { - System.out.println("WriteError:" + filename); - } +// Product +interface Document { + void open(); +} + +// Concrete Products +class WordDocument implements Document { + public void open() { System.out.println("Word文書を開く"); } +} +class PdfDocument implements Document { + public void open() { System.out.println("PDF文書を開く"); } +} + +// Creator (Factory) +abstract class DocumentCreator { + // 生成メソッド + protected abstract Document createDocument(); + + public void openDocument() { + Document doc = createDocument(); + doc.open(); } } -class WinTextFile extends TextFile { - WinTextFile(){ - EOL = "\r\n"; - } +// Concrete Creators +class WordCreator extends DocumentCreator { + protected Document createDocument() { return new WordDocument(); } } -class OldMacTextFile extends TextFile { - OldMacTextFile(){ - EOL = "\r"; - } -} -class LinuxTextFile extends TextFile { - LinuxTextFile(){ - EOL = "\n"; - } -} +class PdfCreator extends DocumentCreator { + protected Document createDocument() { return new PdfDocument(); } +} \ No newline at end of file diff --git a/src/main/java/info/istlab/dp/dp1/FactoryPatternTest.java b/src/main/java/info/istlab/dp/dp1/FactoryPatternTest.java new file mode 100644 index 0000000..079685a --- /dev/null +++ b/src/main/java/info/istlab/dp/dp1/FactoryPatternTest.java @@ -0,0 +1,78 @@ +package info.istlab.dp.dp1; + +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Calendar; + +/** + * オペレーティングシステムによって異なる改行の扱いを抽象化 + * + * Factoryパターン:オブジェクトの生成をカプセル化する。Factoryクラスが提供するメソッドを呼び出すと、引数や状況によって + * 適切なサブクラスのオブジェクトを生成してくれる。(例:Calendarクラス) + * + * FactoryMethodパターン:FactoryパターンにおけるFactoryクラスが唯一ではなく、Factoryクラスの + * サブクラスが複数存在しており、それぞれのサブクラスがオブジェクト生成メソッド(Factoryメソッド)を定義している。 + * https://refactoring.guru/ja/design-patterns/factory-method + * では、ロジスティックスクラスのサブクラスである陸上運輸と海上運輸が、createTransport()をオーバーライドしており、 + * 陸上運輸はTruck、海上運輸はShipオブジェクトを返す。 + */ +public class FactoryPatternTest { + public static void main(String[] args) { + TextFile file = TextFile.createTextFile(); + System.out.println("生成されたオブジェクトのクラスは ["+file.getClass().getSimpleName()+"] です"); + + ArrayList lines = new ArrayList(); + lines.add("aaa"); + lines.add("bbb"); + lines.add("ccc"); + file.write(lines, "logfile.txt"); + + Calendar cal = Calendar.getInstance(); + System.out.println(cal.getClass().getName()); + } +} + +class TextFile { + protected String EOL; + protected TextFile(){} + public static TextFile createTextFile(){ + String os = System.getProperty("os.name").toLowerCase(); + System.out.println(os); + if (os.contains("windows")){ + return new WinTextFile(); // CR LF (0x0D 0x0A) \r\n + } else if (os.contains("oldmac")){ + return new OldMacTextFile(); // CR + } else if (os.contains("linux") || os.contains("mac os x")){ + return new LinuxTextFile(); // LF + } + return null; + } + public void write(ArrayList lines, String filename){ + try { + FileWriter filewriter = new FileWriter(filename, false); + for(String line: lines){ + filewriter.write(line + EOL); // 改行の種類 + } + filewriter.close(); + } catch (IOException e) { + System.out.println("WriteError:" + filename); + } + } +} + +class WinTextFile extends TextFile { + WinTextFile(){ + EOL = "\r\n"; + } +} +class OldMacTextFile extends TextFile { + OldMacTextFile(){ + EOL = "\r"; + } +} +class LinuxTextFile extends TextFile { + LinuxTextFile(){ + EOL = "\n"; + } +} diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..e6fc1af --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,8 @@ +/Users/miura/Java/dezapata/src/main/java/info/istlab/dp/dp1/SingletonTest.java +/Users/miura/Java/dezapata/src/main/java/info/istlab/dp/App.java +/Users/miura/Java/dezapata/src/main/java/info/istlab/dp/dp2/DecoratorTest.java +/Users/miura/Java/dezapata/src/main/java/info/istlab/dp/dp1/FactoryPatternTest.java +/Users/miura/Java/dezapata/src/main/java/info/istlab/dp/dp1/AbstractFactoryTest.java +/Users/miura/Java/dezapata/src/main/java/info/istlab/dp/dp2/AdapterTest.java +/Users/miura/Java/dezapata/src/main/java/info/istlab/dp/dp1/TemplateMethodTest.java +/Users/miura/Java/dezapata/src/main/java/info/istlab/dp/dp1/FactoryMethodTest.java