设计模式——装饰模式

   上一篇博客介绍到策略模式,这篇博客给大家介绍下我理解的装饰模式。学习的过程是艰辛和坎坷的,但是收获时的心情却是喜悦的,为了能理解的比较深刻,决定自己敲个自己理解的例子总结总结,在奔溃了几次加上请教了很多人,终于对这个装饰模式有了一点自己的理解,在这分享一下,欢迎大家批评指正。

   大话上介绍的例子是关于小蔡穿衣服的例子,之前理解的有点偏差,觉得装饰模式只是在已经有了一个雏形的设计上添加一些”装饰品“,但是装饰品的增加对这个设计没有整体的影响,现在在看来,我之前的理解是因为对C#的代码熟悉程度不够,把面向对象的程序设计思想和设计模式这两个问题搞混了,经过一系列的奔溃的请教之后,发现装饰模式是这样的:

   首先以自己想的例子来介绍装饰模式:

   提高班的教学少不了培养计划,但是写这个培养计划又很是头疼,怎么写呢,该从哪下手呢?那么我们写文章该怎么写呢?首先得是对这个文章有个整体的想法把,先从整个文章的题目下手:

   class peiyangjihua
    {
       public peiyangjihua ()
       { }
        private string name;
        public peiyangjihua(string name)
        {
            this.name = name;
        }
        public virtual void study()
        {
            Console.WriteLine("",name );
        }
    }
好了,根据题目我们想到了大概的框架,接下来我们就开始细致分工,一点点细化我们这个文章的内容:

       class report : peiyangjihua
    {
        
        protected peiyangjihua kind;
        public void Decorate(peiyangjihua kind)
        {
            this.kind = kind;
        }  


        
        public override void reports()
        {
            if (kind != null)
            {
                kind.reports();
            }
        }
    }

   文章算是写完了,里面没有标题,没有目录,就连内容也不够精彩,甚至里面有很多的病句,错别字,内容不够精彩,这样的文章写出来是没有人会看的,怎么办呢?我们需要对其进行加工,但是不能没加工一次,就把这篇文章发表一次吧,所以说这个时候装饰模式就起作用了,我们把文章整体加工好之后,再发给同学们看:

    class Program
    {
        static void Main(string[] args)
        {
            peiyangjihua sc = new peiyangjihua   ("作者:");
            Console.WriteLine("\n培养计划:");
           
            title cp = new title();
            directory eng = new directory();
            content ct = new content();
//进行修饰:
            cp.Decorate(sc);
            eng.Decorate(cp);
            ct.Decorate(eng);
            ct.study ();        
        }
    }
}
 class directory:report 
    {
        public override void study()
        {
            Console.Write ("目录XXX");
            base.reports();
        }
    }
    class content : report
    {
        public override void study()
        {
            Console.Write("内容XXX");
            base.reports();
        }
    }
    class title:report 
    {
        public override void study()
        {
            
            Console.Write("标题XXX");
            base.study();
        }
    }

   这样经过很多人修改完之后的内容再发表出来,就是比较精彩的,看大话模式上的那个例子可能就更加形象点,就像小蔡穿衣服,不能每次穿一件就给大家展示一下,肯定是把所有的衣服都穿戴整齐之后再给大家展示。


学习总结:    

   在这个阶段的学习,最好能自己举例就试着举例子运行出来,尝试一下这个过程,之前师哥说如果我们之前UML和C#没有学习扎实,就像空中楼阁,到后面越走越艰难,果不其然,之前的学习没有理解那么深刻,这次自己敲例子就开始各种奔溃,上网百度,寻求周围人的帮助,才跌跌撞撞的实现了自己的这个例子,不过还不错,收获还是蛮多的!第二个重要的还是要多和其它人交流,不怕不知道,就怕不知道,最怕我们都不知道我们不会什么,跟大家交流过之后才发现自己的确把一些东西理解的太浅显了,还好及时醒悟。
     前方道路坎坷崎岖,我们需要不懈努力!
欢迎大家指点批评!
 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值