///Wrap an object if wrapper available, within provided environment
        public static void Wrap(object o, Environment env)
        {
            var wrapper = DecoratorFactory.GetDecorator <IExpressionDecorator>(o);

            if (wrapper != null)
            {
                wrapper.Wrap(env);
            }
        }
        public void DoWork()
        {
            var decoraFactory = new DecoratorFactory(new BatchProcess());

            decoraFactory.DecoratorsSequence = new List <DecoratorType>()
            {
                DecoratorType.FileDownload,
                DecoratorType.ExecuteSP,
                DecoratorType.FileUpload
            };
            decoraFactory.GetBatchProcess().DoWork();
        }
Example #3
0
        public IActionResult AESCrypFile(FileRequestEntity fileRequestEntity)
        {
            //設置初始化的被裝飾者
            DecoratorFactory factory = new DecoratorFactory(new FileProcess());

            //設置裝飾的順序
            factory.SetProcess(new AESCrypProcess());

            IProcess process = factory.GetProcess();

            process.Write(fileRequestEntity.FilePath, fileRequestEntity.Content);

            return(this.Ok());
        }
Example #4
0
        public void ShouldReturnFizzBuzz15()
        {
            var factory = new DecoratorFactory();
            var range   = new Tuple <int, int>(1, 100);

            var numberWordPairs = new Queue <Tuple <int, string> >();

            numberWordPairs.Enqueue(new Tuple <int, string>(3, "Fizz"));
            numberWordPairs.Enqueue(new Tuple <int, string>(5, "Buzz"));

            var numberGenerator = factory.GetDecoratedNumberGenerator(range, numberWordPairs);

            var results = numberGenerator.GetNumberValuePairs().ToList();

            Assert.AreEqual("Fizz Buzz", results[14].Value);
        }
Example #5
0
        public IActionResult ZipFile(FileRequestEntity fileRequestEntity)
        {
            //設置初始化的被裝飾者
            DecoratorFactory factory = new DecoratorFactory(new FileProcess());

            //設置裝飾的順序
            factory.SetProcess(new ZipProcess()
            {
                ZipFileName = "susu.zip", PassWord = "******"
            });

            IProcess process = factory.GetProcess();

            process.Write(fileRequestEntity.FilePath, fileRequestEntity.Content);

            return(this.Ok());
        }
    public static async Task DecorateAsync(Chunk chunk, double[,] terrainHeightMap, OverworldTerrain ot, World world)
    {
        var noise = new TerrainNoise(ot.settings);

        for (int x = 0; x < 16; x++)
        {
            for (int z = 0; z < 16; z++)
            {
                var        b         = ChunkBiome.GetBiome((chunk.X << 4) + x, (chunk.Z << 4) + z, ot);
                var        blockPos  = new Vector(x, (int)terrainHeightMap[x, z], z);
                IDecorator decorator = DecoratorFactory.GetDecorator(b, chunk, blockPos, noise);

                decorator.Decorate();
                await GenerateTreesAsync(world, blockPos + (chunk.X << 4, 0, chunk.Z << 4), decorator.Features, noise);
                await GenerateFloraAsync(world, blockPos + (chunk.X << 4, 0, chunk.Z << 4), decorator.Features, noise);
            }
        }
    }
Example #7
0
        static void Main(string[] args)
        {
            var start = 1;
            var end   = 100;

            var queue = new Queue <Tuple <int, string> >();

            queue.Enqueue(Tuple.Create(3, "FiZZ"));
            queue.Enqueue(Tuple.Create(5, "Buzz"));

            var facroty = new DecoratorFactory();

            var numberGerator = facroty.GetDecoratedNumberGenerator(Tuple.Create(start, end), queue);

            foreach (var word in numberGerator.GetNumberValuePairs())
            {
                Console.WriteLine(word.Value);
            }
        }
Example #8
0
        /// <summary>
        /// 获取所有的装饰器
        /// </summary>
        /// <returns></returns>
        private static List <IDecorator> GetDecorators <T>()
            where T : class, new()

        {
            List <IDecorator>            decorators        = new List <IDecorator>();
            List <BaseDecorateAttribute> attrs             = new List <BaseDecorateAttribute>();
            TypeDecoratorInfo            typeDecoratorInfo = TypeDecoratorInfoFactory.CreateInstance(typeof(T));

            attrs.AddRange(typeDecoratorInfo.TypeDecoratorAttrs);
            typeDecoratorInfo.PropertyDecoratorInfos.ForEach(a => attrs.AddRange(a.DecoratorAttrs));

            attrs.Distinct(new DecoratorAttributeComparer()).ToList().ForEach
                (a =>
            {
                var decorator = DecoratorFactory.CreateInstance(a.GetType());
                if (decorator != null)
                {
                    decorators.Add(decorator);
                }
            });

            return(decorators);
        }
