说明:本程序在2005 中调试绝对能够运行view plaincopy to clipboardprint?
using System;
using System.Collections.Generic;
using System.Text;
namespace DecoratorModel
{
/// <summary>
///
/// xuejianxinokok@20090717
/// 装饰模式:被装饰的人 抽象基类
/// </summary>
public abstract class Person
{
//被包装的方法
abstract public void wrap();
}
}
------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:具体被包装的人 演员类
/// </summary>
public class Player:Person
{
public override void wrap()
{
Console.WriteLine("我是一个演员,现在我只会演戏.");
}
}
}
---------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:演员经济人,专么进行演员的包装 抽象基类
/// </summary>
public abstract class WrapPerson :Person
{
//因为此经济人要对一个人进行包装,所以必须持有被包装人的一个实例
protected Person person;
//在构造函数中初始化被包装人
public WrapPerson(Person p)
{
this.person = p;
}
}
}
------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:会用舞蹈包装人的经济人
/// </summary>
public class DanceWrapPerson :WrapPerson
{
//调用基类构造函数初始化
public DanceWrapPerson (Person p):base(p)
{
}
//重写包装方法,并添加新的功能
public override void wrap()
{
person.wrap();
// 添加新功能
dance();
}
private void dance()
{
Console.WriteLine("现在学会了跳舞");
}
}
}
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:会用唱歌包装人的经济人
/// </summary>
public class SingWrapPerson :WrapPerson
{
//调用基类构造函数初始化
public SingWrapPerson(Person p)
: base(p)
{
}
//重写包装方法,并添加新的功能
public override void wrap()
{
person.wrap();
// 添加新功能
sing();
}
private void sing()
{
Console.WriteLine("现在学会了唱歌");
}
}
}
---------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:会用整容包装人的经济人
/// </summary>
public class FaceWrapPerson:WrapPerson
{
//调用基类构造函数初始化
public FaceWrapPerson(Person p)
: base(p)
{
}
//重写包装方法,并添加新的功能
public override void wrap()
{
person.wrap();
// 添加新功能
face();
}
private void face()
{
Console.WriteLine("现在被整了容,变漂亮了");
}
}
}
--------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 本程序模拟了一个普通的演员是怎样被包装成明星的过程
///
/// 包装
/// 模拟思想:普通演员-------------->成名
/// </summary>
class Program
{
static void Main(string[] args)
{
Console.WriteLine("-------------未包装前---------------");
Console.WriteLine("");
Player p = new Player();
p.wrap();
Console.WriteLine("");
Console.WriteLine("-------------包装跳舞后---------------");
Console.WriteLine("");
DanceWrapPerson dwp = new DanceWrapPerson(p);
dwp.wrap();
Console.WriteLine("");
Console.WriteLine("-------------包装唱歌后---------------");
Console.WriteLine("");
SingWrapPerson swp = new SingWrapPerson(dwp);
swp.wrap();
Console.WriteLine("");
Console.WriteLine("-------------包装整容后---------------");
Console.WriteLine("");
FaceWrapPerson fwp = new FaceWrapPerson(swp);
fwp.wrap();
Console.WriteLine("");
Console.WriteLine("-------------OK,我火了,我成明星了!---------------");
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{ /// <summary>
///
/// xuejianxinokok@20090717
/// 装饰模式:被装饰的人 抽象基类
/// </summary> public abstract class Person
{ //被包装的方法
abstract public void wrap(); }
}
------------------------------------------------using System;
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{ /// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:具体被包装的人 演员类
/// </summary> public class Player:Person
{
public override void wrap()
{
Console.WriteLine("我是一个演员,现在我只会演戏.");
} }
}
---------------------------------------------------
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xuejianxinokok/archive/2009/07/17/4357319.aspx
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:演员经济人,专么进行演员的包装 抽象基类
/// </summary>
public abstract class WrapPerson :Person
{
//因为此经济人要对一个人进行包装,所以必须持有被包装人的一个实例
protected Person person; //在构造函数中初始化被包装人 public WrapPerson(Person p)
{
this.person = p;
}
}
}
------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:会用舞蹈包装人的经济人
/// </summary> public class DanceWrapPerson :WrapPerson
{
//调用基类构造函数初始化
public DanceWrapPerson (Person p):base(p)
{ }
//重写包装方法,并添加新的功能
public override void wrap()
{
person.wrap();
// 添加新功能
dance();
} private void dance()
{
Console.WriteLine("现在学会了跳舞");
} }
}
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:会用唱歌包装人的经济人
/// </summary> public class SingWrapPerson :WrapPerson {
//调用基类构造函数初始化
public SingWrapPerson(Person p)
: base(p)
{ }
//重写包装方法,并添加新的功能
public override void wrap()
{
person.wrap();
// 添加新功能
sing();
} private void sing()
{
Console.WriteLine("现在学会了唱歌");
}
}
}
---------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 装饰模式:会用整容包装人的经济人
/// </summary> public class FaceWrapPerson:WrapPerson
{
//调用基类构造函数初始化
public FaceWrapPerson(Person p)
: base(p)
{ }
//重写包装方法,并添加新的功能
public override void wrap()
{
person.wrap();
// 添加新功能
face();
} private void face()
{
Console.WriteLine("现在被整了容,变漂亮了");
} }
}--------------------------------using System;
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{
/// <summary>
/// xuejianxinokok@20090717
/// 本程序模拟了一个普通的演员是怎样被包装成明星的过程
///
/// 包装
/// 模拟思想:普通演员-------------->成名
/// </summary> class Program
{
static void Main(string[] args)
{
Console.WriteLine("-------------未包装前---------------");
Console.WriteLine("");
Player p = new Player(); p.wrap(); Console.WriteLine("");
Console.WriteLine("-------------包装跳舞后---------------");
Console.WriteLine("");
DanceWrapPerson dwp = new DanceWrapPerson(p); dwp.wrap(); Console.WriteLine("");
Console.WriteLine("-------------包装唱歌后---------------");
Console.WriteLine("");
SingWrapPerson swp = new SingWrapPerson(dwp);
swp.wrap(); Console.WriteLine("");
Console.WriteLine("-------------包装整容后---------------");
Console.WriteLine(""); FaceWrapPerson fwp = new FaceWrapPerson(swp); fwp.wrap(); Console.WriteLine("");
Console.WriteLine("-------------OK,我火了,我成明星了!---------------"); Console.ReadKey(); }
}
}
运行结果:-------------未包装前---------------我是一个演员,现在我只会演戏.-------------包装跳舞后---------------我是一个演员,现在我只会演戏.
现在学会了跳舞-------------包装唱歌后---------------我是一个演员,现在我只会演戏.
现在学会了跳舞
现在学会了唱歌-------------包装整容后---------------我是一个演员,现在我只会演戏.
现在学会了跳舞
现在学会了唱歌
现在被整了容,变漂亮了-------------OK,我火了,我成明星了!---------------