设计模式结构型之装饰器模式

学习装饰器模式,我们就该知道什么叫做装饰,就是对一个主体单位进行修饰,拿现实生活中的房子举例,开发商把房子交给客户之后,客户要对房子按照自己的风格进行装修。

下面我们用程序代码来描述,我们可以创建两种房子住房(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这个类来说,就像是穿了一层外衣一样,我们可以不断的添加新的功能,也可以改变他们的执行顺序,很灵活。

posted @ 2020-08-24 13:19  一叶青城  阅读(141)  评论(0编辑  收藏  举报