본문으로 바로가기

디자인패턴 - 추상 팩토리 패턴

category 프로그래밍 언어/Java 2019. 8. 31. 23:28

 추상 팩토리 패턴 

추상 팩토리 패턴은 관련있는 객체를 가상화 시키는 겁니다.

위처럼 중간 부분에 가상화를 시켜서 사용한다는 것이죠. 

 

우선 Wheel과 Body를 만듭시다.

package abst;

public interface Body {
	//바디 메서드
}
package abst;

public interface Wheel {
	//휠 기능 메서드

}

이를 생산해주는 BikeFactory를 만들어줍시다.

package abst;

public interface BikeFactory {
	public Body createBody();
	public Wheel createWheel();
	
}

그럼 이 인터페이스를 이제 구체적인 자전거를 만들어줄 때 구현해주면 됩니다.

 

예를들어 삼X 자전거를 만들기위해서

SamBody와 SamWheel 그리고 SamFactory를 만들어줍니다.

그리고 GTBike를 만들기 위해서 

GtBody와 GtWheel 그리고 GtFactory를 만들어줍니다.

 

package sam;

import abst.Body;

public class SamBody implements Body{

}
package sam;

import abst.Wheel;

public class SamWheel implements Wheel {
	
}
package sam;

import abst.BikeFactory;
import abst.Body;
import abst.Wheel;

public class SamFactory implements BikeFactory{

	@Override
	public Body createBody() {
		// TODO Auto-generated method stub
		return new SamBody();
	}

	@Override
	public Wheel createWheel() {
		// TODO Auto-generated method stub
		return new SamWheel();
	}

}

구현을 해주면 완성입니다. GtBike도 마찬가지로 해주면 됩니다.

만약 여러 자전거들이 있으면 Main에서 하나만 바꿔주면 모두 사용가능합니다.

 

package main;

import abst.BikeFactory;
import abst.Body;
import abst.Wheel;
import gt.GtBikeFactory;
import sam.SamFactory;

public class Main {
	public static void main(String[] args) {
		BikeFactory factory = new SamFactory();
//		BikeFactory factory = new GtBikeFactory();
		Body body = factory.createBody();
		Wheel wheel = factory.createWheel();
		
		System.out.println(body.getClass());
		System.out.println(wheel.getClass());
	}
}

즉 factory에서 SamFactory()인지 GtBikeFactory()인지만 바꿔주면 됩니다.