上一篇博客介绍到策略模式,这篇博客给大家介绍下我理解的装饰模式。学习的过程是艰辛和坎坷的,但是收获时的心情却是喜悦的,为了能理解的比较深刻,决定自己敲个自己理解的例子总结总结,在奔溃了几次加上请教了很多人,终于对这个装饰模式有了一点自己的理解,在这分享一下,欢迎大家批评指正。
大话上介绍的例子是关于小蔡穿衣服的例子,之前理解的有点偏差,觉得装饰模式只是在已经有了一个雏形的设计上添加一些”装饰品“,但是装饰品的增加对这个设计没有整体的影响,现在在看来,我之前的理解是因为对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#没有学习扎实,就像空中楼阁,到后面越走越艰难,果不其然,之前的学习没有理解那么深刻,这次自己敲例子就开始各种奔溃,上网百度,寻求周围人的帮助,才跌跌撞撞的实现了自己的这个例子,不过还不错,收获还是蛮多的!第二个重要的还是要多和其它人交流,不怕不知道,就怕不知道,最怕我们都不知道我们不会什么,跟大家交流过之后才发现自己的确把一些东西理解的太浅显了,还好及时醒悟。
前方道路坎坷崎岖,我们需要不懈努力!
欢迎大家指点批评!