[3] 디자인 패턴 - 팩토리 패턴(Factory Pattern)
2023. 7. 22. 16:28ㆍcs및 소프트스킬/디자인 패턴
728x90
반응형
SMALL
1. 팩토리 패턴 (Factory Pattern)
- 생성 패턴 중 하나
- 객체 생성 부분을 떼어낸 추상화한 패턴,
- 상위 클래스 : 뼈대 역할 // 하위 클래스 : 객체 생성에 관한 구체적 내용 결정
- 마치 제조 공장의 예시를 따지면, 상위 클래스 : 공장 / 하위클래스 : 레시피 라고 표현 가능
- 여기서 제목만 보여주는 행위를 표하고, 상세 내역은 숨겨주는 역할이 가능하다.
2. JS로 이용한 팩토리 패턴으로 이용한 제조 공장 구현
(1) 상위 클래스 : Factory
// 제조 공장에서 사용하는 레시피 설정
const factoryList = [CoffeeFactory, FoodFactory];
// 상위 메소드 : Factory
class Factory {
static createMaterial(type) {
const factory = factoryList[type];
// 제조 공장 클래스에서 리스트 클래스 사용
// 의존성 주입 하여 설정
return factory.createMaterial();
}
}
(2) 하위 클래스1 : CoffeeFactory // Domain Class : Coffee <캡슐화1>
// 커피 클래스를 생성하여
// Coffee라고 알려준다.
class Coffee {
constructor() {
this.name = "coffee"
}
}
// 하위 클래스 CoffeeFactory 생성
// 여기서 Coffee 클래스를 생성하여 사용
class CoffeeFactory {
static createMatrial() {
return new Coffee();
}
}
(3) 하위 클래스2 : FoodFactory // Domain Class : Food <캡슐화2>
// 음식 클래스를 생성하여
// food라고 알려준다.
class Food {
constructor() {
this.name = "food"
}
}
// 하위 클래스 FoodFactory 생성
// 여기서 Food 클래스를 생성하여 사용
class FoodFactory {
static createMatrial() {
return new Food();
}
}
(4) 테스트
const test = () => {
// 커피 공장을 불려봅니다.
const coffee = Factory.createMatrial("CoffeeFactory");
// Coffee 클래스에서의 대한 정보 중 하나인 커피 공장이라고 알려준다.
console.log(coffee.name);
// 음식 공장을 불려봅니다.
const food = Factory.createMatrial("FoodFactory");
// Food 클래스에서의 대한 정보 중 하나인 음식 공장이라고 알려준다.
console.log(food.name);
}
3. Java로 이용한 팩토리 패턴으로 이용한 제조 공장 구현
(1) 상위 클래스 : MatrialFactory // 도메인 : Matrial
// 상위 메소드 : Matrial
abstract class Matrial {
public abstract String getName();
public abstract int getPrice();
@Ovverride
public String toString() {
return getName() + " 공장 입니다. \n 발주 가격 : " + this.getPrice();
}
}
// Domain Matrial 설정 이후, 실질적 행위를 해주는 메소드
class MatrialFactory {
public Matrial getMatrial(String type, int price) {
// Coffee 공장 클래스 접근
if ("Coffee".equalsIgnoreCase(type)) return new Coffee(type, price)
// Food 공장 클래스 접근
else if ("Food".equalsIgnoreCase(type)) return new Food(type, price)
// 아무것도 설정을 하지 않을 시
else return null;
}
}
2. 하위 클래스 : Coffee <캡슐화1>
class Coffee extends Matrial {
// 변수 캡슐화
private int price;
public Coffee(String type, int price) {
this.type = type;
this.price = price;
}
@Override
public int getPrice() {
return this.price;
}
@Override
public String getType() {
return this.type;
}
}
3. 하위 클래스 : Food <캡슐화2>
class Food extends Matrial {
// 변수 캡슐화
private int price;
public Coffee(String type, int price) {
this.type = type;
this.price = price;
}
@Override
public int getPrice() {
return this.price;
}
@Override
public String getType() {
return this.type;
}
}
(4) 테스트
public class test {
public static void main (String[] args) {
Matrial coffee = MatrialFactory.getMatrial("Coffee", 100000);
Matrial food = MatrialFactory.getMatrial("Food", 2000000);
/*
Coffee 공장 입니다.
발주 가격 : 100000
*/
System.out.println(coffee);
/*
Food 공장 입니다.
발주 가격 : 2000000
*/
System.out.println(food);
}
}
728x90
반응형
LIST
'cs및 소프트스킬 > 디자인 패턴' 카테고리의 다른 글
[2] 디자인패턴 - 싱글톤 패턴(Singleton Pattern) (0) | 2023.07.16 |
---|---|
[1] 디자인 패턴의 대한 정의 (0) | 2023.07.16 |