추상 팩토리 패턴(Abstract factory pattern)은 다양한 구성 요소 별로 '
객체의 집합'을 생성해야 할 때 유용하다. 이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다.
대표적인 예로,
자바 프로그래밍 언어의
GUI 구성 요소인 AWT/Swing 라이브러리의
룩 앤드 필 변경 기능을 들 수 있다.
메탈,
마이크로소프트 윈도,
맥 OS 등의 모양으로 변경할 수 있다. 이에 따라 추상 팩토리에 있는 기본 팩토리 객체가 변경된다. 그러면 이후로 생성되는 GUI 객체들은 전부 해당 룩앤필에 따른다.
------------------------------------------------------
다이어그램
abstract factory ---> abstract product
↑ ↑
concrete factory -> concrete product
------------------------------------------------------
다이어그램 구상
가상공장 ---> 차, 신발, 시계 등등 공장 제품
↑ ↑
공장 -> 완제품
------------------------------------------------------
구현
<!doctype html>
<html lang="ko">
<head>
<title>abstract factory</title>
</head>
<body>
<script>
// 공장에서 여러 제품들을 만든다고 생각 하면 쉬움
var AbstractFactory ; // 추상화된 공장(생산, 이름 등등의 기능 을 갖고 있을거임)
var ConcreteFactory ; // 구현된 공장(실질적 공장의 이름과, 작동에 대해 기술되 있을거임)
var AbstractProduct ; // 공장에서 생산할 제품들의 추상화된 인터페이스 (차, 시계, 신발 등등)
var ConcreteProduct ; // 해당 제품을 공장에서 만든다 생각
AbstractFactory = function(){
this.location ='서울';
this.companyName = 'nice';
};
AbstractFactory.prototype = {
create : function(){
console.log(this.product);
},
set : function(product){
this.product = product.name;
}
};
function ConcreteFactory(){
var abstractFactory = new AbstractFactory
abstractFactory.location = '경기';
abstractFactory.companyName = 'nic';
return abstractFactory;
}
function AbstractProduct_car(){
this.name = 'car';
}
function AbstractProduct_shoes(){
this.name = 'shoes';
}
var concreteProduct = new ConcreteFactory;
var car = new AbstractProduct_car;
var shoes = new AbstractProduct_shoes;
concreteProduct.set(car);
concreteProduct.create();
concreteProduct.set(shoes);
concreteProduct.create();
</script>
</body>
</html>
댓글 없음:
댓글 쓰기