> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java Factory Pattern

jini:) 2023. 11. 22. 09:57
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Advanced > Java Factory Pattern
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

 

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
반응형