美文网首页
《Android源码设计模式解析和实战》状态模式

《Android源码设计模式解析和实战》状态模式

作者: wslerz | 来源:发表于2017-03-06 21:09 被阅读0次

和策略模式类似且不同;策略模式是切换不同的策略执行不同策略的统一方法;状态模式是切换不同的状态执行执行不同的方法;
执行的方法;
<pre>
public interface CarState {
void left();

void right();

void speedUp();

}
public class NoOilCarState implements CarState {
private static final String TAG = "NoOilCarState";

@Override
public void left() {
    Log.i(TAG, "没油了");
}

@Override
public void right() {
    Log.i(TAG, "没油了");
}

@Override
public void speedUp() {
    Log.i(TAG, "没油了");
}

}
public class WithOilCarState implements CarState {
private static final String TAG = "WithOilCarState";

@Override
public void left() {
    Log.i(TAG, "左转弯");
}

@Override
public void right() {
    Log.i(TAG, "右转弯");
}

@Override
public void speedUp() {
    Log.i(TAG, "加速");
}

</pre>
不同的状态
<pre>
public interface CarOilController {
public void withOil();

public void noOil();

}
public class Car implements CarOilController, CarState {
private static final String TAG = "Car";
@Override
public void withOil() {
setCarState(new WithOilCarState());
Log.i(TAG, "加油");
}

@Override
public void noOil() {
    setCarState(new NoOilCarState());
    Log.i(TAG, "没油");
}

private CarState carState = new NoOilCarState();//默认没油

private void setCarState(CarState carState) {
    this.carState = carState;
}

@Override
public void left() {
    carState.left();
}

@Override
public void right() {
    carState.right();
}

@Override
public void speedUp() {
    carState.speedUp();
}

}
</pre>
使用:
<pre>
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Car car = new Car();
    car.left();
    car.right();
    car.speedUp();
    car.withOil();
    car.left();
    car.right();
    car.speedUp();
    car.noOil();
    car.left();
    car.right();
    car.speedUp();
}

}
</pre>
log
<pre>
3-06 21:04:31.036 14663-14663/com.lerz.state I/NoOilCarState: 没油了
03-06 21:04:31.036 14663-14663/com.lerz.state I/NoOilCarState: 没油了
03-06 21:04:31.036 14663-14663/com.lerz.state I/NoOilCarState: 没油了
03-06 21:04:31.036 14663-14663/com.lerz.state I/Car: 加油
03-06 21:04:31.036 14663-14663/com.lerz.state I/WithOilCarState: 左转弯
03-06 21:04:31.036 14663-14663/com.lerz.state I/WithOilCarState: 右转弯
03-06 21:04:31.036 14663-14663/com.lerz.state I/WithOilCarState: 加速
03-06 21:04:31.036 14663-14663/com.lerz.state I/Car: 没油
03-06 21:04:31.036 14663-14663/com.lerz.state I/NoOilCarState: 没油了
03-06 21:04:31.036 14663-14663/com.lerz.state I/NoOilCarState: 没油了
03-06 21:04:31.036 14663-14663/com.lerz.state I/NoOilCarState: 没油了
</pre>

相关文章

网友评论

      本文标题:《Android源码设计模式解析和实战》状态模式

      本文链接:https://www.haomeiwen.com/subject/irnugttx.html