public void Work()
        {
            // For example - we have already known factory types. We can
            // read it from configuration or another source.
            var phoneTypes = new List <CreatorGetter.PhoneType>
            {
                CreatorGetter.PhoneType.Symbian,
                CreatorGetter.PhoneType.Android,
                CreatorGetter.PhoneType.IOS
            };

            foreach (var phoneType in phoneTypes)
            {
                PhoneCreator creator = CreatorGetter.GetCreator(phoneType);
                IPhone       phone   = creator.CreatePhone();
                phone.Notify();
            }
        }
예제 #2
0
 public static T ReturnOnDemandValue <T>(ref T valueStorage, object valueLock, CreatorGetter <T> getValue)
 {
     if (valueStorage != null)
     {
         return(valueStorage);
     }
     lock (valueLock)
     {
         if (valueStorage == null)
         {
             valueStorage = getValue();
         }
         return(valueStorage);
     }
 }