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(); }
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); }