2017-04-11 85 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); 
    } 
} 
相关问题