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

    八、放张图

    九、总结

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

  • 相关阅读:
    0Day – 2011.1.20[From B4A]
    0Day – 2011.1.16[From B4A]
    ubuntu 桌面下方的面板(任务栏)恢复方法
    Delphi WebBrowser用法几则浅谈
    0Day – 2011.1.3[From B4A]
    0Day – 2011.1.8[From B4A]
    0Day – 2011.1.6[From B4A]
    0Day – 2011.1.10[From B4A]
    0Day – 2011.01.21[From B4A]
    0Day – 2011.1.7[From B4A]
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752331.html
Copyright © 2011-2022 走看看