Android 디자인 모드 의 (7) - 상태 모드

2896 단어
상태 모드
상태 모델 이란 하나의 사물 이 여러 개의 상 태 를 대표 하 는 것 이다.상태의 변화 로 인해 일련의 변 화 를 야기 하 다.
듣 기 에 전략 모델 과 비슷 하고 모두 if - else 와 유사 하 며 실제 전략 모델 은 알고리즘 의 차이 에 중심 을 두 고 상태 모델 은 행위 의 통 제 를 더욱 중시한다.
응용 장면
  • 같은 제품 으로 여러 상태 에서 여러 행위 가 발생 한다
  • 뚜렷 한 상태 차이 가 있다
  • 장점: 코드 구조 가 뚜렷 하고 논리 적 절차 가 완선 하 다.상태 행위 와 결 과 를 같은 구체 적 인 실현 류 에 봉 하여 읽 기 쉬 우 며, 추가 상태 가 있 으 면 구체 적 인 상태 와 행위 상 태 를 증가 하고 결 과 를 얻 으 면 된다.
    단점: 클래스 의 수량 증가, 개발 효율 저하
    코드 예제
    지금 한 사람 이 한 문 을 드 나 들 려 고 하 는데, 이 문 에 있어 서 는 대략 두 가지 상태 로 나 눌 수 있 고, 두 가지 상 태 는 두 가지 결 과 를 초래 할 것 이다.
  • 상태 1: 오픈 상태
  • 행위 1: 이 사람 은 외출 할 수 있다 (입문)
  • 상태 2: 폐쇄 상태
  • 행위 2: 이 사람 은 외출 하면 안 된다 (입문)

  • (1) 상태 인터페이스
    public interface Controller {
        void openDoor();//  
        void closeDoor();//  
    }
    

    (2) 관리 상태의 컨트롤 러
    public class DoorController implements Controller {
    
        private DoorState doorState;
    
        public DoorState setDoorState(DoorState doorState) {
            this.doorState = doorState;
            return doorState;
        }
    
        @Override
        public void openDoor() {//    
            setDoorState(new OpenDoorState());
        }
    
        @Override
        public void closeDoor() {//    
            setDoorState(new CloseDoorState());
        }
    }
    

    컨트롤 러 는 문 을 여 는 것 과 닫 는 두 가지 상태의 컨트롤 만 책임 진다.
    문 을 여 는 상태 에서 openDoor 가 발생 하 는 구체 적 인 행 위 는 구체 적 인 실현 류 OpenDoor State 에 의 해 표시 된다.
    닫 힌 상태 closeDoor 에서 발생 하 는 구체 적 인 행 위 는 구체 적 인 실현 류 CloseDoorState 에 의 해 표시 된다.
    (3) 구체 적 인 상태의 행위 인터페이스
    public interface DoorState {
        void  goInDoor();//  
        void getOutDoor();//  
    }
    

    (4) 구체 적 인 행위 가 발생 한 결과
  • 문 을 연 상태 에서 문 을 들 어 오 거나 나 가 려 는 행위 결과
  • public class OpenDoorState implements DoorState {
        @Override
        public void goInDoor() {
            System.out.print("
    "+" : "); } @Override public void getOutDoor() { System.out.print("
    "+" : "); } }
  • 문 을 닫 은 상태 에서 문 을 들 어가 거나 외출 하려 는 행위 결과
  • public class CloseDoorState implements  DoorState {
        @Override
        public void goInDoor() {
            System.out.print("
    "+" : "); } @Override public void getOutDoor() { System.out.print("
    "+" : "); } }

    (5) 호출 방식
    DoorController doorController = new DoorController(new OpenDoorState());
            doorController.openDoor();
            doorController.closeDoor();
    
            DoorController doorController1 = new DoorController(new CloseDoorState());
            doorController1.openDoor();
            doorController1.closeDoor();
    

    결과 보이 기
        :    
        :    
        :    
        :     
    
    

    총결산
    상기 코드 는 한 사물 이 상태 가 있 을 때 그 가 처 한 상태 와 구체 적 인 행위 가 어떤 결 과 를 가 져 올 지 완전 하 게 보 여 준다.
    github 코드 주소

    좋은 웹페이지 즐겨찾기