《Android源碼設計模式解析和實戰(zhàn)》狀態(tài)模式

和策略模式類似且不同;策略模式是切換不同的策略執(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>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評論 19 139
  • 本文首發(fā)于個人博客:Lam's Blog - 談談23種設計模式在Android源碼及項目中的應用,文章由Mark...
    格子林ll閱讀 4,776評論 1 105
  • 設計模式匯總 一、基礎(chǔ)知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 4,096評論 1 15
  • 是錦兒閱讀 232評論 8 4

友情鏈接更多精彩內(nèi)容