상태 모드(if/else 제거)

3230 단어
  • 사례: TV 리모컨--> 켜기, 끄기, 다음 채널, 이전 채널, 볼륨 높이기, 볼륨 낮추기,
  • 조건: 전원을 켠 상태에서만 다른 작업을 할 수 있고, 전원을 끈 후에는 전원만 켤 수 있음
  • if/else를 사용하려면,if/else를 사용해 봅시다.모든 조작을 하기 전에 현재 상태가 스위치인지 아닌지를 저장해야 한다.이렇게 하면 코드가 매우 번거롭고 수정하기도 불편하다.이럴 때는 인터페이스를 향해 두 말을 하지 않을 생각을 해야 한다.위 코드,,
  • 텔레비전 TV의 기본 조작을 위한 인터페이스 TVState 클래스
  • 를 구축해야 한다.
    public interface TvState {
        public void turnUp();
    
        public void turnDown();
    
        public void nextChannel();
    
        public void prevCHannel();
    }
    
  • TV 전원 상태를 위한 인터페이스 PowerState 클래스
  • 가 필요합니다.
    public interface PowerState {
        public void powerON();
    
        public void powerOFF();
    }
    
  • 텔레비전 TV가 켜진 구체적인 실현 유형(켜진 이상 텔레비전의 기본적인 조작을 실현할 수 있다) TV파워온스테이트 유형
  • public class TVPowerONState implements TvState {
        @Override
        public void turnUp() {
            System.out.println("    ");
        }
    
        @Override
        public void turnDown() {
            System.out.println("    ");
        }
    
        @Override
        public void nextChannel() {
            System.out.println("    ");
        }
    
        @Override
        public void prevCHannel() {
            System.out.println("    ");
        }
    }
    
  • 텔레비전 TV 꺼짐의 구체적인 실현 유형(꺼진 이상 텔레비전의 기본적인 조작을 실현할 필요가 없다) TVPowerOFFState 유형
  • public class TVPowerOFFState implements TvState {
        @Override
        public void turnUp() {
    
        }
    
        @Override
        public void turnDown() {
    
        }
    
        @Override
        public void nextChannel() {
    
        }
    
        @Override
        public void prevCHannel() {
    
        }
    }
    
  • 리모컨이 어떻게 이런 상태를 실현하는지, Controller류
  • 에 중점을 두었다.
    public class Controller implements PowerState {
        public TvState mTvState;
    
        public void setmTvState(TvState mTvState) {
            this.mTvState = mTvState;
        }
    
        @Override
        public void powerON() {
            setmTvState(new TVPowerONState());
            System.out.println("   !");
        }
    
        @Override
        public void powerOFF() {
            setmTvState(new TVPowerOFFState());
            System.out.println("   !");
        }
    
        public void nextChannel() {
            mTvState.nextChannel();
        }
    
        public void prevChanner() {
            mTvState.prevCHannel();
        }
    
        public void trunUp() {
            mTvState.turnUp();
        }
    
        public void trunDown() {
            mTvState.turnDown();
        }
    }
    

    만약 오류가 있다면 리모컨이라면 리모컨을 켜고 끄는 두 가지 상태를 바탕으로 하는 것이라고 지적해 주십시오.그러므로 PowerState 인터페이스를 실현하고 컴퓨터를 켜고 끄는 두 가지 방법을 실현해야 한다.근데 우리 기본 조작은 TVSatate 인터페이스에 있잖아.어떡하지???문제가 크지 않고 직접 인터페이스를 향하다.인터페이스를 대상으로 들어오고 전체적인 mTVState, 백핸드가 set 방법이다.이렇게 하면 파워온 () 방법을 실행할 때 set (new TVPoweron State ().전원을 끄는 것도 이치에 맞다.이렇게 mTVState는 set 방법을 통해 기본 조작(켜기, 끄기, 다음 채널, 이전 채널, 볼륨 높이기, 볼륨 낮추기) 방법을 얻을 수 있다.그리고 방법을 실현하면 돼, so easy.
  • 구현 클래스
  • public class MyClass {
        public static void main(String args[]) {
            Controller controller = new Controller();
            controller.powerON();
            controller.trunUp();
            controller.nextChannel();
            controller.prevChanner();
            controller.trunDown();
            controller.powerOFF();
            controller.trunDown();//        。           
        }
    }
    

    디버깅 결과: 켜졌어!볼륨 높여. 다음 채널. 이전 채널. 볼륨 줄여. 꺼졌어!

    좋은 웹페이지 즐겨찾기