• 抽象工厂


      提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

    image_2

    对于不同类产品提供一类工厂

    1.产品接口

    interface IBag {
       string Material { get; }
     }
     
     // Product 2
     interface IShoes {
       int Price { get; }
     }


    2.工厂

    这里采用了泛型,所以会更灵活些

    interface IFactory<Brand>
       where Brand : IBrand {
       IBag CreateBag();
       IShoes CreateShoes();
     }
     
     // Conctete Factories (both in the same one)
     class Factory<Brand> : IFactory<Brand>
       where Brand : IBrand, new() {
       public IBag CreateBag() {
         return new Bag<Brand>();
       }
     
       public IShoes CreateShoes() {
         return new Shoes<Brand>();
       }
     }


    3.IBrand

    不同类产品信息

    interface IBrand {
       int Price { get; }
       string Material { get; }
     }
     
     class Gucci : IBrand {
       public int Price { get { return 1000; } }
       public string Material { get { return "Crocodile skin"; } }
     }
     
     class Poochy : IBrand {
       public int Price { get { return new Gucci().Price / 3; } }
       public string Material { get { return "Plastic"; } }
     }
     
     class Groundcover : IBrand {
       public int Price { get { return 2000; } }
       public string Material { get { return "South african leather"; } }
     }

    4.对不同类产品创建不同工厂

    class Client<Brand>
         where Brand : IBrand, new() {
         public void ClientMain() { //IFactory<Brand> factory)
           IFactory<Brand> factory = new Factory<Brand>();
     
           IBag bag = factory.CreateBag();
           IShoes shoes = factory.CreateShoes();
     
           Console.WriteLine("I bought a Bag which is made from " + bag.Material);
           Console.WriteLine("I bought some shoes which cost " + shoes.Price);
           Console.ReadKey();
         }
       }
     
       static class Program {
         static void Main() {
           // Call Client twice
           new Client<Poochy>().ClientMain();
           new Client<Gucci>().ClientMain();
           new Client<Groundcover>().ClientMain();
         }
       }

    此模式应该来说非常重要,应用也比较广泛.结合反射功能效果会更好.

  • 相关阅读:
    nginx 安装配置
    mysql分表
    冲刺day7
    冲刺day6
    冲刺day5
    冲刺day4
    冲刺day3
    冲刺day2
    冲刺day1
    撰写《需求规格说明书》的工作流程、组员分工和组员工作量比例
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1809556.html
Copyright © 2020-2023  润新知