본문 바로가기

디자인패턴

[ Design Pattern ] Abstract Factory Pattern 추상 팩토리 패턴

728x90

Abstract Factory Pattern 추상 팩토리 패턴 이란?

추상 팩토리 패턴은 클래스의 연관된 서브 클래스들을 묶어 쉽게 교체하는 패턴이다

팩토리 메소드 패턴에서 서브 클래스들을 대신 생성하는 로직들이 있는데 이걸 없애는데 사용하는 패턴이다

즉 새로운 기능이 추가 되더라도 이전에 구현한 코드들에 영향을 주지 않고 생성할 수 있다.

 

Abstract Factory Pattern 추상 팩토리 패턴 어떨 때 사용 하지?

  • 시스템의 하나의 기능이 여러개의 사용자 별로 지원하는게 상이 할 떄
  • 객체 묶음들을 함께 사용 해야 하는 경우
  • 객체의 생성 구성 등 표현방법들이 독립적이여야 하는 경우

 

Abstract Factory Pattern 추상 팩토리 패턴 구조

 

Abstract Factory Pattern 추상 팩토리 패턴 장단점

장점

  • 클라이언트 코드를 구현 클래스에서 분리
  • 객체 일관성 향상
  • 기능의 변경이 쉽다

단점

  • 새롭게 추가 되는 기능이 번거롭다

 

Abstract Factory Pattern 추상 팩토리 패턴 예시

핸드폰 공장 예시로 들어보겠다. 공장은 제품을 생상한 여러가지의 기계들이 있다. 또 한 그 기계로 인해 돌아가는 또 다른 기계들이 있다.

 

1.기계A

1
2
3
public interface 기계A {
    public void 생산();
}
cs
1
2
3
4
5
6
public class 기계A1 implements 기계A {
    @Override
    public void 생산() {
        System.out.println("기계A1 생산중...");
    }
}
cs
1
2
3
4
5
6
public class 기계A2 implements 기계A {
    @Override
    public void 생산() {
        System.out.println("기계A2 생산중...");
    }
}
cs

 

2.기계B

1
2
3
public interface 기계B {
    public void 생산();
}
cs
1
2
3
4
5
6
public class 기계B1 implements 기계B {
    @Override
    public void 생산() {
        System.out.println("기계B1 생산중...");
    }
}
cs
1
2
3
4
5
6
public class 기계B2 implements 기계B {
    @Override
    public void 생산() {
        System.out.println("기계B2 생산중...");
    }
}
cs

 

3.기계Factory

1
2
3
4
public interface 기계Factory {
    public 기계A get기계A();
    public 기계B get기계B();
}
cs
1
2
3
4
5
6
7
8
9
10
public class 기계FactoryA implements 기계Factory{
    @Override
    public 기계A get기계A() {
        return new 기계A1();
    }
    @Override
    public 기계B get기계B() {
        return new 기계B1();
    }
}
cs
1
2
3
4
5
6
7
8
9
10
public class 기계FactoryB implements 기계Factory{
    @Override
    public 기계A get기계A() {
        return new 기계A2();
    }
    @Override
    public 기계B get기계B() {
        return new 기계B2();
    }
}
cs

 

테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
    기계Factory factoryA = new 기계FactoryA();
    factoryA .get기계A().생산();
    factoryA .get기계B().생산();
 
    기계Factory factoryB = new 기계FactoryB();
    factoryB.get기계A().생산();
    factoryB.get기계B().생산();
}
// 기계A1 생상중...
// 기계B1 생상중...
// 기계A2 생상중...
// 기계B2 생상중...
cs

 

   관련 글
 

저의 글을 읽어 주셔서 감사합니다. 오늘도 즐거운 하루 보내세요.

저의 글이 조금이나마 도움이 되셨다면 로그인이 필요 없는 공감♥ 한번 꾸욱 눌러주세요 하하~

728x90

'디자인패턴' 카테고리의 다른 글

[ Design Pattern ] Factory Method Pattern 팩토리 패턴  (0) 2022.05.20