/* * 装饰者* 装饰者与被装饰对象有相同的父类* 装饰者内包含被装饰者对象的引用* * 组合替代继承来扩展对象行为,运行时根据需求动态扩展* 扩展开放,修改关闭。* */public class Phone { }public class IPhone : Phone{public IPhone() { Console.WriteLine("IPhone"); }}public class VIVO : Phone{public VIVO() { Console.WriteLine("VIVO"); }}public abstract class Decorator : Phone{public Decorator(Phone phone) { Decorate(); }public abstract void Decorate();}public class Pack : Decorator{public Pack(Phone phone) : base(phone) { }public override void Decorate() { Console.WriteLine("Pack"); }}public class Film : Decorator{public Film(Phone phone) : base(phone) { }public override void Decorate() { Console.WriteLine("Film"); }}static void Main(string[] args){IPhone iphone = new IPhone();Pack packIphone = new Pack(iphone);Film filmIphone = new Film(iphone);Console.WriteLine("========================");Film filmVivo = new Film(new Pack(new VIVO()));Console.ReadLine();}