
디자인패턴 시작하기를 보고 정리하기
복싱의 fly 체급에서 따온 단어. (가볍고, 민첩)
- 어떤 객체를 필요할 때 한번 생성, 이후 재활용
- 객체 생성시 자원이 많이 소모될 경우, 훨씬 적은 자원으로 객체 재사용 가능.

Digit: 0~9 중 하나의 데이터.
생성될 때 하나의 파일을 열고 데이터를 모두 메모리에 적재함
(상당한 비용 발생).
이를 이용해 화면에 표시.
DigitFactory : Digit 객체를 요청하면 Digit을 return 하는 역할.
최초 요청시 한번만 Digit 을 생성, 이후 요청부터는 이전에 만들어둔 Digit 을 return 함.
Number : 긴 숫자를 화면에 출력하는 기능을 수행. DigitFatory에 Digit 을 요청함.

6개의 Disit 을 이용하지만, 6개를 생성하지 않음. 3개의 Disit 객체만 생성됨
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class Digit {
private ArrayList<String> data = new ArrayList<String>();
public Digit(String fileName){
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(fileName);
br = new BufferedReader(fr);
for(int i=0; i<8; i ++){
String line = br.readLine();
if (line.length() < 8) {
line = String.format("%-8s", line);
}
// 파일을 읽어와 메모리에 적재
data.add(line);
}
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if(fr != null) fr.close();
if(br != null) br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
public String getLine(int index) {
return this.data.get(index);
}
}
/// Digit 객체를 요청하면 Digit 객체를 전달하는 역할
public class DigitFactory {
private Digit[] pool = new Digit[]{
null,null,null,null,null,null,null,null,null,null,
};
public Digit getDigit(int n){
if(pool[n] != null){
return pool[n];
}else{
String fileName = String.format("./data/%d.txt", n);
Digit digit = new Digit(fileName);
pool[n] = digit;
return digit;
}
}
}
import java.util.ArrayList;
public class Number {
private ArrayList<Digit> digits = new ArrayList<Digit>();
public Number(int number){
String strNum = Integer.toString(number);
int len = strNum.length();
DigitFactory digitFactory = new DigitFactory();
for (int i = 0; i < len; i++){
int n = Character.getNumericValue(strNum.charAt(i));
Digit digit = digitFactory.getDigit(n);
digits.add(digit);
}
}
public void print(int x, int y) {
for (int i = 0; i < 8; i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < digits.size(); j++) {
sb.append(digits.get(j).getLine(i));
}
System.out.println(sb.toString());
}
}
}
import java.util.ArrayList;
public class Main {
public static void main(String[] args){
Number number = new Number(434331);
number.print(5,5);
}
}
