using System; public class Test { public static void Main() { Computer sealedComputer = new Computer(); IComputer computer = new KeyBoard(new Monitor(new Disk(new ComputerAdapter(sealedComputer)))); Console.WriteLine(" You are getting a " + computer.getComputer()); } } public sealed class Computer { public string getComputer() { return "computer"; } } public interface IComputer { string getComputer(); } public sealed class ComputerAdapter : IComputer { private Computer _computer; public ComputerAdapter(Computer computer) { _computer = computer; } public string getComputer() { return _computer.getComputer(); } } 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"; } }