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."); }
private (bool, string) IsExistFlyweight(SomeObject someObject) { string key = GetKey(someObject); var result = flyweights.Where(t => t.Item2 == key).Count() > 0; return(result, key); }
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); }
private string GetKey(SomeObject key) { var elements = new List <string> { key.Name, key.Body }; elements.Sort(); return(string.Join("_", elements)); }
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); }
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); }
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(); }
public Flyweight(SomeObject someObject) { _sharedState = someObject; }