23 디자인 모드 의 상태 모드 (State)

디 렉 터 리 되 돌리 기
개술
State 는 행위 형 모델 중 하나 로 대상 간 의 다 중 의존 관 계 를 정의 합 니 다. 대상 의 상태 가 바 뀌 면 모든 의존 대상 이 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.
2 적용 성
  • 한 대상 의 행 위 는 그의 상태 에 달 려 있 고 운행 시간 에 상태 에 따라 그의 행 위 를 바 꿔 야 한다.
  • 한 조작 에는 방대 한 여러 갈래 의 조건문 이 포함 되 어 있 고 이 갈래 들 은 이 대상 의 상태 에 의존한다.이 상 태 는 보통 하나 이상 의 매 거 진 상수 로 표시 된다.일반적으로 여러 개의 조작 은 이 같은 조건 구 조 를 포함한다.
  • State 모드 는 모든 조건 을 하나의 독립 된 클래스 에 나 누 어 넣 습 니 다.이 때문에 대상 자체 의 상황 에 따라 대상 의 상 태 를 대상 으로 할 수 있 고 이 대상 은 다른 대상 에 의존 하지 않 고 독립 적 으로 변화 할 수 있다.

  • 3 참가 자
  • Context: 고객 이 관심 이 있 는 인 터 페 이 스 를 정의 합 니 다.Concrete State 하위 클래스 의 인 스 턴 스 를 유지 합 니 다. 이 인 스 턴 스 는 현재 상 태 를 정의 합 니 다.
  • State: Context 의 특정한 상태 와 관련 된 행 위 를 봉인 하기 위해 인 터 페 이 스 를 정의 합 니 다.
  • Concrete Statesubclasses: 각 하위 클래스 는 Context 의 한 상태 와 관련 된 행 위 를 실현 합 니 다
  • 분류 도
    5 코드 구현
    //
    // YJState.swift
    // DesignPattern
    //
    // CSDN:http://blog.csdn.net/y550918116j
    // GitHub:https://github.com/937447974/Blog
    //
    // Created by yangjun on 15/11/27.
    // Copyright © 2015    . All rights reserved.
    //
    
    import Cocoa
    
    /// WeatherProtocol          Context            
    private protocol WeatherProtocol {
    
        func getWeather() ->String
    
    }
    
    private class Rain: WeatherProtocol {
    
        func getWeather() -> String {
            return "  "
        }
    
    }
    
    private class Sunshine: WeatherProtocol {
    
        func getWeather() -> String {
            return "  "
        }
    
    }
    
    // MARK: -
    
    /// Context          
    private class Context {
    
        var weather: WeatherProtocol?
    
        func weatherMessage() ->String?{
            return self.weather?.getWeather()
        }
    
    }
    
    // MARK: - 
    
    ///     
    class YJState: YJTestProtocol {
    
        func test() {
            let ctx = Context()
            print(ctx.weatherMessage())
            ctx.weather = Sunshine()
            print(ctx.weatherMessage())
            //     
            ctx.weather = Rain()
            print(ctx.weatherMessage())
        }
    }

     
    기타
    소스 코드
    Framework
    문서 수정 기록
    시간.
    묘사 하 다.
    2015-11-27
    박문 완성
    판권 소유
    CSDN:http://blog.csdn.net/y550918116j
    GitHub:https://github.com/937447974/Blog

    좋은 웹페이지 즐겨찾기