장식자 모드(정적 에이전트)

1749 단어 JavaSE

콘셉트


기존 대상을 바꾸지 않는 기초 위에서 기능을 대상에 추가한다.상속보다 탄력적인 대안 제공(기존 대상 기능 확장)
적용 장면
  • 하나의 클래스의 기능을 확장하거나 하나의 클래스에 추가 직책을 추가
  • 대상에게 동적 추가 기능을 추가하거나 동적 해제 기능을 추가합니다.

  • 장점
  • 상속의 유력한 보충은 상속보다 유연하고 원래의 대상을 바꾸지 않는 상황에서 하나의 대상에게 기능을 확장한다.
  • 서로 다른 장식류와 이런 종류의 배열 조합을 사용하면 서로 다른 효과를 실현할 수 있다.
  • 개폐원칙에 부합
  • 결점
  • 더 많은 코드, 더 많은 종류가 나타나 프로그램의 복잡성을 증가시킨다.
  • 동적 장식 시 다층 장식이 더욱 복잡합니다.(상속을 사용하여 기능을 확대하면 클래스의 수량을 증가시킬 수 있다. 장식자 모델을 사용하면 상속처럼 그렇게 많은 클래스의 수량을 증가하지 않지만 대상의 수량을 증가시킬 수 있다. 대상의 수량이 일정한 단계까지 증가하면 우리 코드 디버깅의 난이도가 크게 증가할 것이다
  • 다음 절차를 따르십시오.
  • 장식자와 피장식자가 같은 인터페이스를 실현하거나 같은 종류를 계승
  • 장식 중 피장식자의 인용이 있어야 한다
  • 향상이 필요한 방법 강화
  • 강화할 필요가 없는 방법에 대해 원래의 방법을 사용
  • 먼저 차 인터페이스를 정의합니다
    public interface Car {
        void run();
        void stop();
    }
    

    QQ차 대 차 구현
    public class QQ implements Car{
        @Override
        public void run(){
            System.out.println("qq ");
        }
        @Override
        public void stop(){
            System.out.println(" ");
        }
    }

    인터페이스를 실현하는 장식자 모드 클래스를 만들고 QQ차를 수정합니다
    public class CarWarp implements Car {
        private Car car;
        public CarWarp(Car car){
            this.car=car;
        }
        @Override
        public void run(){
            // car.run();
            System.out.println("5 ");
        }
        @Override
        public void stop(){
            car.stop();
            System.out.println(" ");
        }
    }
    

    테스트 클래스 및 결과
    public class TTT {
        public static void main(String[] args){
            QQ qq=new QQ();
            /*qq.run();
            qq.stop();*/
            CarWarp warp=new CarWarp(qq);
            warp.run();
            warp.stop();
        }
    }
     :
    5 
     
     

    좋은 웹페이지 즐겨찾기