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(); }
public void DriveToyota(IToyota car) { Console.WriteLine($"{this.Name} driving..."); car.Drive(); }
/// <summary> /// 构造过程复杂(85乱改装),使用工厂方法封装,不需要使用者改装。。。。交给工厂完成。。。这应该是工厂存在的意义和职责吧。。。 /// </summary> public Fujiwara85(string name, int id, object special, IToyota IToyota1, IToyota IToyota2, IToyota IToyota3) { //我也不懂要怎么装下去了。。。。。。。 }