public class AbstractFactoryPatternSample { public static void main(String[] args){ new AbstractFactoryPatternSample().run(); } public void run(){ new FactoryUser(new HelloFactory()).run(); new FactoryUser(new WorldFactory()).run(); } /* FactoryはいろいろなProductを返してくれる、Productの集合体のようなもの。 * FactoryUser自体は、Factoryが具体的に何を返すか知らないが、 * それをどう使えばよいかは知っている。 * たとえば、Productは環境ごとのGUI部品。 * Productのユーザーは、今の環境がWinのものかUnixのものか知らないけれども、 * GUI部品の配置の仕方はわかっている。 */ class FactoryUser{ final AbstractFactory f; public FactoryUser(AbstractFactory f){ this.f = f; } public void run(){ f.createUpperCaseLetter().outputUpperCaseLetter(); f.createFourLowerCaseLetter().outputFourLowerCaseLetters(); f.createSeparator().outputSeparator(); } } interface AbstractUpperCaseLetter{ public void outputUpperCaseLetter(); } class H implements AbstractUpperCaseLetter{ public void outputUpperCaseLetter(){ System.out.print("H"); } } class W implements AbstractUpperCaseLetter{ public void outputUpperCaseLetter(){ System.out.print("W"); } } interface AbstractFourLowerCaseLetters{ public void outputFourLowerCaseLetters(); } class Ello implements AbstractFourLowerCaseLetters{ public void outputFourLowerCaseLetters(){ System.out.print("ello"); } } class Orld implements AbstractFourLowerCaseLetters{ public void outputFourLowerCaseLetters(){ System.out.print("orld"); } } interface AbstractSeparator{ public void outputSeparator(); } class Space implements AbstractSeparator{ public void outputSeparator(){ System.out.print(" "); } } class NewLine implements AbstractSeparator{ public void outputSeparator(){ System.out.print("\n"); } } interface AbstractFactory{ public AbstractUpperCaseLetter createUpperCaseLetter(); public AbstractFourLowerCaseLetters createFourLowerCaseLetter(); public AbstractSeparator createSeparator(); } class HelloFactory implements AbstractFactory{ public AbstractUpperCaseLetter createUpperCaseLetter() { return new H(); } public AbstractFourLowerCaseLetters createFourLowerCaseLetter() { return new Ello(); } public AbstractSeparator createSeparator() { return new Space(); } } class WorldFactory implements AbstractFactory{ public AbstractUpperCaseLetter createUpperCaseLetter() { return new W(); } public AbstractFourLowerCaseLetters createFourLowerCaseLetter() { return new Orld(); } public AbstractSeparator createSeparator() { return new NewLine(); } } }
2011年7月3日日曜日
Abstract Factory PatternでHello World
100行ぐらいになりました。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