# 7月1日課題(デザインパターン) ## FactoryMethodを使わないパターン Client.java(このコードにすべてを記述) ``` public class Client { public static void main(String[] args) { Seihin[] seihins = new Seihin[3]; seihins[0] = new Television(); seihins[1] = new Radio(); seihins[2] = new Television(); for (int i = 0; i < seihins.length; ++i) { if (seihins[i] instanceof Television) { ((Television) seihins[i]).numberring(); ((Television) seihins[i]).setDate(Date.today()); } else if (seihins[i] instanceof Radio) { ((Radio) seihins[i]).numberring(); } } for (int i = 0; i < seihins.length; ++i) { seihins[i].print(); } } } abstract class Seihin { public abstract void print(); } class Television extends Seihin { private int tvSerialNumber; private String date; public void numberring() { tvSerialNumber = Counter.getTvNumber(); } public void setDate(String date) { this.date = date; } public void print() { System.out.println("このテレビに関する情報:"); System.out.println(" 製造番号:" + tvSerialNumber); System.out.println(" 製造年月日:" + date); } } class Radio extends Seihin { private int radioSerialNumber; public void numberring() { radioSerialNumber = Counter.getRadioNumber(); } public void print() { System.out.println("このラジオに関する情報:"); System.out.println(" 製造番号:" + radioSerialNumber); } } class Date { public static String today() { return "2021/07/01"; } } class Counter { private static int tvNum = 777; private static int radioNum = 888; public static int getTvNumber() { return tvNum++; } public static int getRadioNumber() { return radioNum++; } } ``` ### 実行結果  数字は多少変更済 ## FactoryMethodを使うパターン Client.java(Clientクラスに相当するクラス) ``` public class Client { public static void main(String[] args) { Koujyou koujyou1 = new TvKoujyou(); Koujyou koujyou2 = new RadioKoujyou(); Seihin[] array = new Seihin[3]; array[0] = koujyou1.create(); array[1] = koujyou2.create(); array[2] = koujyou1.create(); for (int i = 0; i < array.length; i++) { array[i].print(); } } } ``` Koujyou.java(Creatorクラス) ``` abstract class Koujyou { public final Seihin create() { Seihin seihin = factoryMethod(); touroku(seihin); return seihin; } public abstract Seihin factoryMethod(); public abstract void touroku(Seihin s); } ``` TvKoujyou.java(ConcreteCreatorクラス) ``` class TvKoujyou extends Koujyou { public Seihin factoryMethod() { return new Television(); } public void touroku(Seihin s) { Television t = (Television) s; t.numberring(); t.setDate(Date.today()); } } ``` RadioKoujyou.java(ConcreteCreatorクラス) ``` class RadioKoujyou extends Koujyou { public Seihin factoryMethod() { return new Radio(); } public void touroku(Seihin s) { Radio r = (Radio) s; r.numberring(); } } ``` Seihin.java(Productクラス) ``` abstract class Seihin { public abstract void print(); } ``` Television.java(ConcreteProductクラス) ``` class Television extends Seihin { private int tvSerialNumber; private String date; public void numberring() { tvSerialNumber = Counter.getTvNumber(); } public void setDate(String date) { this.date = date; } public void print() { System.out.println("このテレビに関する情報:"); System.out.println(" 製造番号:" + tvSerialNumber); System.out.println(" 製造年月日:" + date); } } ``` Radio.java(ConcreteProductクラス) ``` class Radio extends Seihin { private int radioSerialNumber; public void numberring() { radioSerialNumber = Counter.getRadioNumber(); } public void print() { System.out.println("このラジオに関する情報:"); System.out.println(" 製造番号:" + radioSerialNumber); } } ``` Date.java(日付を格納するクラス) ``` class Date { public static String today() { return "2021/07/01"; } } ``` Counter.java(製造番号を格納するクラス) ``` class Counter { private static int tvNum = 666; private static int radioNum = 333; public static int getTvNumber() { return tvNum++; } public static int getRadioNumber() { return radioNum++; } } ``` ### 実行結果  少しだけ数値変えてあります
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up