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 件のコメント:
コメントを投稿