diff --git a/src/main/java/info/istlab/dp/dp1/FactoryMethodTest2.java b/src/main/java/info/istlab/dp/dp1/FactoryMethodTest2.java new file mode 100644 index 0000000..509535d --- /dev/null +++ b/src/main/java/info/istlab/dp/dp1/FactoryMethodTest2.java @@ -0,0 +1,41 @@ +package info.istlab.dp.dp1; + +/** + * オペレーティングシステムによって異なる改行の扱いを抽象化 + * + * FactoryMethodパターンの例その2 + * TFileCreatorクラスがFactoryクラスで、そのサブクラスであるWinTFileCreator, + * LinuxTFileCreator、OldMacTFileCreatorがそれぞれcreateTextFile()メソッドを + * オーバーライドして、対応するTextFileサブクラスのオブジェクトを生成して返す。 + */ +public class FactoryMethodTest2 { + public static void main(String[] args) { + TextFile winFile = new WinTFileCreator().createTextFile(); + System.out.println("生成されたオブジェクトのクラスは ["+winFile.getClass().getSimpleName()+"] です"); + winFile.add("aaa"); + winFile.add("bbb"); + winFile.add("ccc"); + winFile.save("win_logfile.txt"); + } +} + +abstract class TFileCreator { + protected abstract TextFile createTextFile(); +} + +class WinTFileCreator extends TFileCreator { + protected TextFile createTextFile(){ + return new WinTextFile(); + } +} + +class LinuxTFileCreator extends TFileCreator { + protected TextFile createTextFile(){ + return new LinuxTextFile(); + } +} +class OldMacTFileCreator extends TFileCreator { + protected TextFile createTextFile(){ + return new OldMacTextFile(); + } +} \ 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 index 079685a..658d7b9 100644 --- a/src/main/java/info/istlab/dp/dp1/FactoryPatternTest.java +++ b/src/main/java/info/istlab/dp/dp1/FactoryPatternTest.java @@ -22,11 +22,10 @@ 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"); + file.add("aaa"); + file.add("bbb"); + file.add("ccc"); + file.save("logfile.txt"); Calendar cal = Calendar.getInstance(); System.out.println(cal.getClass().getName()); @@ -36,6 +35,7 @@ class TextFile { protected String EOL; protected TextFile(){} + private ArrayList lines = new ArrayList(); // 行データ保存用 public static TextFile createTextFile(){ String os = System.getProperty("os.name").toLowerCase(); System.out.println(os); @@ -48,7 +48,7 @@ } return null; } - public void write(ArrayList lines, String filename){ + public void save(String filename){ try { FileWriter filewriter = new FileWriter(filename, false); for(String line: lines){ @@ -59,6 +59,9 @@ System.out.println("WriteError:" + filename); } } + public void add(String line){ + lines.add(line); + } } class WinTextFile extends TextFile {