示例#1
0
        static void Main(string[] args)
        {
            #region FactoryMethod

            Console.WriteLine("\nDemonstrating \"Factory Method\":");

            Shop shop1 = new Amazon();
            Shop shop2 = new Wallmart();

            Console.WriteLine("\nBuying cookies.");
            Cookies cookies1 = shop1.BuyCookies();
            Cookies cookies2 = shop2.BuyCookies();

            Console.WriteLine("\nEating cookies.");
            cookies1.Eat();
            cookies2.Eat();

            #endregion

            #region AbstractFactory

            Console.WriteLine("\nDemonstrating \"Abstract Factory\"");

            Console.WriteLine("\nBorn gods");
            God zeus     = new God(new BornZeus());
            God poseidon = new God(new BornPoseidon());
            God aid      = new God(new BornAids());

            Console.WriteLine("\nZeus is here");
            zeus.Weapon.Attack();
            zeus.Ability.Use();

            Console.WriteLine("\nPoseidon is here");
            poseidon.Weapon.Attack();
            poseidon.Ability.Use();

            Console.WriteLine("\nAid is here");
            aid.Weapon.Attack();
            aid.Ability.Use();

            #endregion

            #region Singleton

            Console.WriteLine("\nDemonstrating \"Singleton\"");

            Console.WriteLine("\nResources of player:");
            Console.WriteLine($"Gold: {ResourcesCounter.GetInstance().Gold.ToString()}");
            Console.WriteLine($"Wood: {ResourcesCounter.GetInstance().Wood.ToString()}");

            #endregion

            Console.Write("\nPress key to continue...");
            Console.ReadLine();
        }
示例#2
0
        public void ResourceOffers(ISchedulerDriver driver, IEnumerable<Offer> offers)
        {
            foreach (var offer in offers)
            {
                var tasks = new List<TaskInfo>();
                var resourcesCounter = new ResourcesCounter(offer);
                bool done;
                do
                {
                    done = true;

                    string renderUrl;
                    if (resourcesCounter.HasRenderTaskResources() && _renderQueue.TryDequeue(out renderUrl))
                    {
                        tasks.Add(GetRenderTaskInfo(offer, ++_launchedTasks, renderUrl));
                        resourcesCounter.SubstractRenderResources();
                        done = false;
                    }

                    string crawlUrl;
                    if (resourcesCounter.HasCrawlTaskResources() && _crawlQueue.TryDequeue(out crawlUrl))
                    {
                        tasks.Add(GetCrawlTaskInfo(offer, ++_launchedTasks, crawlUrl));
                        resourcesCounter.SubstractCrawlResources();
                        _crawled.Add(crawlUrl);
                        done = false;
                    }
                } while (!done);

                if (tasks.Any ()) {
                    driver.LaunchTasks (new[] { offer.id }, tasks);
                }
                else
                    driver.DeclineOffer(offer.id);
            }
        }