JAVA 장식자 모드(현실생활에서 코드 원리 이해)

3642 단어 java장식자모드
장식자 모드는 하나의 대상에 동적으로 추가 직책을 추가할 수 있다.기능을 추가하는 데 있어서, Decorator 모드는 하위 클래스를 생성하는 것보다 더욱 유연하다.
이 모드의 적용 환경은 다음과 같습니다.
(1) 다른 대상에 영향을 주지 않고 동적이고 투명한 방식으로 한 대상에 직책을 추가한다.
(2) 취소할 수 있는 직책을 처리한다.
(3) 자류를 생성하는 방법으로 확충할 수 없을 때.한 가지 상황은 모든 조합을 지원하기 위해 대량의 하위 클래스가 생겨 하위 클래스의 수가 폭발적으로 증가할 수 있다는 것이다.또 다른 상황은 클래스 정의가 숨겨져 있거나 클래스 정의가 하위 클래스를 생성하는 데 사용할 수 없기 때문일 수도 있습니다.
이 모드를 구현하는 주요 단계:
(1) Component(장식된 대상의 기본 클래스): 대상의 인터페이스를 정의하여 이러한 대상의 동태에 직책을 추가할 수 있다.
(2) ConcreteComponent(구체적으로 장식된 대상): 구체적인 대상을 정의하고 Decorator는 그것에 추가 직책을 추가할 수 있다.
(3) Decorator(장식자 추상 클래스): Component 실례에 대한 인용을 유지하고 Component와 일치하는 인터페이스를 정의합니다(즉, 장식된 대상의 기본 클래스를 계승하거나 실현하는 것).
(4) Concrete Decorator(구체적인 장식자): 구체적인 장식 대상은 내부에 보유하고 있는 구체적인 피장식 대상에 구체적인 직책을 추가한다.
이렇게 말하면 여러분들이 이해하기 어려울 수도 있습니다. 그러면 우리는 여전히 낡은 규칙과 조용합니다.
겨울이 된 후 날씨가 점점 추워졌다. 퇴근 후에 베테랑 먹방으로 2, 3명의 친구를 초대하여 시원한 샤브샤브 잔치를 하면 더 이상 시원하지 않다.샤브샤브하면 청두에서 먹었던 대룡D샤브샤브를 빼놓을 수 없다. 각종 냄비 밑바닥에 반찬이 다 있다. 하지만 내가 가장 좋아하는 것은 역시 대룡D샤브샤브 프라이드 냄비 밑바닥, 마라소고기, 대도모배, 천미소시지, 추추소고기, 마라갈비 등이다. 생각만 해도 군침이 돈다.
이렇게 하면 장식자의 실현 절차를 결합하면 약간 느낌이 있겠지. 위에서 언급한 솥 밑바닥은 사실 장식 대상의 기류이고 재료는 사실 장식자 추상류이다. 대룡D훠궈 프라이드 솥 밑바닥 이런 구체적인 솥 밑바닥은 바로 구체적인 장식 대상이다. 마라 소고기, 큰 칼배, 천미 소시지, 추추 소고기,마라갈비는 솥 바닥을 장식하는 데 쓰이는 각종 반찬이 구체적인 장식 대상이다.이쯤 되면 다들 밝아질 거예요. 다음은 구체적인 코드 구현을 시작할게요.
첫 번째 단계: 장식된 대상의 기본 클래스를 정의합니다 (추상적인 클래스일 수도 있고 인터페이스일 수도 있습니다)

 public interface GuoDi {
   public float cost();// 
   public String name();// 
 }
두 번째 단계: 구체적인 장식 대상을 정의한다(즉 각종 냄비 바닥, 여기서 두 가지를 정의한다)

public class YuanYang implements GuoDi {
  @Override
  public float cost() {
    return 48.0f;
  }
  @Override
  public String name() {
    return " ";
  }
}
public class DaLongYan implements GuoDi{
  @Override
  public float cost() {
    return 59.0f;
  }
  @Override
  public String name() {
    return " D ";
  }
}
3단계: 장식자 추상류 정의

public abstract class PeiCai implements GuoDi {
  private GuoDi guodi;
  public FoodDecorator(GuoDi guodi) {
    super();
    this.guodi = guodi;
  }
  @Override
  public float cost() {
    return guodi.cost();
  }
  @Override
  public String name() {
    return guodi.name();
  }
}
4단계: 구체적인 장식자 대상 정의

public class MaLaNiuRou extends PeiCai {
  public MaLaNiuRou(GuoDi guodi) {
    super(guodi);
  }
  @Override
  public float cost() {
    return super.cost()+46f;
  }
  @Override
  public String name() {
    return super.name()+"+ ";
  }
}
public class MaoDu extends PeiCai {

  public MaoDu(GuoDi guodi) {
    super(guodi);
  }
  @Override
  public float cost() {
    return super.cost()+30f;
  }
  @Override
  public String name() {
    return super.name()+"+ ";
  }
}
테스트 클래스:

public class Test {
  public static void main(String[] args) {
    GuoDi guodi = new DaLongYan ();// D 
    MaLaNiuRou y = new MaLaNiuRou(guodi);// 
    MaoDu x = new MaoDu(y);// 
    System.out.println(" "+x.name()+", "+s.cost());
  }
}
출력 결과:
1 모두 대룡D샤브샤브 프라이팬 밑바닥 + 마라 소고기 + 칼칼한 배를 주문, 총 135 소비
위에서 말한 것은 편집자가 여러분께 소개한 JAVA 장식자 모델(현실생활의 측면에서 코드 원리를 이해하는 것)입니다. 여러분께 도움이 되었으면 합니다. 궁금한 점이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 답장을 드리겠습니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기