본문 바로가기

Software Architect

[Design Pattern] Factory Method Pattern

Factory Method Pattern

개요

  • 객체 생성을 해주는 별도의 Class에서 수행
  • 생성 코드는 Client에 비공개

구현 방법 - Java

public class main {
    public static void main(String[] args) {
    	Factory f = new Factory();
    	Doll d1 = f.makeDoll("Blue");               // [1] Class 생성 요청
    	Doll d2 = f.makeDoll("Red" );
    	Doll d3 = f.makeDoll("Blue");
    	
    	d1.push();
    	d2.push();
    	d3.push();
    }
}

class Factory {                                     // [2] Class 생성
	public Doll makeDoll(String name) {
		if (name == "Blue") return new BlueDoll();
		if (name == "Red")  return new RedDoll();
		return null;
	}
}

interface Doll {
	void push();
}

class BlueDoll implements Doll {
	@Override
	public void push() { System.out.println("Push BlueDoll"); }
}


class RedDoll implements Doll {
	@Override
	public void push() { System.out.println("Push RedDoll"); }
}
  • [1] Class 생성을 위한 Factory를 Call
  • [2] 실제 Class 생성을 위한 부분

 

구현 방법 - Python

class Factory ():
    def makeDoll(self, str):
        if   str == "Blue": return BlueDoll()
        elif str == "Red" : return RedDoll()
        return None

class BlueDoll():
    def push(self):
        print("push BlueDoll")

class RedDoll():
    def push(self):
        print("push RedDoll")
    

factory = Factory();
d1 = factory.makeDoll("Blue")
d2 = factory.makeDoll("Red")
d3 = factory.makeDoll("Blue")
d1.push()
d2.push()
d3.push()