装饰模式--私人定制冬装夏装

        设计模式中的装饰模式,最大的好处就是可以动态地给一个对象增加一些额外的职责,把类中的装饰功能移除简化原有类。这也体现了面向对象的核心开放-封闭原则。

     装饰模式由4个角色构成:

       (1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
  (2)具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
  (3)装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
  (4)具体装饰(Concrete Decorator)角色:负责给构件对象添加上附加的责任。

     但在具体的实例过程中,有了具体构件或具体装饰也就没有必要再建立抽象构件或装饰了。

    下面就以为电视剧里的”若曦“和”四爷“打造一身 冬装和夏装为例实现一下代码:

     首先是Concrete Component:Person类

      

class Person
    {
        public Person()
        { }
        private string name;
        public Person(string name)
        {
            this.name = name;
        }
        public virtual void Show()
        {
            Console.WriteLine("装扮的{0}", name);
        }
    }
     然后是Decorator:Finery类

class Finary : Person
    {
        protected Person component;

        //打扮
        public void Decorate(Person component)
        {
            this.component = component;

        }
        public override void Show()
        {
            if (component != null)
            {
                component.Show();
            }
        }
    }

      ConcreteDecorator:具体的Finery类

 class TShirts : Finary
    {
        public override void Show()
        {
            Console.WriteLine("T恤");
            base.Show();
        }
    }
    class Shorts : Finary
    {
        public override void Show()
        {
            Console.WriteLine("短裤");
            base.Show();
        }
    }
    class Snadal : Finary
    {
        public override void Show()
        {
            Console.WriteLine("凉鞋");
            base.Show();
        }
    }
    class CottonShoes : Finary
    {
        public override void Show()
        {
            Console.WriteLine("棉鞋");
            base.Show();
        }
    }
    class Jeans : Finary
    {
        public override void Show()
        {
            Console.WriteLine("牛仔裤");
            base.Show();
        }
    }
    class Scarf : Finary
    {
        public override void Show()
        {
            Console.WriteLine("围巾");
            base.Show();
        }
    }
    class DownJacks : Finary
    {
        public override void Show()
        {
            Console.WriteLine("羽绒服");
            base.Show();
        }
    }
最后是客户端的代码:

class Program
    {
        static void Main(string[] args)
        {
            // 夏天的装扮
            Person sy = new Person("四爷");
            Console.WriteLine("夏天装扮的“四爷”:");                  

            Snadal lx = new Snadal ();
            Shorts dk = new Shorts();
            TShirts tx = new TShirts();

            //装饰过程
            lx.Decorate(sy);
            dk.Decorate(lx);
            tx.Decorate(dk);
            tx.Show();

            //冬天的装扮
            Person rx = new Person("若曦");
            Console.WriteLine("\n\n冬天装扮的“若曦”:");

            CottonShoes  mx = new CottonShoes ();
            Jeans nj = new Jeans ();
            DownJacks yrf = new DownJacks();
            Scarf wj = new Scarf();

            //装饰过程
            mx.Decorate(rx);
            nj.Decorate(mx);
            yrf.Decorate(nj);
            wj.Decorate(yrf);
            wj.Show();

            Console.Read ();
        }
    }

结果显示为:



     这样就用装饰模式就为“四爷”和“若曦”穿越回现在的样子打扮好了,只是穿的是不是有点太接地气了呢?想要为他们打造华丽的服饰还是自己试试吧!






评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值