Newer
Older
DesignPattern / src / main / java / info / istlab / dp / dp1 / FactoryMethodTest.java
package info.istlab.dp.dp1;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;

public class FactoryMethodTest {
    public static void main(String[] args) {
        TextFile file = TextFile.createTextFile();
        System.out.println("生成されたオブジェクトのクラスは ["+file.getClass().getSimpleName()+"] です");

        ArrayList<String> lines = new ArrayList<String>();
        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<String> 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";
    }
}