コード例 #1
0
        static void Main(string[] args)
        {
            ICamera camera = new TimerDecorator(new FlashDecorator(new SimpleCamera()));

            Console.WriteLine(camera.Capture());

            var newCam = new LensDecorator(CameraDecorator.RemoveRole <TimerDecorator>(camera));

            Console.WriteLine(newCam.Capture());

            var timer = CameraDecorator.GetRole <TimerDecorator>(camera);

            timer.WaitTimer();
        }
コード例 #2
0
 public static T GetRole <T>(ICamera decorator) where T : CameraDecorator
 {
     if (decorator is CameraDecorator)
     {
         CameraDecorator camDecorator = decorator as CameraDecorator;
         while (camDecorator is CameraDecorator)
         {
             if (camDecorator is T)
             {
                 return(camDecorator as T);
             }
             camDecorator = camDecorator._camera as CameraDecorator;
         }
     }
     return(null);
 }