예제 #1
0
파일: Program.cs 프로젝트: brskyet/ISE
        static void Main(string[] args)
        {
            var pattern = Environment.GetEnvironmentVariable("Pattern");

            switch (pattern)
            {
            case { } p when p == "1:Strategy":
                StrategyExecutor.Execute();
                break;

            case { } p when p == "2:ObserverAndIterator":
                ObserverAndIteratorExecutor.Execute();
                break;

            case { } p when p == "3:IoC":
                IoCExecutor.Execute();
                break;

            case { } p when p == "4:AbstractFactoryAndBuilder":
                AbstractFactoryAndBuilderExecutor.Execute();
                break;

            case { } p when p == "5:BFS_DFS_Iterator":
                BfsDfsIteratorExecutor.Execute();
                break;
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("=======================================");
            Console.WriteLine("Benvindo ao Executor de Design Patterns");
            Console.WriteLine("=======================================");
            Console.WriteLine('\n');
            Console.WriteLine("=======================================");
            Console.WriteLine("Pressione : ");
            Console.WriteLine("=======================================");
            Console.WriteLine("(1) FactoryMethod ");
            Console.WriteLine("(2) AbstractFactory ");
            Console.WriteLine("(3) Singleton ");
            Console.WriteLine("(4) Adapter ");
            Console.WriteLine("(5) Facade ");
            Console.WriteLine("(6) Strategy ");
            Console.WriteLine('\n');
            Console.WriteLine("Qualquer outra tecla para sair");
            Console.WriteLine("=======================================");

            var opcao = Console.ReadKey();

            switch (opcao.KeyChar)
            {
            case '1':
                FactoryMethodExecutor.Execute();
                break;

            case '2':
                AbstractFactoryExecutor.Execute();
                break;

            case '3':
                SingletonExecutor.Execute();
                break;

            case '4':
                AdapterExecutor.Execute();
                break;

            case '5':
                FacadeExecutor.Execute();
                break;

            case '6':
                StrategyExecutor.Execute();
                break;

            default:
                Environment.Exit(0);
                break;
            }
            Console.ReadKey();
            Console.Clear();
            Main(new string[] { });
        }
예제 #3
0
        /// <summary>
        /// Add new strategy instance
        /// </summary>
        /// <param name="strategyInstance"></param>
        public void AddStrategyInstance(StrategyInstance strategyInstance)
        {
            //create strategy executor instance responsible for entire Strategy Instance life cycle
            StrategyExecutor executor = new StrategyExecutor(strategyInstance, _currentDispatcher);

            //subscribe to strategy event changed event
            executor.StatusChanged     += OnStrategyStatusChanged;
            executor.ExecutionReceived += OnExecutionReceived;

            //map the executor instance in dictionary
            _strategiesCollection.TryAdd(strategyInstance.InstanceKey, executor);
        }
        public async System.Threading.Tasks.Task <TOut> ProcessAsync(TIn input)
        {
            TContext applicationContext = this._contextFactory.BuildContext();

            applicationContext.Input = input;

            IInvokeable applicationManager = new StrategyExecutor <TContext>(this._functions, applicationContext);

            await applicationManager.InvokeAsync();

            return(applicationContext.Result);
        }
        /// <summary>
        /// Start Strategy Optimization
        /// </summary>
        /// <param name="optimizationParameters">Contains info for the parameters to be used for optimization</param>
        private void StartOptimization(OptimizeStrategyBruteForce optimizationParameters)
        {
            try
            {
                if (_asyncClassLogger.IsInfoEnabled)
                {
                    _asyncClassLogger.Info("Getting argument combinations", _type.FullName, "StartOptimization");
                }

                // Clear all previous information
                _strategiesCollection.Clear();

                // Save Parameter Details
                _parmatersDetails = optimizationParameters.ParmatersDetails;

                // Get all ctor arguments to be used for optimization
                CreateCtorCombinations(optimizationParameters.CtorArgs, optimizationParameters.ConditionalParameters);

                // Initialize Stratgey for each set of arguments
                foreach (object[] ctorArgument in _ctorArguments)
                {
                    // Get new Key.
                    string key = ApplicationIdGenerator.NextId();

                    // Save Strategy details in new Strategy Executor object
                    StrategyExecutor strategyExecutor = new StrategyExecutor(key, optimizationParameters.StrategyType, ctorArgument);

                    // Register Event
                    strategyExecutor.StatusChanged += OnStrategyExecutorStatusChanged;

                    // Add to local map
                    _strategiesCollection.AddOrUpdate(key, strategyExecutor, (ky, value) => strategyExecutor);
                }

                // Start executing each instance
                StartStrategyExecution();
            }
            catch (Exception exception)
            {
                _asyncClassLogger.Error(exception, _type.FullName, "StartOptimization");
            }
        }
예제 #6
0
        /// <summary>
        /// Start Strategy Optimization
        /// </summary>
        /// <param name="optimizationParameters">Contains info for the parameters to be used for optimization</param>
        private void StartOptimization(BruteForceParameters optimizationParameters)
        {
            try
            {
                // Save instance
                _optimizationParameters = optimizationParameters;

                if (_asyncClassLogger.IsInfoEnabled)
                {
                    _asyncClassLogger.Info("Getting argument combinations", _type.FullName, "StartOptimization");
                }

                // Change Status to indicate on UI
                _optimizationParameters.Status = OptimizationStatus.Working;

                // Clear all previous information
                _strategiesCollection.Clear();
                _ctorArguments.Clear();

                // Get Parameter values to be used in the Constructor
                object[] ctorArguments = optimizationParameters.GetParameterValues();

                // Get Conditional Parameter values to be used for creating Iterations
                Tuple <int, object, double>[] conditionalParameters = optimizationParameters.GetConditionalParameters();

                // Save Parameter Details
                _parmatersDetails = optimizationParameters.ParameterDetails;

                // Get all ctor arguments to be used for optimization
                CreateCtorCombinations(ctorArguments, conditionalParameters);

                // Initialize Stratgey for each set of arguments
                foreach (object[] ctorArgumentValues in _ctorArguments)
                {
                    // Get new Key.
                    string key = ApplicationIdGenerator.NextId();

                    var instanceParameterDetails = new Dictionary <string, ParameterDetail>();

                    for (int i = 0; i < ctorArgumentValues.Length; i++)
                    {
                        // Create new parameter details to be when creating Strategy Instance object
                        ParameterDetail tempParameterDetail = new ParameterDetail(_parmatersDetails[i].ParameterType, ctorArgumentValues[i]);

                        instanceParameterDetails.Add(_parmatersDetails[i].Description, tempParameterDetail);
                    }

                    // Create Strategy Instance object
                    var instance = new StrategyInstance(key, instanceParameterDetails, optimizationParameters.StrategyType);

                    // Save Strategy details in new Strategy Executor object
                    var strategyExecutor = new StrategyExecutor(instance, _currentDispatcher);

                    // Register Event
                    strategyExecutor.StatusChanged += OnStrategyExecutorStatusChanged;

                    // Add to local map
                    _strategiesCollection.AddOrUpdate(key, strategyExecutor, (ky, value) => strategyExecutor);

                    StringBuilder parametersInfo = new StringBuilder();
                    foreach (object ctorArgument in strategyExecutor.CtorArguments)
                    {
                        parametersInfo.Append(ctorArgument.ToString());
                        parametersInfo.Append(" | ");
                    }

                    // Create new object to be used with Event Aggregator
                    var optimizationStatistics = new OptimizationStatistics(strategyExecutor.StrategyKey);
                    optimizationStatistics.Description      = parametersInfo.ToString();
                    optimizationStatistics.ExecutionDetails = instance.ExecutionDetails;

                    // Raise event to Bind statistics to UI and will be updated as each instance is executed
                    EventSystem.Publish <OptimizationStatistics>(optimizationStatistics);
                }

                // Save total number of iterations count
                _optimizationParameters.TotalIterations = _strategiesCollection.Count;

                // Start executing each instance
                StartStrategyExecution();
            }
            catch (Exception exception)
            {
                _asyncClassLogger.Error(exception, _type.FullName, "StartOptimization");
            }
        }