public void DisableAcceleration() => btnAccelerate.Enabled = false;
public void EnableAcceleration() => btnAccelerate.Enabled = true;
public void DisableDeceleration() => btnDecelerate.Enabled = false;
public void EnableDeceleration() => btnDecelerate.Enabled = true;
public void DisableTurning() => btnRight.Enabled = btnLeft.Enabled = false;
public void EnableTurning() => btnRight.Enabled = btnLeft.Enabled = true;
public void Update(IVehicleModel model) => UpdateInterface(model);
// 新模型:卡車
public class ACME2000Truck : Automobile
{
public ACME2000Truck(string name) : base(80, 25, -12, name) {}
public ACME2000Truck(string name, int maxSpeed, int maxTurn, int maxRev)
: base(maxSpeed, maxTurn, maxRev, name) {}
}
AutoView 僅需一行變更即可使用新模型:
autoView1.WireUp(new AutomobileControl(), new ACME2000Truck(txtName.Text));
public class SlowPokeControl : IVehicleControl
{
public void RequestAccelerate(int amount)
{
if (Model != null)
{
amount = Math.Min(amount, 5);
Model.Accelerate(amount);
View?.SetView();
}
}
public void RequestDecelerate(int amount)
{
if (Model != null)
{
amount = Math.Min(amount, 5);
Model.Decelerate(amount);
View?.SetView();
}
}
// ... RequestTurn 同 AutomobileControl
}
組合使用:autoView1.WireUp(new SlowPokeControl(), new ACME2000Truck(...)) — **模型與控制器自由組合**。
建立 ASP.NET 專案,實作 IVehicleView 介面的 UserControl,其餘模型/控制器**完全重用**,零修改。
MVC 將模型、視圖、控制器三者解耦,任一層變更不波及其他層。支援:多模型 (跑車/卡車)、多控制器 (標準/限速)、多視圖 (WinForms/Web/WPF) **自由組合**,極大降低維護成本並提升擴充彈性。