首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實作 MVC 模式簡要方法(四):IVehicleControl 介面擴充與 AutomobileControl 觀察者模式實作

     編輯:關於C語言

IVehicleControl 介面新增 SetModel/SetView


public interface IVehicleControl
{
    void RequestAccelerate(int amount);
    void RequestDecelerate(int amount);
    void RequestTurn(RelativeDirection dir);
    void SetModel(IVehicleModel model);
    void SetView(IVehicleView view);
}

AutomobileControl 實作:觀察者模式通知 View 更新


public class AutomobileControl : IVehicleControl
{
    private IVehicleModel _model;
    private IVehicleView _view;

    public AutomobileControl() {}
    public AutomobileControl(IVehicleModel m, IVehicleView v) { _model=m; _view=v; }

    public void SetModel(IVehicleModel m) => _model = m;
    public void SetView(IVehicleView v) => _view = v;

    public void RequestAccelerate(int amount)
    {
        if (_model != null) { _model.Accelerate(amount); UpdateView(); }
    }
    public void RequestDecelerate(int amount)
    {
        if (_model != null) { _model.Decelerate(amount); UpdateView(); }
    }
    public void RequestTurn(RelativeDirection dir)
    {
        if (_model != null) { _model.Turn(dir); UpdateView(); }
    }

    private void UpdateView()
    {
        if (_view == null) return;
        if (_model.Speed >= _model.MaxSpeed) { _view.DisableAcceleration(); _view.EnableDeceleration(); }
        else if (_model.Speed <= _model.MaxReverseSpeed) { _view.DisableDeceleration(); _view.EnableAcceleration(); }
        else { _view.EnableAcceleration(); _view.EnableDeceleration(); }

        if (_model.Speed >= _model.MaxTurnSpeed) _view.DisableTurning();
        else _view.EnableTurning();
    }
}

設計重點

  • **介面導向程式設計**:Control 僅持有 IVehicleModel/IVehicleView 介面參考,不依賴具體類別
  • **觀察者模式簡化版**:Model 變更後 Control 主動呼叫 UpdateView() 推送狀態至 View,而非 View 輪詢
  • **狀態同步邏輯集中**:加速/減速/轉向三個請求方法皆呼叫同一 UpdateView(),確保 UI 與 Model 一致
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved