이전: https://blog.naver.com/101story/100169473958
- java 언어로 배우는 디자인 패턴 입문 책을 보고 공부 중 -
Abstract - 추상적인 공장이 등장하고, 추상적인 부품을 조합해서 추상적인 제품을 만듬.
Adapter - '이미 제공되어 있는 것'과 '필요한 것' 사이의 '차이'를 없애주는 패턴.
Builder - 추상클래스로서 실제의 처리는 기술되어 있지 않고, 추상 메소드만 선언되어 있음.
Factory - 인스턴스를 만드는 방법을 상위 클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지 않음.
Iterator - 무엇인가 많이 모여 있는 것들을 순서대로 지정하면서 전체를 검색하는 처리를 실행하기 위한 것.
Prototype - 인스턴스로 부터 인스턴스를 만드는 방법
Singleton - 요소를 1개 밖에 가지고 있지 않은 집합.
Template - 상위 클래스에서 처리의 뼈대를 결정하고, 하위 클래스에서 그 구체적인 내용을 결정.
▶ Abstract
정의 : 추상적인 공장이 등장하고, 추상적인 부품을 조합해서 추상적인 제품을 만듬.
- 추상적인 공장 : public abstract class Factory
추상적인 공장을 나타내는 클래스(Link, Page를 만든다.)
- 추상적인 부품 : public abstract class Link
HTML의 LINK를 나타내는 클래스
- 추상적인 부품 : public abstract class Page
HTML의 Page를 나타내는 클래스
- 구체적인 공장 : public class ListFactory extends Factory
구체적인 공장을 나타내는 클래스(ListLink, ListPage를 만든다.)
- 구체적인 부품 : public class ListLink extends Link
HTML의 LINK를 나타내는 클래스
- 구체적인 부품 : public class ListPage extends Page
HTML의 Page를 나타내는 클래스
▶ Adapter
정의 : '이미 제공되어 있는 것'과 '필요한 것' 사이의 '차이'를 없애주는 패턴.
- 필요로 하는 클래스 : public interface print or public abstract class print
print 클래스를 상속하는 클래스에서 반듯이 구현 되어야 하는 클래스를 선언.
- 어댑터의 역할 : public class PrintBanner extends Print
print 클래스를 상속하여 구체적으로 정의되어 있는 클래스(Banner)를 상황에 맞에 호출.
- 미리 제공되고 있는 클래스 : public class Banner
구체적인 로직이 구현되어 있는 클래스.
▶ Builder
정의 : 추상클래스로서 실제의 처리는 기술되어 있지 않고, 추상 메소드만 선언되어 있음.
- 추상적 클래스 : public abstract class Builder
문서를 구성하기 위한 메소드를 결정하는 추상클래스
- 문서의 내용을 넣는 클래스 : public class Director
각각의 다른 builder를 받아 builder에 동일한 문서를 만드는 클래스.
- 구체적 클래스 : public class HTMLBuilder extends Builder
HTML 파일을 이용해서 문서를 만드는 클래스
- 구체적 클래스 : public class TextBuilder extends Builder
일반 텍스트(보통의 문자열)를 이용해서 문서를 만드는 클래스
▶ Factory
정의 : 인스턴스를 만드는 방법을 상위 클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지 않음.
구체적인 내용은 모두 하위 클래스에서 수행.
- 추상적 공장 : public abstract class Factory
product를 구현 하는 메소드 create을 구현하고 있는 추상 클래스
- 추상적 제품 : public abstract class Product
추상 메소드 use만 정의되어 있는 추상 클래스
- 구체적 공장 : public class IDCardFactory extends Factory
구체적인 제품을 생성, 등록 하는 메소드 createProduct, registerProduct를 구현하고 있는 클래스
- 구체적 제품 : public class IDCard extends Product
구체적인 제품의 동작을 구현하고 있는 클래스.
▶ Iterator
정의 : 무엇인가 많이 모여 있는 것들을 순서대로 지정하면서 전체를 검색하는 처리를 실행하기 위한 것.
- 검색 인터페이스 : public interface Iterator
하나씩 나열하면서 검색을 실행하는 인터페이스
- 집합체 인터페이스 : public interface Aggregate
iterator를 가지는 집합체를 나타내는 인터페이스
- 책 : public class Book
책을 나타내는 클래스
- 서가 : public class BookShelf implements Aggregate
서가를 나타내는 클래스
- 서가 검색 : public class BookShelfIterator implements Iterator
서가를 검색하는 클래스
▶ Prototype
정의 : 클래스로부터 인스턴스를 생성하는 것이 아니라 인스턴스로 부터 인스턴스를 만드는 방법.
- 인스턴스 복제 : public class Manager
createClone을 사용해서 인스턴스를 복제하는 클래스
product의 createClone을 사용하면 원본은 그대로 두고 해당 key에 해당하는 인스턴스를 복제 해줌
- 추상적 제품 : public interface Product extends Cloneable
추상 메소드 use와 createClone이 선언되어 있는 인터페이스
- 문자열 테두리 표시 : public class MessageBox implements Product
테두리로 사용할 char를 받고 문자열을 받아서 테두리를 표시해줌
▶ Singleton
정의 : 요소를 1개밖에 가지고 있지 않은 집합. 생성자는 private, getInstance 메소드를 호출했을 때 singleton 클래스는 초기화됨.
- 클래스 : public class Singleton
a. private static Singleton singleton = new Singleton();
자신이 자신의 인스턴스를 가짐
b. private Singleton(){}
생성자는 private
c. public static Singleton getInstance() { return singleton; }
자신의 인스턴스를 리턴
▶ Template
정의 : 상위 클래스에서 처리의 뼈대를 결정하고, 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴.
- 추상 클래스 : public abstract class AbstractDisplay
메소드 display 만 구현되고 있는 추상 클래스
- 구체적 클래스 : public class StringDisplay extends AbstractDisplay
메소드 open, print, close를 구현하고 있는 클래스
'Software Science' 카테고리의 다른 글
Enterprise Architecture EA (0) | 2023.06.04 |
---|---|
web browser의 가치관 (0) | 2023.03.19 |
빅데이타 분석 맛보기 (0) | 2023.03.08 |
100년된 IBM, 10년된 Agile (0) | 2023.03.08 |
UML Class Diagram 을 자바 소스로 구현 기준 (0) | 2023.03.08 |