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
    */
     
  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/shihao/p/2500521.html
Copyright © 2011-2022 走看看