디자인 모드 3: 장식 모드
Troll 인터페이스, 괴물 이라는 뜻?트 롤?세 개의 함수 가 있다.
/**
*
* Interface for trolls
*
*/
public interface Troll {
void attack();
int getAttackPower();
void fleeBattle();
}
그리고 Simple Troll 류 는 Troll 인 터 페 이 스 를 사용 합 니 다.
/**
*
* SimpleTroll implements {@link Troll} interface directly.
*
*/
public class SimpleTroll implements Troll {
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleTroll.class);
@Override
public void attack() {
LOGGER.info("The troll tries to grab you!");
}
@Override
public int getAttackPower() {
return 10;
}
@Override
public void fleeBattle() {
LOGGER.info("The troll shrieks in horror and runs away!");
}
}
장식 류 트 롤 데 코 레이 터 는 트 롤 인 터 페 이 스 를 사 용 했 을 뿐만 아니 라 자신 도 하 나 를 따로 가지 고 인터페이스 함 수 를 모두 다른 것 에 의뢰 한 것 을 볼 수 있다.
/**
* TrollDecorator is a decorator for {@link Troll} objects. The calls to the {@link Troll} interface
* are intercepted and decorated. Finally the calls are delegated to the decorated {@link Troll}
* object.
*
*/
public class TrollDecorator implements Troll {
private Troll decorated;
public TrollDecorator(Troll decorated) {
this.decorated = decorated;
}
@Override
public void attack() {
decorated.attack();
}
@Override
public int getAttackPower() {
return decorated.getAttackPower();
}
@Override
public void fleeBattle() {
decorated.fleeBattle();
}
}
하나의 구체 적 인 장식 이 실현 되 고 장식 류 를 계승 하 며 초 류 를 호출 하 는 토대 에서 자신 이 뭔 가 를 추가 하 는 것 이다. 초 류 의 실현 은 바로 외부 에 있 는 Troll 인터페이스 가 실현 되 는 것 이다. 그러면 기 존의 Troll 외 에 기능 을 추가 했다.
/**
* Decorator that adds a club for the troll
*/
public class ClubbedTroll extends TrollDecorator {
private static final Logger LOGGER = LoggerFactory.getLogger(ClubbedTroll.class);
public ClubbedTroll(Troll decorated) {
super(decorated);
}
@Override
public void attack() {
super.attack();
LOGGER.info("The troll swings at you with a club!");
}
@Override
public int getAttackPower() {
return super.getAttackPower() + 10;
}
}
너 는 이것 도 상속 이 아니 냐 고 물 을 지도 모른다.확실히 계승 까지 실 용적 이지 만 단순히 계승 을 사용 하여 기능 을 확장 하 는 것 과 는 큰 차이 가 있다.차이 가 뭘 까요?운행 할 때 종 류 를 바 꿀 수 있 는 행동 이다.
public static void main(String[] args) {
// simple troll
LOGGER.info("A simple looking troll approaches.");
Troll troll = new SimpleTroll();
troll.attack();
troll.fleeBattle();
LOGGER.info("Simple troll power {}.
", troll.getAttackPower());
// change the behavior of the simple troll by adding a decorator
LOGGER.info("A troll with huge club surprises you.");
Troll clubbed = new ClubbedTroll(troll);
clubbed.attack();
clubbed.fleeBattle();
LOGGER.info("Clubbed troll power {}.
", clubbed.getAttackPower());
}
}
Simple Troll 은 일반적인 Troll 로 Clubbed Troll 장식 을 해 주면 곧 Clubbed Troll 기능 이 생 긴 다.이런 식 으로 유추 하면 다른 장식 도 넣 을 수 있다.이것 은 또 계승 과 의 또 다른 중요 한 차이 점 이다. 자유 조합 이다.N 개의 장식 자 는 모두 2 ^ N 개의 서로 다른 종 류 를 만 들 수 있 습 니 다. 만약 에 하나씩 계승 하면... 물론 장식 자의 특성 상 추가 기능 은 특정한 순 서 를 요구 하지 않 는 것 이 좋 습 니 다. 즉, 추가 기능 간 에 서로 영향 을 주지 않 는 것 이 가장 좋 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.