zoukankan      html  css  js  c++  java
  • abstractfactorybags.cs

    using System;

    namespace AbstractFactoryPattern {
      //  Abstract Factory        D-J Miller and Judith Bishop Sept 2007
      //  Uses generics to simplify the creation of factories
     
      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>();
        }
      }

      // Product 1
      interface IBag {
        string Material { get; }
      }

      // Product 2
      interface IShoes {
        int Price { get; }
      }

      // Concrete Product 1
      class Bag<Brand> : IBag
        where Brand : IBrand, new() {
        private Brand myBrand;
        public Bag() {
          myBrand = new Brand();
        }

        public string Material { get { return myBrand.Material; } }
      }

      // Concrete Product 2
      class Shoes<Brand> : IShoes
        where Brand : IBrand, new() {
          
        private Brand myBrand;
          
        public Shoes() {
          myBrand = new Brand();
        }

        public int Price { get { return myBrand.Price; } }
      }

      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"; } }
      }

      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);
        }
      }

      static class Program {
        static void Main() {
          // Call Client twice
          new Client<Poochy>().ClientMain();
          new Client<Gucci>().ClientMain();
          new Client<Groundcover>().ClientMain();
        }
      }
    }
    /* Output
    I bought a Bag which is made from Plastic
    I bought some shoes which cost 333
    I bought a Bag which is made from Crocodile skin
    I bought some shoes which cost 1000
    I bought a Bag which is made from South african leather
    I bought some shoes which cost 2000
    */
     
  • 相关阅读:
    1046 Shortest Distance (20 分)(模拟)
    1004. Counting Leaves (30)PAT甲级真题(bfs,dfs,树的遍历,层序遍历)
    1041 Be Unique (20 分)(hash散列)
    1036 Boys vs Girls (25 分)(查找元素)
    1035 Password (20 分)(字符串处理)
    1044 Shopping in Mars (25 分)(二分查找)
    onenote使用小Tip总结^_^(不断更新中...)
    1048 Find Coins (25 分)(hash)
    三个故事
    领导者的举止
  • 原文地址:https://www.cnblogs.com/shihao/p/2500521.html
Copyright © 2011-2022 走看看