簡體   English   中英

關於在我的設計中是否有繼承的困惑

[英]Confusion regarding having inheritance or not in my design

我有這樣的要求, DriverMechanic可以Start,ApplyBrakes,ChangeGear and Stop the Car

我還有 2 個附加功能,即Mechanic是唯一一個可以ChangeOilAdjustBrakesDriver不應該能夠做到這一點。

基於此,這是我准備的:

 interface IDrivable
    {
        void Start();
        void ApplyBrakes();
        void ChangeGear();
        void Stop();
    }

    interface IFixable
    {
        void ChangeOil();
        void AdjustBrakes();
    }

    public class Car : IDrivable, IFixable
    {
        public void AdjustBrakes()
        {
            throw new NotImplementedException();
        }

        // implement all the methods here
        public void ApplyBrakes()
        {
            throw new NotImplementedException();
        }

        public void ChangeGear()
        {
            throw new NotImplementedException();
        }

        public void ChangeOil()
        {
            throw new NotImplementedException();
        }

        public void Start()
        {
            throw new NotImplementedException();
        }

        public void Stop()
        {
            throw new NotImplementedException();
        }
    }

    class Driver
    {
        private IDrivable car;
        public Driver(IDrivable car)
        {
            this.car = car;
        }
        public void driveCar()
        {
            this.car.Start();
            this.car.ChangeGear();
            this.car.ChangeGear();
        }
    }

    class Mechanic
    {
        private IDrivable _drivableCar;
        private IFixable _fixableCar;

        public Mechanic(IDrivable drivableCar, IFixable fixableCar)
        {
            this._drivableCar = drivableCar;
            this._fixableCar = fixableCar;
        }

        public void driveCar()
        {
            this._drivableCar.Start();
        }
    }

 class Program 
    {
        static void Main(string[] args)
        {
            var driver = new Driver(new Car());
            driver.driveCar();
            var mechanic = new Mechanic(new Car(), new Car());
        }
    }

我在這里有一個困惑,以至於我是否應該添加一些abstraction來表示 Driver 和 Mechanic 。像這樣:

abstract class User
    {
       public abstract void DriveCar();
    }

 class Mechanic : User { }
 class Driver : User { }

如果是,那么擁有這種abstraction有什么好處,它會有什么幫助?

另一個問題是什么時候有這種abstraction有意義?

如果有的話,我也想得到關於這個設計的反饋。

謝謝

你沒有抽象的設計是正確的,看起來不錯。 但是,如果您想添加抽象級別,我不會使用您提供的示例,因為正如您所懷疑的那樣,它不會給整體設計帶來任何影響。

你可以做的是讓 Mechanic 類從 Driver 類繼承,因為我認為畢竟機械師必須是司機。 這樣做,如果 Driver 類必然會發生變化,您將簡化未來的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM