Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 파일삭제
- 스프링프레임워크
- GitHub
- 부스트코스
- springsecurity
- 팀과제
- container
- assuming That
- Swagger
- Junit5
- assume
- 원격저장소
- assume True
- Git
- MVC
- MVC모듈
- swaggerUrl
- c언어
- DispatcherServlet
- assume That
- .idea
- springmvc
- CS50
- Spring
- securityconfig
- springframeworkruntime
- springboot
- 컴퓨터과학
- gitbash
- .out
Archives
- Today
- Total
도담이 먹여 살려야하는 집사
Abstract Factory Pattern 본문
팩토리 패턴을 한단계 업그레이드 시켜 추상화를 더했다고 보면됨.
구체적으로 만들어진 하위클래스를 정의하지 않고 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스
즉, 다양한 성격의 객체를 하나의 군으로 형성해 그것을 객체 단위로 취급해서 생성해야할때 유용한 패턴
추상팩토리 패턴은 언제 사용할까?
객체가 생성되거나 구성, 표현되는 방식과 무관하게 시스템을 독립적으로 만들고자 할때
여러 제품군 중 하나를 선택해서 시스템을 설정해야하고 한번 구성한 제품을 다른 것으로 대체할 수 있을때
관련된 제품 객체들이 함께 사용되도록 설계, 이부분에 대한 제약이 외부에도 지켜지도록 하고싶을때
제품에 대한 라이브러리 제공 그들의 구현이 아닌 인터페이스를 노출시키고 싶을 때(?)
장점은 팩토리 메소드와 비슷 하고 추가한다면 구상클래스에 의존하지 않고 추상화된 것에 의존한다(디자인패턴을 준수한다고 보면됨)
팩토리메소드패턴은 인스턴스를 타입에 따라 생성해야하기때문에 분기문이 들어가고 의존성이 생기게됨. 좋은코드는 변화에 유연해야하기때문에 인스턴스를 바깥에 만들고 행위만 정의한다면 분기문을 충분히 제거할 수 있게됨( 이게 추상화)

<예제 수정하기>
package Abstract;
//관련있는 부품들을 생성해야함
public interface BikeFactory {
public Body crateBody(); //바디를 리턴하는 함수
public Wheel createWheel(); //바퀴를 리턴하는 함수
}
package Abstract;
public interface Body {
}
package Abstract;
public interface Wheel {
}
package Factory;
import Abstract.Body;
public class SamBody implements Body{
}
package Factory;
import Abstract.BikeFactory;
import Abstract.Body;
import Abstract.Wheel;
public class SamFactory implements BikeFactory {
@Override
public Body crateBody() {
// TODO Auto-generated method stub
return new SamBody();
}
@Override
public Wheel createWheel() {
// TODO Auto-generated method stub
return new SamWheel();
}
}
package Factory;
import Abstract.Wheel;
public class SamWheel implements Wheel {
}
package gt;
import Abstract.BikeFactory;
import Abstract.Body;
import Abstract.Wheel;
public class GtBikeFactory implements BikeFactory {
@Override
public Body crateBody() {
// TODO Auto-generated method stub
return new GtBody();
}
@Override
public Wheel createWheel() {
// TODO Auto-generated method stub
return new GtWheel();
}
}
package gt;
import Abstract.Body;
public class GtBody implements Body {
}
package gt;
import Abstract.Wheel;
public class GtWheel implements Wheel {
}
import Abstract.BikeFactory;
import Abstract.Body;
import Abstract.Wheel;
import Factory.SamFactory;
import gt.GtBikeFactory;
public class Main {
public static void main(String[] args) {
BikeFactory factory = new SamFactory();
Body body = factory.crateBody();
Wheel wheel = factory.createWheel();
System.out.println(body.getClass());
System.out.println(wheel.getClass());
System.out.println("****************************************");
BikeFactory factory2 = new GtBikeFactory();
Body body1 = factory.crateBody();
Wheel wheel1 = factory.createWheel();
System.out.println(body1.getClass());
System.out.println(wheel1.getClass());
}
}
'Design Pattern' 카테고리의 다른 글
Factory-Method Pattern (2) | 2020.09.02 |
---|---|
Template Method Pattern (0) | 2020.09.01 |
Design Pattern (0) | 2020.09.01 |