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

和策略模式类似且不同;策略模式是切换不同的策略执行不同策略的统一方法;状态模式是切换不同的状态执行执行不同的方法;
执行的方法;
<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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容