using System; public class Test { public static void Main() { IComputer computer = new KeyBoard(new Monitor(new Disk(new Computer()))); Console.WriteLine(" You are getting a " + computer.getComputer()); } } public interface IComputer { string getComputer(); } public sealed class Computer : IComputer { public string getComputer() { return "computer"; } } public abstract class ComputerDecorator : IComputer { private IComputer _computer; public ComputerDecorator(IComputer computer) { _computer = computer; } public virtual string getComputer() { return _computer.getComputer(); } } public class Disk : ComputerDecorator { public Disk(IComputer c) : base(c) { } public override String getComputer() { return base.getComputer() + " and a disk"; } } public class Monitor : ComputerDecorator { public Monitor(IComputer c) : base(c) { } public override String getComputer() { return base.getComputer() + " and a Monitor"; } } public class KeyBoard : ComputerDecorator { public KeyBoard(IComputer c) : base(c) { } public override String getComputer() { return base.getComputer() + " and a KeyBoard"; } }