Both sides previous revisionPrevious revisionNext revision | Previous revision |
design_pattern:abstract_factory_pattern [2017/10/28 16:36] – [Concrete Factory2 - DivFactory] ledyx | design_pattern:abstract_factory_pattern [2021/02/07 03:24] (current) – [Abstract Factory Pattern] ledyx |
---|
* 부품의 구체적인 구현에는 주목하지 않고, **인터페이스(API)에 주목**. | * 부품의 구체적인 구현에는 주목하지 않고, **인터페이스(API)에 주목**. |
* **추상적인 공장**(Abstract Factory)에서 **추상적인 부품**을 조립하고 **추상적인 제품**을 완성한다. | * **추상적인 공장**(Abstract Factory)에서 **추상적인 부품**을 조립하고 **추상적인 제품**을 완성한다. |
| * 많은 수의 연관된 하위 클래스를 특정 그룹으로 묶어 한번에 교체.\\ ex) 특정 라이브러리 배포시 OS별로 지원하는 기능이 다를 때, OS별 기능 변경을 통합적으로 변경. |
| |
{{tag>Architecture Modeling DesignPattern Creational}} | {{tag>Architecture Modeling Design_Pattern Creational}} |
| |
= Factory = | = Factory = |
| |
= Client = | = Client = |
<sxh java> | * <fc red>Client는 구체적인 부품, 제품, 공장에 대해 모른다!</fc> |
| * API만 이용! 말그대로 <fc red>추상적인 공장(Abstract Factory)에서 추상적인 부품을 조립하고 추상적인 제품을 완성한다.</fc> |
| |
| <sxh java ; highlight: [13]> |
import factory.Factory; | import factory.Factory; |
import factory.LinkItem; | import factory.LinkItem; |
| |
| |
Page page = factory.createPage(className, "By xeyez"); | Page page = factory.createPage(className, "By ledyx"); |
page.add(trary_community); | page.add(trary_community); |
page.add(tray_searchEngine); | page.add(tray_searchEngine); |
</li></ul> | </li></ul> |
</li></ul> | </li></ul> |
<hr><footer>By xeyez</footer></body> | <hr><footer>By ledyx</footer></body> |
</html> | </html> |
</sxh> | </sxh> |
| |
<html> | |
<head><title>listfactory.ListFactory</title></head> | |
<body> | |
<h1>listfactory.ListFactory</h1><ul> | |
<li> | |
커뮤니티 | |
<ul> | |
<li><a href="http://www.todayhumor.co.kr">오늘의 유머</a></li> | |
<li><a href="http://ruliweb.com/">루리웹</a></li> | |
</ul> | |
</li><li> | |
검색 엔진 | |
<ul> | |
<li><a href="http://www.google.com">Google</a></li> | |
<li><a href="http://www.daum.net">Daum</a></li> | |
<li> | |
Naver | |
<ul> | |
<li><a href="http://www.naver.com">Naver</a></li> | |
<li><a href="http://m.naver.com">Naver Mobile</a></li> | |
</ul> | |
</li></ul> | |
</li></ul> | |
<hr><footer>By xeyez</footer></body> | |
</html> | |
| |
| |
<br> | <br> |
</div> | </div> |
<hr><footer>By xeyez</footer></body> | <hr><footer>By ledyx</footer></body> |
</html> | </html> |
</sxh> | </sxh> |
| |
<html> | |
<head><title>divfactory.DivFactory</title></head> | |
<body> | |
<h1>divfactory.DivFactory</h1> | |
<div> | |
<div style="border: 1px solid black; ; margin: 5px; padding: 5px"> | |
<div>커뮤니티</div> | |
| |
<div> | |
<span><a href="http://www.todayhumor.co.kr">오늘의 유머</a></span> | |
| |
<span><a href="http://ruliweb.com/">루리웹</a></span> | |
</div> | |
</div> | |
<br> | |
| |
<div style="border: 1px solid black; ; margin: 5px; padding: 5px"> | |
<div>검색 엔진</div> | |
| |
<div> | |
<span><a href="http://www.google.com">Google</a></span> | |
| |
<span><a href="http://www.daum.net">Daum</a></span> | |
| |
<div style="border: 1px solid black; ; margin: 5px; padding: 5px"> | |
<div>Naver</div> | |
| |
<div> | |
<span><a href="http://www.naver.com">Naver</a></span> | |
| |
<span><a href="http://m.naver.com">Naver Mobile</a></span> | |
</div> | |
</div> | |
<br> | |
</div> | |
</div> | |
<br> | |
</div> | |
<hr><footer>By xeyez</footer></body> | |
</html> | |
| |