装饰器设计模式
装饰器模式模式一直以来都以烧脑著称,今天大话一下红烧肉的做法进行装饰模式的展示。
一、类之间的关系
1、纵向关系:继承
2、横向关系:聚合、组合
二、先声明一个抽象的菜品基类
public abstract class AbstractFood
    {
        public string  Name { get; set; }
        public int Price { get; set; }
        public abstract void Cook();
        public void Show()
        {
            Console.WriteLine("菜名:"+this.Name+"价格"+this.Price);
        }
    }
三、声明一个菜品的子类(肉)
    public class Meat: AbstractFood
    {
        public override void Cook()
        {
            Console.WriteLine("准备做红烧肉");
            Console.WriteLine("二斤生猪肉");
        }
    }
四、声明一个菜品装饰器基类,继承AbstractFood
   public class BaseDecorator : AbstractFood
    {
        private AbstractFood _Food = null;
        public BaseDecorator(AbstractFood food)
        {
            Console.WriteLine("{0}被构造", this.GetType().Name);
            this._Food = food;
        }
        public override void Cook()
        {
            this._Food.Cook();
        }
    }
五、声明一个加盐的基类
    class SaltDecorator : BaseDecorator
    {
        public SaltDecorator(AbstractFood food) : base(food)//调用父类的构造函数
        {
            Console.WriteLine("{0}被构造", this.GetType().Name);
        }
        public override void Cook()
        {
            base.Cook();
            Console.WriteLine("加点盐和酱油");
        }
    }
六、声明一个加糖的子类
    public class SugarDecorator : BaseDecorator
    {
        public SugarDecorator(AbstractFood food) : base(food)
        {
            Console.WriteLine("{0}被构造", this.GetType().Name);
        }
        public override void Cook()
        {
            base.Cook();
            Console.WriteLine("加点糖。。。。。");
            Console.WriteLine("红烧肉出锅,狗子上菜去");
        }
    }
七、红烧肉加工
                AbstractFood food = new Meat()
                {
                    Name = "红烧肉",
                    Price=58
                };
                //加点盐和酱油
                food = new SaltDecorator(food);
                //加点糖准备出锅
                food = new SugarDecorator(food);
                food.Cook();
八、放张图
九、总结
装饰器模式原理就是将类之间的纵向关系和横向关系相结合,之所装饰的根本在于他们都有一个抽象类的约束,有一个基装饰器,里面有字段用来保存装饰的示例,其他字装饰器都继承基装饰器,子装饰器之间都是平行存在,基装饰器运用类关系的纵向和横向。
                    
                
                
            
        
浙公网安备 33010602011771号