2011年7月3日日曜日

Abstract Factory PatternでHello World

100行ぐらいになりました。

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

}

0 件のコメント:

コメントを投稿