zoukankan      html  css  js  c++  java
  • 装饰器设计模式

    装饰器模式模式一直以来都以烧脑著称,今天大话一下红烧肉的做法进行装饰模式的展示。

    一、类之间的关系

    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();

    八、放张图

    九、总结

    装饰器模式原理就是将类之间的纵向关系和横向关系相结合,之所装饰的根本在于他们都有一个抽象类的约束,有一个基装饰器,里面有字段用来保存装饰的示例,其他字装饰器都继承基装饰器,子装饰器之间都是平行存在,基装饰器运用类关系的纵向和横向。

  • 相关阅读:
    Ui——创建视图的方法及过程
    iOS设计模式----原型模式
    浅谈OC中排序的方法
    Solid Dominoes Tilings (轮廓线dp打表 + 容器)
    Shell Necklace (dp递推改cdq分治 + fft)
    Rigid Frameworks (画图二分图规律 + DP + 数学组合容斥)
    PowMod (欧拉推式子 + 指数循环节)
    Necklace (全排列 + 匈牙利)
    GCD (RMQ + 二分)
    Game (思维)
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752331.html
Copyright © 2011-2022 走看看