这个模式看了很久,没机会来写写,一是没想到用什么列子来讲,二是最近有点烦躁.呵呵
今天下午,感冒中,上网无聊,就写写.
例子还是参考<java与模式>里面的美猴王.
话说,从前,东海有个石头,某天,爆出了个石头猴子.
石头猴子
using System;
using System.Collections.Generic;
using System.Text;
namespace 装饰模式
{
public abstract class 石头猴子
{
public 石头猴子()
{
}
private string mName = "石头猴子,没名没姓";
public virtual string Name
{
get
{
return mName;
}
}
public virtual void 行为()
{
Console.WriteLine("猴子能够跳,不能够跳,怎么进的了水连洞?");
}
}
}
后来,这个石头猴子当了一群小猴猴的王,取名叫美猴王
美猴王
using System;
using System.Collections.Generic;
using System.Text;
namespace 装饰模式
{
public class 美猴王 : 石头猴子
{
public 美猴王()
{
}
public override string Name
{
get
{
return "美猴王";
}
}
public override void 行为()
{
base.行为();
Console.WriteLine("猴子当了大王");
}
}
}
然后,某天呢,猴子群中的一老猴子死掉了,美猴王觉得自己不应该死,要能够长生不老,因此,打算去学习武功,哪个艰辛万苦后,学到了72变
七十二变化
using System;
using System.Collections.Generic;
using System.Text;
namespace 装饰模式
{
public abstract class 七十二变化 : 石头猴子
{
private 石头猴子 猴子本身;
public 七十二变化(石头猴子 美猴王)
{
猴子本身 = 美猴王;
}
public override void 行为()
{
猴子本身.行为();
}
}
}
然后呢,猴子有武功了,坐不住了,呵呵,想搞政治了,结果呢,当然受到了打压,他是左变化右变化
一会变成了鱼
鱼
using System;
using System.Collections.Generic;
using System.Text;
namespace 装饰模式
{
public class 鱼 : 七十二变化
{
public 鱼(石头猴子 美猴王):base(美猴王)
{
}
public override string Name
{
get
{
return "猴子变的鱼";
}
}
public override void 行为()
{
base.行为();
this.鱼能够游泳();
}
private void 鱼能够游泳()
{
Console.WriteLine("猴子变的鱼能够在水中游泳!");
}
}
}
此时,我们会发觉,猴子,不仅能够上蹦小跳,也当了山大王,还TMD居然可以游泳了。。。
一会又从鱼变成了水鸭子
水鸭子
using System;
using System.Collections.Generic;
using System.Text;
namespace 装饰模式
{
public class 水鸭子 : 七十二变化
{
public 水鸭子(石头猴子 美猴王):base(美猴王)
{
}
public override string Name
{
get
{
return "猴子变的水鸭子";
}
}
public override void 行为()
{
base.行为();
this.水鸭子能够飞();
}
private void 水鸭子能够飞()
{
Console.WriteLine("猴子变的水鸭子能够在天上飞!");
}
}
}
此时,我们会发觉,猴子,不仅能够上蹦小跳,也当了山大王,还TMD居然可以飞了。。。
这样呢,变过去变过来的过程中呢,他不仅能够游,还能够飞了
最后呢,一道招安令也就结束了..
那他是怎么变化的呢?
来看看他变化的过程吧:
猴子百般变化
石头猴子 美猴王 = new 美猴王();
七十二变化 美猴王变的鱼 = new 鱼(美猴王);
水鸭子 美猴王变的水鸭子 = new 水鸭子(美猴王变的鱼);
美猴王变的水鸭子.行为();
最后的效果就是,不仅能够上蹦下跳,还当了山大王,还可以在水中游泳,并且,还可以飞了。。。