자바 디자인 모드 의 장식 기 모드(Decorator)
장식 모드 는 클 라 이언 트 에 게 투명 한 방식 으로 대상 을 확장 하 는 기능 으로 관 계 를 계승 하 는 대체 방안 이다.즉,클 라 이언 트 는 대상 이 장식 전과 장식 후에 어떤 차이 가 있다 고 생각 하지 않 는 다.장식 모델 은 더 많은 하위 클래스 를 창조 하지 않 아 도 대상 의 기능 을 확장 할 수 있다.장식 모델 의 관건 은 이런 확장 이 완전히 투명 하 다 는 것 이다.
패턴 구조
UML 도표:
장식 모드 의 클래스 캐릭터:
추상 적 인 구성 요소 역할(Project):추가 책임 을 받 을 대상 을 규범화 하기 위해 인 터 페 이 스 를 제공 합 니 다.
구체 적 인 구성 요소 역할(Employe):추가 책임 을 받 을 클래스 를 정의 합 니 다.
장식 역할(Manager):구조물 대상 의 인 스 턴 스 를 가지 고 추상 적 인 구조물 인터페이스 와 일치 하 는 인 터 페 이 스 를 정의 합 니 다.
구체 적 인 장식 역할(ManagerA,ManagerB):구조물 대상 에 게'붙 이기'에 부가 하 는 책임 을 진다.
코드 예제
package interview;
interface Project{
void doCoding();
}
class Employe implements Project{
@Override
public void doCoding() {
System.out.println(" ......");
}
}
class Manager implements Project{
private Project project;
public Manager(Project project){
this.project = project;
}
@Override
public void doCoding() {
startNewWork();
project.doCoding();
}
public void startNewWork(){}
}
class ManagerA extends Manager{
public ManagerA(Project project) {
super(project);
}
@Override
public void startNewWork() {
System.out.println(" ");
}
}
class ManagerB extends Manager{
public ManagerB(Project project) {
super(project);
}
@Override
public void startNewWork() {
System.out.println(" ");
}
}
public class MainTest {
public static void main(String arg[]) {
Project project = new Employe();
Project managerA = new ManagerA(project);
Project managerB = new ManagerB(project);
managerA.doCoding();
managerB.doCoding();
}
}
장식 모드 의 장단 점:장점:
장식 모델 과 계승 의 목적 은 모두 대상 의 기능 을 확대 하 는 것 이지 만 장식 모델 은 계승 보다 더 많은 유연성 을 제공 할 수 있다.장식 모델 은 시스템 이'붙 이기'에 필요 한'장식'을 동태 적 으로 결정 하도록 허용 하고 계승 관 계 는 다 르 며 계승 관 계 는 정태 적 이 며 시스템 이 실행 되 기 전에 결정 된다.
서로 다른 구체 적 인 장식 류 와 이런 장식 류 의 조합 을 사용 하면 디자이너 는 다양한 행위 조합 을 창조 할 수 있다.
단점:
장식 모드 를 사용 하기 때문에 계승 관 계 를 사용 하 는 것 보다 적은 수량 이 필요 한 클래스 를 사용 할 수 있 습 니 다.비교적 적은 종 류 를 사용 하면 당연히 디자인 을 비교적 쉽게 진행 할 수 있다.그러나 다른 한편,장식 모델 을 사용 하면 계승 관 계 를 사용 하 는 것 보다 더 많은 대상 이 생 길 수 있다.더 많은 대상 은 실 수 를 어렵 게 만 들 수 있다.특히 이 대상 들 은 모두 비슷 해 보인다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.