Example #1
0
        public void Operation(SomeObject uniqueState)
        {
            string shared = JsonConvert.SerializeObject(_sharedState);
            string unique = JsonConvert.SerializeObject(uniqueState);

            Console.WriteLine($"Flyweight: Displaying shared {shared} and unique {unique} state.");
        }
Example #2
0
        private (bool, string) IsExistFlyweight(SomeObject someObject)
        {
            string key    = GetKey(someObject);
            var    result = flyweights.Where(t => t.Item2 == key).Count() > 0;

            return(result, key);
        }
Example #3
0
        private void AddFlyweight(SomeObject someObject)
        {
            var flyweight   = new Flyweight(someObject);
            var key         = GetKey(someObject);
            var tupleObject = new Tuple <Flyweight, string>(flyweight, key);

            flyweights.Add(tupleObject);
        }
Example #4
0
        private string GetKey(SomeObject key)
        {
            var elements = new List <string> {
                key.Name, key.Body
            };

            elements.Sort();

            return(string.Join("_", elements));
        }
Example #5
0
        private void AddObjectToStorage(FlyweightFactory factory, SomeObject someObject)
        {
            Console.WriteLine("\nNew object adding to virtual storage.");

            var newObject = new SomeObject {
                Id = someObject.Id, Name = someObject.Name, Body = someObject.Body
            };
            var flyweight = factory.GetFlyweight(newObject);

            flyweight.Operation(someObject);
        }
Example #6
0
        public Flyweight GetFlyweight(SomeObject someObject)
        {
            var(isExistFlyweight, key) = IsExistFlyweight(someObject);

            if (isExistFlyweight)
            {
                Console.WriteLine("FlyweightFactory: Reusing existing flyweight.");
            }
            else
            {
                Console.WriteLine("FlyweightFactory: Can't find a flyweight, creating new one.");
                AddFlyweight(someObject);
            }

            return(flyweights.Where(t => t.Item2 == key).FirstOrDefault().Item1);
        }
Example #7
0
        public void Start()
        {
            var object1 = new SomeObject {
                Id = 1, Name = "Name1", Body = "Body1"
            };
            var object2 = new SomeObject {
                Id = 2, Name = "Name2", Body = "Body2"
            };
            var object3 = new SomeObject {
                Id = 3, Name = "Name3", Body = "Body3"
            };

            var factory = new FlyweightFactory(object1, object2, object3);

            factory.ListFlyweights();

            var object4 = new SomeObject {
                Id = 4, Name = "Name4", Body = "Body4"
            };
            var object5 = new SomeObject {
                Id = 5, Name = "Name5", Body = "Body5"
            };

            AddObjectToStorage(factory, object4);
            AddObjectToStorage(factory, object5);

            var object6 = new SomeObject {
                Id = 6, Name = "Name5", Body = "Body5"
            };

            AddObjectToStorage(factory, object6);

            Console.WriteLine();

            factory.ListFlyweights();
        }
Example #8
0
 public Flyweight(SomeObject someObject)
 {
     _sharedState = someObject;
 }