PostIT

[Java/DesignPattern] Java Design Pattern Part1 - Factory Pattern 본문

Java/Design Pattern

[Java/DesignPattern] Java Design Pattern Part1 - Factory Pattern

shun10114 2017. 7. 12. 11:55

# [Java/DesignPattern] Java Design Pattern Part1 - Factory Pattern

## 1. 내용

Factory Pattern은 많이 사용되는 패턴 중에 하나입니다. Factory Pattern은 이름 그대로 객체를 생성하기 위한 패턴으로서 객체를 생성하기 위한 좋은 해결책을 가지고 있습니다.

특히, 객체를 만들기 위한 로직을 사용자에게 노출없이 객체를 만들 수 있게 만들며, 공통 인터페이스를 사용하여 새로운 객체를 쉽게 참조할 수 있습니다.

## 2. 코드 구현

Factory Pattern을 사용하여 이번에는 Store Interface를 구현하고 스토어 인터페이스를 구현하여 구체적인 Class를 만들어보겠습니다. 



[UML]




1. Create Interface

- Store.java

// Store Class에서 공통적으로 사용할 수 있는 Method를 인터페이스로 정의


public interface Store{

void open();

}


2. Create concrete Classes implementing the same interface

// Store Interface를 구현하여 각각의 Class에 맞게 재정의


import java.util.Date;

public class ShoesStore implements Store {

@Override

public void open(){

System.out.println("ShoesStore : open() method : "+ new Date());

}


import java.util.Date;

public class ClothingStore implements Store {

@Override

public void open(){

System.out.println("ClothingStore : open() method : "+ new Date());

}


import java.util.Date;

public class ConvenienceStore implements Store {

@Override

public void open(){

System.out.println("ConvenienceStore : open() method : "+ new Date());

}


3. Create a Factory to generate object of concrete class based on given information

StoreFactory.java

// StoreFactory를 통해 각각의 가게이름을 받아 해당 Class를 instance를 생성


public class StoreFactory {

public Store openStore(String storeName) {

if(storeName == null){

return null

}


if(storeName.equalsIgnoreCase("ShoesStore")){

return new ShoesStore();

} else if(storeName.equalsIgnoreCase("ClothingStore")){

return new ClothingStore();

} else if(storeName.equalsIgnoreCase("ConvenienceStore")){

return new ConvenienceStore();

}

return null;

}

}


4. Use the Factory to open object of concrete class by passing an information such as type

FactoryPatternDemo.java

public class FactoryPatternDemo {

public static void main(String[] args){

StoreFactory storeFactory = new StoreFactory();


Store store1 = storeFactory.openStore("ShoesStore");

store1.open();


Store store1 = storeFactory.openStore("ConvenienceStore");

store1.open();


Store store1 = storeFactory.openStore("ClothingStore");

store1.open();

}

}


5. Verify the output

```

ShoesStore : open() method : Wed Jul 12 13:56:11 KST 2017

ConvenienceStore : open() method : Wed Jul 12 13:56:11 KST 2017

ClothingStore : open() method : Wed Jul 12 13:56:11 KST 2017

```

## 3. 결론

차후에 적겠습니다.



Comments