static void MethodA() { ProductFactory productFactory = new ProductFactory(); WrapFactory wrapFactory = new WrapFactory(); // 直接调用 Box boxA = wrapFactory.WrapBox(productFactory.MakePizza); Box boxB = wrapFactory.WrapBox(productFactory.MakePen); Box boxC = wrapFactory.WrapBox(productFactory.MakeToyCar); Console.WriteLine(boxA.Prouduct.Name); Console.WriteLine(boxB.Prouduct.Name); Console.WriteLine(boxC.Prouduct.Name); }
static void MethodB() { ProductFactory productFactory = new ProductFactory(); WrapFactory wrapFactory = new WrapFactory(); // 间接调用 Func <Product> makePizza = new Func <Product>(productFactory.MakePizza); Func <Product> makePen = new Func <Product>(productFactory.MakePen); Func <Product> makeToyCar = new Func <Product>(productFactory.MakeToyCar); Box boxA = wrapFactory.WrapBox(makePizza); Box boxB = wrapFactory.WrapBox(makePen); Box boxC = wrapFactory.WrapBox(makeToyCar); Console.WriteLine(boxA.Prouduct.Name); Console.WriteLine(boxB.Prouduct.Name); Console.WriteLine(boxC.Prouduct.Name); }
static void Main(string[] args) { ProductFactory productFactory = new ProductFactory(); WrapFactory wrapFactory = new WrapFactory(); // 间接调用 Func <Product> makePizza = new Func <Product>(productFactory.MakePizza); Func <Product> makePen = new Func <Product>(productFactory.MakePen); Func <Product> makeToyCar = new Func <Product>(productFactory.MakeToyCar); Logger logger = new Logger(); Action <Product> log = new Action <Product>(logger.Log); Box boxA = wrapFactory.WrapBox(makePizza, log); Box boxB = wrapFactory.WrapBox(makePen, log); Box boxC = wrapFactory.WrapBox(makeToyCar, log); Console.WriteLine(boxA.Prouduct.Name); Console.WriteLine(boxB.Prouduct.Name); Console.WriteLine(boxC.Prouduct.Name); Console.ReadKey(); }