名称:装饰者模式
说说:哥哥吞并了弟弟后,获得了弟弟的能力,本是同根生...
动机:
适用性:如功能扩展
参与者:
结果:动态地将责任附加到对象上,实现新的扩展
类图:
说明:实际上是在运行时实现了继承的功能(继承兄弟而非父亲,或者说吞并兄弟的属性),继承本身是在编译时决定的
demo c#:
namespace decoratorPattern
{
class Program
{
static void Main(string[] args)
{
iOperation _man = new man();
_man.display();
_man = new decorator_shoes(_man);
_man.display();
_man = new decorator_rocket(_man);
_man = new decorator_gun(_man);
_man.display();
Console.Read();
}
}
// main code
interface iOperation {
void display();
}
class man : iOperation { // 被装饰者
public void display(){
Console.WriteLine("i am a man");
}
}
class decorator_shoes : iOperation { // 装饰者 鞋,即man的扩展模块
iOperation obj;
public decorator_shoes(iOperation o){
this.obj = o;
}
public void display(){
this.obj.display();
Console.WriteLine("shoes loaded, i can move");
}
}
class decorator_rocket : iOperation{ // 装饰者 火箭
iOperation obj;
public decorator_rocket(iOperation o){
this.obj = o;
}
public void display(){
this.obj.display();
Console.WriteLine("rocket loaded, i can fly");
}
}
class decorator_gun : iOperation{ // 装饰者 枪
iOperation obj;
public decorator_gun(iOperation o){
this.obj = o;
}
public void display(){
this.obj.display();
Console.WriteLine("gun loaded, i can fire");
}
}
}