Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
design_pattern:abstract_factory_pattern [2017/10/28 16:23] – [Concrete Products] ledyxdesign_pattern:abstract_factory_pattern [2021/02/07 03:24] (current) – [Abstract Factory Pattern] ledyx
Line 3: Line 3:
   * 부품의 구체적인 구현에는 주목하지 않고, **인터페이스(API)에 주목**.   * 부품의 구체적인 구현에는 주목하지 않고, **인터페이스(API)에 주목**.
   * **추상적인 공장**(Abstract Factory)에서 **추상적인 부품**을 조립하고 **추상적인 제품**을 완성한다.   * **추상적인 공장**(Abstract Factory)에서 **추상적인 부품**을 조립하고 **추상적인 제품**을 완성한다.
 +    * 많은 수의 연관된 하위 클래스를 특정 그룹으로 묶어 한번에 교체.\\ ex) 특정 라이브러리 배포시 OS별로 지원하는 기능이 다를 때, OS별 기능 변경을 통합적으로 변경.
  
-{{tag>Architecture Modeling DesignPattern Creational}}+{{tag>Architecture Modeling Design_Pattern Creational}}
  
 = Factory = = Factory =
Line 385: Line 386:
 </sxh> </sxh>
  
 +
 += Client =
 +  * <fc red>Client는 구체적인 부품, 제품, 공장에 대해 모른다!</fc>
 +    * API만 이용! 말그대로 <fc red>추상적인 공장(Abstract Factory)에서 추상적인 부품을 조립하고 추상적인 제품을 완성한다.</fc>
 +
 +<sxh java ; highlight: [13]>
 +import factory.Factory;
 +import factory.LinkItem;
 +import factory.Page;
 +import factory.TrayItem;
 +
 +public class Main {
 + public static void main(String[] args) {
 + operateFactory("listfactory.ListFactory");
 + operateFactory("divfactory.DivFactory");
 + }
 +
 + private static void operateFactory(String className) {
 + Factory factory = Factory.getFactory(className);
 +
 +
 + LinkItem link_todayHumor = factory.createLink("오늘의 유머", "http://www.todayhumor.co.kr");
 + LinkItem link_ruliweb = factory.createLink("루리웹", "http://ruliweb.com/");
 +
 + TrayItem trary_community = factory.createTray("커뮤니티");
 + trary_community.add(link_todayHumor);
 + trary_community.add(link_ruliweb);
 +
 +
 + LinkItem link_google = factory.createLink("Google", "http://www.google.com");
 + LinkItem link_daum = factory.createLink("Daum", "http://www.daum.net");
 +
 + LinkItem link_naver = factory.createLink("Naver", "http://www.naver.com");
 + LinkItem link_naver_m = factory.createLink("Naver Mobile", "http://m.naver.com");
 +
 +
 + TrayItem tray_naver = factory.createTray("Naver");
 + tray_naver.add(link_naver);
 + tray_naver.add(link_naver_m);
 +
 + TrayItem tray_searchEngine = factory.createTray("검색 엔진");
 + tray_searchEngine.add(link_google);
 + tray_searchEngine.add(link_daum);
 + tray_searchEngine.add(tray_naver);
 +
 +
 + Page page = factory.createPage(className, "By ledyx");
 + page.add(trary_community);
 + page.add(tray_searchEngine);
 +
 + page.output();
 + }
 +}
 +</sxh>
 +
 +== 실행 결과 ==
 +=== Concrete Factory1 - ListFactory ===
 +
 +<sxh html>
 +<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 ledyx</footer></body>
 +</html>
 +</sxh>
 +
 +
 +
 +
 +=== Concrete Factory2 - DivFactory ===
 +
 +<sxh html>
 +<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 ledyx</footer></body>
 +</html>
 +</sxh>
design_pattern/abstract_factory_pattern.1509204187.txt.gz · Last modified: 2021/02/07 03:15 (external edit)