Beispiel #1
0
        public void InitOnlySetterSample1()
        {
            Alphard alphard = new Alphard {
                Brand = "Toyota", TypeName = "Alphard", Color = "Red", Year = 2020
            };

            //alphard.TypeName = "BMW"; //錯誤
            alphard.Color = "White";
        }
        public static IToyota CreateInstance(ToyotaType toyotaType)
        {
            IToyota toyota;

            switch (toyotaType)
            {
            case ToyotaType.Alphard:
                toyota = new Alphard();
                break;

            case ToyotaType.Camry:
                toyota = new Camry();
                break;

            case ToyotaType.Corolla:
                toyota = new Corolla();
                break;

            default:
                throw new Exception("IToyota CreateInstance error...");
            }
            return(toyota);
        }
        public static IToyota CreateInstanceConfig()
        {
            ToyotaType toyotaType = (ToyotaType)Enum.Parse(typeof(ToyotaType), ToyotaTypeConfig);//字符串转枚举
            IToyota    toyota;

            switch (toyotaType)
            {
            case ToyotaType.Alphard:
                toyota = new Alphard();
                break;

            case ToyotaType.Camry:
                toyota = new Camry();
                break;

            case ToyotaType.Corolla:
                toyota = new Corolla();
                break;

            default:
                throw new Exception("IToyota CreateInstance error...");
            }
            return(toyota);
        }
Beispiel #4
0
 public void DriveAlphard(Alphard car)
 {
     Console.WriteLine($"{this.Name} driving...");
     car.Drive();
 }
Beispiel #5
0
        static void Main(string[] args)
        {
            try
            {
                Player Player = new Player()
                {
                    Name = "菜虚鲲"
                };

                {
                    //面向细节,依赖细节
                    Alphard Alphard = new Alphard();
                    Camry   Camry   = new Camry();
                    Corolla Corolla = new Corolla();

                    Player.DriveAlphard(Alphard);
                    Player.DriveCamry(Camry);
                    Player.DriveCorolla(Corolla);
                    Console.WriteLine("*******************面向细节,依赖细节,上层使用者自行实例化下层对象并使用********************");
                    Console.WriteLine();
                }


                {
                    //面向接口,依赖细节
                    IToyota Alphard = new Alphard();
                    IToyota Camry   = new Camry();
                    IToyota Corolla = new Corolla();

                    Player.DriveToyota(Alphard);
                    Player.DriveToyota(Camry);
                    Player.DriveToyota(Corolla);
                    Console.WriteLine("*******************面向接口,依赖细节,上层使用者自行实例化下层对象并使用********************");
                    Console.WriteLine();
                }


                {
                    //面向接口,依赖工厂;使用枚举参数做对象选择条件
                    IToyota Alphard = ToyotaFactory.CreateInstance(ToyotaFactory.ToyotaType.Alphard);
                    IToyota Camry   = ToyotaFactory.CreateInstance(ToyotaFactory.ToyotaType.Camry);
                    IToyota Corolla = ToyotaFactory.CreateInstance(ToyotaFactory.ToyotaType.Corolla);

                    Player.DriveToyota(Alphard);
                    Player.DriveToyota(Camry);
                    Player.DriveToyota(Corolla);
                    Console.WriteLine("*******************面向接口,依赖工厂;使用枚举参数做对象选择条件,上层使用者不需要自行实例化下层对象,只需要按需从工厂类拿对象********************");
                    Console.WriteLine();
                }

                {
                    //面向接口,依赖工厂;使用配置做对象选择条件
                    IToyota car = ToyotaFactory.CreateInstanceConfig();
                    Player.DriveToyota(car);

                    Console.WriteLine("*******************面向接口,依赖工厂;使用配置做对象选择条件,上层使用者不需要自行实例化下层对象,只需要按需从工厂类拿对象********************");
                    Console.WriteLine();
                }

                {
                    //面向接口,依赖工厂;使用配置+反射(方便扩展)做对象选择条件
                    IToyota car = ToyotaFactory.CreateInstanceConfigReflection();
                    Player.DriveToyota(car);

                    Console.WriteLine("*******************面向接口,依赖工厂;使用配置+反射(方便扩展)做对象选择条件,上层使用者不需要自行实例化下层对象,只需要按需从工厂类拿对象********************");
                    Console.WriteLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.Read();
        }