1

我已将我的真正问题简化为以下示例:

namespace Cars    
{    
    public class Program    
    {    
        public static void Main(string[] args)    
        {    
            Car car1 = Car.Create(new Driver(1, "A", License.Private));    
            Car car2 = Car.Create(new Driver(2, "B", License.Truck));    
            Car car3 = Car.Create(new Driver(3, "C", License.Bus));        

            car1.OpenTrunk();    
            car2.AttachWagon();    
            car3.OpenBackDoor();    
        }    
    }     

    enum License { Private, Truck, Bus } 

    public class Driver    
    {    
        public uint ID { get; private set; }    
        public string Name { get; private set; }    
        public License License { get; private set; }

        public Driver(uint id, string name, License license)    
        {    
            ID = id;    
            Name = name;    
            License = license;    
        }    
    }        

    public abstract class Car    
    {    
        protected Driver driver;        

        public Car(Driver driver)    
        {    
            this.driver = driver;    
        }    

        public static Car Create(Driver driver)    
        {    
            switch (driver.License)    
            {    
                License.Private: return new Private(driver);    
                License.Truck: return new Truck(driver);    
                License.Bus: return new Bus(driver);    
            }    
        }    
    }   

    public class Private : Car   
    {    
        public Private(Driver driver) : base(driver) {}

        public void OpenTrunk();
    }     

    public class Truck : Car    
    {    
        public Truck(Driver driver) : base(driver) {}

        public void AttachWagon();    
    }        

    public class Bus : Car    
    {    
        public Bus(Driver driver) : base(driver) {}

        public void OpenBackDoor();    
    }    
}

假设我有一个父类Car派生出三个类:PrivateTruckBus

派生类的构造函数接收一个类Driver的参数。

类 Driver 包含属性License等属性。

假设每个司机只能拥有三种类型汽车(私人、卡车、公共汽车)之一的驾照。

我想创建一个函数,它将根据提供给函数的驱动程序返回一个派生类的对象。

我希望此函数的用户接收一个对象,他可以在该对象上为每个派生类调用特定函数,例如bus1.OpenBackDoor()or truck1.AttachWagon()

在保持示例代码的一般结构的同时,最好的方法是什么( Create 方法的调用方式可能不同)?

4

0 回答 0