设计模式结构型之装饰器模式
学习装饰器模式,我们就该知道什么叫做装饰,就是对一个主体单位进行修饰,拿现实生活中的房子举例,开发商把房子交给客户之后,客户要对房子按照自己的风格进行装修。
下面我们用程序代码来描述,我们可以创建两种房子住房(House)和公寓(Falts),让他们继承父类(Bulding)。代码如下:
/// <summary> /// 房子父类 /// </summary> public abstract class Buliding { public string Name { get; set; } public abstract void Print(); }
/// <summary> /// 住房类 /// </summary> public class House : Buliding { public override void Print() { Console.WriteLine("住房已修建完成"); } }
/// <summary> /// 公寓类 /// </summary> public class Flats : Buliding { public override void Print() { Console.WriteLine("公寓已修建完成"); } }
运行一下,看一下结果:
class Program { static void Main(string[] args) { //创建一个住房 Buliding house = new House(); house.Print(); //创建一个公寓 Buliding falts = new Flats(); falts.Print(); } }
房子已经完成,接下来就该装修了。我们来创建几个装饰类.
/// <summary> /// 装饰基类 /// </summary> public abstract class BaseDecorator : Buliding { public abstract override void Print(); } /// <summary> /// 水电改造 /// </summary> public class WaterDianDecorator : BaseDecorator { private readonly Buliding _buliding = null; public WaterDianDecorator(Buliding buliding) { _buliding = buliding; } public override void Print() { _buliding.Print(); Console.WriteLine("完成了水电改造"); } } /// <summary> /// 墙面粉刷 /// </summary> public class BrushWallDecorator : BaseDecorator { private readonly Buliding _buliding = null; public BrushWallDecorator(Buliding buliding) { _buliding = buliding; } public override void Print() { _buliding.Print(); Console.WriteLine("完成了墙面粉刷"); } }
运行一下看一下结果。
{ //创建一个住房 Buliding house = new House(); //水电改造 house=new WaterDianDecorator(house); //墙面粉刷 house = new BrushWallDecorator(house); house.Print(); ////创建一个公寓 //Buliding falts = new Flats(); //falts.Print(); }
对于house这个类来说,就像是穿了一层外衣一样,我们可以不断的添加新的功能,也可以改变他们的执行顺序,很灵活。