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();
    }
}