装饰模式

简介: 装饰模式

”装饰“想到的就是人的服饰、一个物体的改造等。那么如果放在代码中时如何装饰的呢?

先要有一个被装饰的物体,拿人做例子的话,就先要有一个人的类。

private string name;
        public Person (string name)
        {
            this.name = name;
        }
        public void Show()
        {
            Console.WriteLine("装扮的{0}", name);
        }

有了人之后还要有一个卖衣服的地方。

abstract class Finery
    {
        public abstract void Show();
    }

服装店里面还有各种衣服的类型

 class TShirts : Finery
    {
        public override void Show()
       {
            Console.Write("大T恤");
        }
    }
    class BigTrouser : Finery
    {
        public override void Show()
        {
            Console.Write("跨裤");
        }
    }
    class Sneakers : Finery
    {
        public override void Show()
        {
            Console.Write("破球鞋");
        }
    }
    class Suit : Finery
    {
        public override void Show()
        {
            Console.Write("西装");
        }
    }
    class LeatherShoes : Finery
    {
        public override void Show()
        {
            Console.Write("皮鞋");
        }
    }
    class Tie : Finery
    {
        public override void Show()
        {
            Console.Write("领带");
        }
    }

客户端

Person xc = new Person("小菜");
            Console.WriteLine("\n 第一种装饰:");
            Finery dtx = new TShirts();
            Finery dkk = new BigTrouser();
            Finery pqx = new Sneakers();
            dtx.Show();
            dkk.Show();
            xc.Show();
            Console.WriteLine("\n第二种装扮:");
            Finery xz = new Suit();
            Finery ld = new Tie();
            Finery px = new LeatherShoes();
            xz.Show();
            ld.Show();
            px.Show();
            xc.Show();
            Console.Read();

可以发现在客户端有很多的重复,这需要进行修改。

装饰模式

public Person()
        { }
        private string name;
        public Person (string name)
        {
            this.name = name;
        }
        public virtual void Show()
        {
            Console.WriteLine("装扮的{0}", name);
        }
 class Finery :Person
    {
        protected Person component;
        //打扮
        public void Decorate(Person component)//Decorate点缀的意思,component组成
        {
            this.component = component;
        }
        public override void Show()
        {
            if (component!=null)
            {
                component.Show();
            }
        }
    }
class TShirts : Finery
    {
        public override void Show()
        {
            Console.Write("大T恤");
            base.Show();
        }
    }
    class BigTrouser : Finery
    {
        public override void Show()
        {
            Console.Write("跨裤 ");
            base.Show();
        }
    }
    class Sneakers : Finery
    {
        public override void Show()
        {
            Console.Write("破球鞋");
            base.Show();
        }
    }
    class Suit : Finery
    {
        public override void Show()
        {
            Console.Write("西装");
            base.Show();
        }
    }
    class LeatherShoes : Finery
    {
        public override void Show()
        {
            Console.Write("皮鞋");
            base.Show();
        }
    }
    class Tie : Finery
    {
        public override void Show()
        {
            Console.Write("领带");
            base.Show();
        }
    }

客户端

Person xc = new Person("小菜");
            Console.WriteLine("\n 第一种装扮:");
            Sneakers pqx = new Sneakers();
            BigTrouser kk = new BigTrouser();
            TShirts dtx = new TShirts();
            pqx.Decorate(xc);//装饰过程
            kk.Decorate(pqx);
            dtx.Decorate(kk);
            dtx.Show();
            Console.WriteLine("\n 第二种装扮");
            LeatherShoes px = new LeatherShoes();
            Tie ld = new Tie();
            Suit xz = new Suit();
            px.Decorate(xc);
            ld.Decorate(px);
            xz.Decorate(ld);
            xz.Show();
            Console.Read();
        }

相关文章
|
6月前
结构型 装饰器模式
结构型 装饰器模式
32 0
|
28天前
|
设计模式 缓存 C#
C# 一分钟浅谈:装饰者模式与代理模式
【10月更文挑战第12天】本文介绍了面向对象编程中的两种常见设计模式:装饰者模式和代理模式。装饰者模式允许在运行时动态地给对象添加功能,而代理模式则通过代理对象控制对另一个对象的访问。文章详细讲解了这两种模式的概念、常见问题、如何避免问题以及代码示例,帮助读者更好地理解和应用这些设计模式。
36 13
装饰者模式
装饰者模式
71 0
打扮一下(装饰模式)
打扮一下(装饰模式)
63 0
|
设计模式 Java
Java设计模式_装饰模式
Java设计模式_装饰模式
|
Java
结构型模式-装饰者模式
结构型模式-装饰者模式
88 0
装饰者模式详解
装饰者模式详解
|
缓存 Java 数据库连接
深入理解装饰者模式
深入理解装饰者模式
156 0
深入理解装饰者模式