diff --git a/.gitignore b/.gitignore index bb0f519..9e548c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.class bin/* *.zip +*.txt .DS_Store \ No newline at end of file diff --git a/src/main/java/info/istlab/dp/dp1/AbstractFactoryTest.java b/src/main/java/info/istlab/dp/dp1/AbstractFactoryTest.java new file mode 100644 index 0000000..ae3c612 --- /dev/null +++ b/src/main/java/info/istlab/dp/dp1/AbstractFactoryTest.java @@ -0,0 +1,69 @@ +package info.istlab.dp.dp1; + +/** + * https://www.techscore.com/tech/DesignPattern/AbstractFactory + * https://refactoring.guru/ja/design-patterns/abstract-factory + */ +public class AbstractFactoryTest { + public static void main(String[] args) { + NoodleFactory sio_ramen_factory = new SioRamenFactory(); + Dish dish = sio_ramen_factory.getDish(); + dish.putSoup(sio_ramen_factory.getSoup()); + dish.putNoodle(sio_ramen_factory.getNoodle()); + } +} + +abstract class NoodleFactory { + public abstract Soup getSoup(); + public abstract Noodle getNoodle(); + public abstract Dish getDish(); +} +abstract class AbstractRamenFactory extends NoodleFactory { + @Override + public Noodle getNoodle() { return new Ramen(); } + @Override + public Dish getDish() { return new Bowl(); } +} +class SioRamenFactory extends AbstractRamenFactory { + @Override + public Soup getSoup() { return new SioSoup(); } +} +class MisoRamenFactory extends AbstractRamenFactory { + @Override + public Soup getSoup() { return new MisoSoup(); } +} +class TomatoPastaFactory extends NoodleFactory { + @Override + public Soup getSoup() { return new TomatoSource(); } + @Override + public Noodle getNoodle() { return new Spaghetti(); } + @Override + public Dish getDish() { return new Plate(); } +} + +abstract class Soup { /* スープ・ソース */} +class SioSoup extends Soup {} +class MisoSoup extends Soup {} +class CurrySoup extends Soup {} +class TomatoSource extends Soup {} +class CreamySource extends Soup {} + +abstract class Noodle { /* 麺 */ } +class Ramen extends Noodle {} +class Udon extends Noodle {} +class Soba extends Noodle {} +class Spaghetti extends Noodle {} + +class Dish { /* 食器 */ + Noodle noodle; + Soup soup; + void putNoodle(Noodle _n){ + noodle = _n; + } + void putSoup(Soup _s){ + soup = _s; + } +} +class Bowl extends Dish {} +class Plate extends Dish {} + diff --git a/src/main/java/info/istlab/dp/dp1/FactoryMethodTest.java b/src/main/java/info/istlab/dp/dp1/FactoryMethodTest.java new file mode 100644 index 0000000..8c59e5f --- /dev/null +++ b/src/main/java/info/istlab/dp/dp1/FactoryMethodTest.java @@ -0,0 +1,66 @@ +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 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"; + } +}