728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Advanced > Java Factory Pattern
Wikipedia에 따르면 팩토리는 단순히 "새롭다"고 가정되는 다른 메서드 호출에서 다른 객체를 반환하는 객체입니다.
이 문제에서는 인터페이스 Food가 제공됩니다. Food 인터페이스를 구현하는 두 개의 클래스 Pizza와 Cake가 있으며 둘 다 getType() 메소드를 포함합니다.
Main 클래스의 main 함수는 FoodFactory 클래스의 인스턴스를 만듭니다. FoodFactory 클래스에는 매개변수에 따라 Pizza 또는 Cake의 새 인스턴스를 반환하는 getFood(String) 메서드가 포함되어 있습니다.
편집기에서 부분적으로 완료된 코드가 제공됩니다. FoodFactory 수업을 완료하십시오.
Sample Input 1
cake
Sample Output 1
The factory returned class Cake
Someone ordered a Dessert!
Sample Input 2
pizza
Sample Output 2
The factory returned class Pizza
Someone ordered Fast Food!
반응형
Code
import java.util.*;
import java.security.*;
interface Food {
public String getType();
}
class Pizza implements Food {
public String getType() {
return "Someone ordered a Fast Food!";
}
}
class Cake implements Food {
public String getType() {
return "Someone ordered a Dessert!";
}
}
class FoodFactory {
public Food getFood(String order) {
// Write your code here
if( order.equals("pizza") ) return new Pizza();
if( order.equals("cake") ) return new Cake();
return null;
} //End of getFood method
} //End of factory class
public class Solution {
public static void main(String args[]){
Do_Not_Terminate.forbidExit();
try{
Scanner sc=new Scanner(System.in);
//creating the factory
FoodFactory foodFactory = new FoodFactory();
//factory instantiates an object
Food food = foodFactory.getFood(sc.nextLine());
System.out.println("The factory returned "+food.getClass());
System.out.println(food.getType());
}
catch (Do_Not_Terminate.ExitTrappedException e) {
System.out.println("Unsuccessful Termination!!");
}
}
}
class Do_Not_Terminate {
public static class ExitTrappedException extends SecurityException {
private static final long serialVersionUID = 1L;
}
public static void forbidExit() {
final SecurityManager securityManager = new SecurityManager() {
@Override
public void checkPermission(Permission permission) {
if (permission.getName().contains("exitVM")) {
throw new ExitTrappedException();
}
}
};
System.setSecurityManager(securityManager);
}
}
팩토리 메서드 디자인 패턴
- 객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나.
- 객체 생성을 담당하는 메서드를 서브클래스에서 구현하도록 하는 패턴.
- 객체 생성을 호출하는 클라이언트 코드와 구체적인 객체 생성 코드를 분리하여 유연성을 높임.
- 객체의 생성과정을 캡슐화하여 코드를 더 쉽게 관리하고 확장.
- 추상 클래스나 인터페이스를 사용.
- 추상 클래스나 인터페이스에 팩토리 메서드가 선언되어있고, 구체적인 객체 생성은 이를 상속받는 서브클래스에서 이뤄진다.
- 클라이언트 코드는 구체적인 객체 생성 방법에 대해 알 필요 없음.
- 팩토리 클래스의 변경으로부터 독립적으로 객체 생성 가능.
- 객체 생성에 관련된 복잡성 줄임.
개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.
728x90
반응형
'> 개발-IT-인터넷 > > JAVA' 카테고리의 다른 글
[해커랭크(HackerRank) JAVA 풀이] - Java Visitor Pattern (0) | 2023.11.29 |
---|---|
[해커랭크(HackerRank) JAVA 풀이] - Java Singleton Pattern (0) | 2023.11.24 |
[해커랭크(HackerRank) JAVA 풀이] - Prime Checker (1) | 2023.11.20 |
[해커랭크(HackerRank) JAVA 풀이] - Can You Access? (0) | 2023.11.13 |
[해커랭크(HackerRank) JAVA 풀이] - Java Reflection - Attributes (0) | 2023.11.07 |