2017-04-11 87 views
0

是否有可能在運行時根據當前狀態變形對象並保留所有過去的信息?如何在運行時變形對象,同時保留過去的信息?

說我有以下的(僞代碼):

class Vehicle { 
    int state, lat, long; 
    void run(); 
} 

class Plane : Vehicle { 
    void run() {fly();} 
} 

class Car : Vehicle { 
    void run() {drive();} 
} 

class Boat : Vehicle { 
    void run() {navigate();} 
} 

void main() { 
    // Setup code goes here 
    Vehicle vehicle = new Vehicle(); 
    while(true) { 
    switch(vehicle->state){ 
     case(1): vehicle = new Plane(); 
     case(2): vehicle = new Car(); 
     case(3): vehicle = new Boat(); 
    } 
    } 
} 

回答

1

這是不可能在你寫它的意義,但它是可以設計系統行爲,你想:

  1. 你有一個對象,它是運行在同一個對象
  2. 對象有
  3. 目前的行爲是基於當前狀態
  4. 不同的行爲

及其與你在問題中寫道,在這種方法我們不變形的對象小,但很重要的區別,但它的行爲只

有可能是多種不同的實現,取決於全一套要求,這裏是最簡單的一種,假設行爲只改變位置:

class Position { 
    int lat, long; 
} 

interface PositionCalculator { 
    Position calc(Position old); 
} 

class Vehicle { 
    private Position pos; 
    void modify(PositionCalculator calc) {pos = calc.calc(pos);} 
} 

class CarCalculator : PositionCalculator { 
    Position calc(Position old) {return navigate(old);} 
} 
class PlaneCalculator : PositionCalculator { 
    Position calc(Position old) {return fly(old);} 
} 

void main() { 
    Vehicle vehicle = new Vehicle(); 
    PositionCalculator plane = new PlaneCalculator() 
    PositionCalculator car = new CarCalculator(); 

    while(true) { 
     if (vehicle is in air) 
      vehicle.modify(plane); 
     else if (vehicle is on road) 
      vehicle.modify(car); 
    } 
} 
相關問題