Example #9
0
    public INode CreateRandomSelectorTest()
    {
        NodeFactory      factory          = FactoryManager.Instance.GetFactory <NodeFactory>(FactoryType.Node);
        ConditionFactory conditionFactory = FactoryManager.Instance.GetFactory <ConditionFactory>(FactoryType.Condition);
        DecoratorFactory decoratorFactory = FactoryManager.Instance.GetFactory <DecoratorFactory>(FactoryType.Decorator);

        var rootNode = factory.Create <RootNode>(NodeType.Root);
        RandomSelectorNode randomSelectorNode = factory.Create <RandomSelectorNode>(NodeType.RandomSelector);
        DecoratorNode      decoratorNode      = factory.Create <DecoratorNode>(NodeType.Decorator);
        FalseDecorator     not = decoratorFactory.Create <FalseDecorator>(DecoratorType.False);

        decoratorNode.SetDecoratable(not);
        var actionNode1 = CreateSampleActionNode1();
        var actionNode2 = CreateSampleActionNode1();
        var actionNode3 = CreateSampleActionNode2();

        randomSelectorNode.AddNode(actionNode1);
        randomSelectorNode.AddNode(actionNode2);
        decoratorNode.AddNode(actionNode3);
        randomSelectorNode.AddNode(decoratorNode);
        rootNode.AddNode(randomSelectorNode);
        return(rootNode);
    }
Example #10
0
 public TestComponentFactoryWithObjectLoaderDecorator(DecoratorFactory factory)
 {
     _factory = factory;
 }
        public void Build()
        {
            Core.IBreath src = this.Tag;
            _node.Text = src.ToString();
            Core.IEntry entry = src as Core.IEntry;

            // entry
            if (entry != null)
            {
                ISceneDecorator deco  = DecoratorFactory.GetEntryDecorator(entry);
                string          image = (entry.Enabled && entry.IsVisible()) ? "entry.png" : "entry_gray.png";
                _node.ImageKey         = image;
                _node.SelectedImageKey = image;
            }

            // scene
            if (entry != null)
            {
                TreeNode node = this.Find("scene");
                if (node == null)
                {
                    node = _node.Nodes.Insert(
                        0, "scene", "描画情報", "scene.png", "scene.png"
                        );
                }
                ISceneDecorator elm = entry.GetElement <ISceneDecorator>();
                node.Tag = elm;
                node.Nodes.Clear();
                string icon = "decoration.png";
                foreach (IDecoration d in elm.Decorations)
                {
                    string   name = d.GetType().Name;
                    TreeNode dec  = node.Nodes.Add(name, name, icon, icon);
                    dec.Tag = d;
                }
            }

            // entity
            if (entry != null)
            {
                TreeNode node = this.Find("entity");
                if (entry.Entity != null)
                {
                    string name = entry.Entity.GetType().Name;
                    if (node == null)
                    {
                        node = _node.Nodes.Insert(
                            1, "entity", name, "entity.png", "entity.png");
                    }
                    else if (node.Text != name)
                    {
                        node.Text = name;
                    }
                    node.Tag = entry.Entity;
                }
                else if (node != null)
                {
                    _node.Nodes.Remove(node);
                }
            }

            // 不要な TreeNode を削除
            {
                List <TreeNode> removing = new List <TreeNode>();
                foreach (TreeNode node in _node.Nodes)
                {
                    if (node.Name == "scene")
                    {
                        continue;
                    }
                    if (node.Name == "entity")
                    {
                        continue;
                    }
                    TreeNodeBuilder tnb = (TreeNodeBuilder)node.Tag;
                    Core.IEntry     e   = tnb.Tag as Core.IEntry;
                    if (e == null || !this.SubEntries.Contains(e.ID))
                    {
                        removing.Add(node);
                    }
                }
                foreach (TreeNode node in removing)
                {
                    _node.Nodes.Remove(node);
                }
            }
        }