State

7/20/2021 OOPPatternBehavioral pattern

# Description

Thay đổi hành vi (behavior) của object khi trạng thái bên trong của object thay đổi

# Example

Quản lí Order:

  • OrderManager:

    class OrderManager
    {
        private OrderState $state;
    
        public function __construct(OrderState $state)
        {
            $this->setState($state);
        }
    
        public function setState(OrderState $state)
        {
            $this->state = $state;
        }
    
        public function nextProceed()
        {
            $this->state->nextProceed($this);
        }
    
        public function handle()
        {
            return $this->state->handle();
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
  • OrderState:

    interface OrderState
    {
        public function nextProceed(OrderManager $context);
    
        public function handle();
    }
    
    1
    2
    3
    4
    5
    6
  • CreatedState:

    class CreatedState implements OrderState
    {
        public function nextProceed(OrderManager $manager)
        {
            $manager->setState(new PaymentState());
        }
    
        public function handle()
        {
            // do something
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
  • PaymentState:

    class PaymentState implements OrderState
    {
        public function nextProceed(OrderManager $manager)
        {
            $manager->setState(new DoneState());
        }
    
        public function handle()
        {
            // do something
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
  • DoneState:

    class DoneState implements OrderState
    {
        public function nextProceed(OrderManager $manager)
        {
        }
    
        public function handle()
        {
            // do something
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11