和策略模式類似且不同;策略模式是切換不同的策略執(zhí)行不同策略的統(tǒng)一方法;狀態(tài)模式是切換不同的狀態(tài)執(zhí)行執(zhí)行不同的方法;
執(zhí)行的方法;
<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, "左轉(zhuǎn)彎");
}
@Override
public void right() {
Log.i(TAG, "右轉(zhuǎn)彎");
}
@Override
public void speedUp() {
Log.i(TAG, "加速");
}
</pre>
不同的狀態(tài)
<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: 左轉(zhuǎn)彎
03-06 21:04:31.036 14663-14663/com.lerz.state I/WithOilCarState: 右轉(zhuǎn)彎
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>