装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
l 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
l 具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类
l 装饰角色(Decorator):持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口
l 具体装饰角色(ConcreteDecorator):负责给构件对象“贴上”附加的责任
code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication5
{
class person
{
private string name;
public person() { }
public person(string name)
{
this.name = name;
}
public virtual void show()
{
Console.WriteLine("名字:{0}", name);
}
}
class Finery : person
{
protected person people;
public void Ordername(person people)
{
this.people = people;
}
public override void show()
{
if (people != null)
people.show();
}
}
class T_shirt : Finery
{
public override void show()
{
base.show();
Console.Write(" T-Shirt");
}
}
class shoes : Finery
{
public override void show()
{
base.show();
Console.Write(" shoes");
}
}
/* class text
{
public virtual void show()
{
Console.Write("Hello");
}
}
class text2 : text //base测试,base可以调用重写前被覆盖的基类
{
public override void show()
{
base.show();
Console.Write(",world");
}
}
*/
class Program
{
static void Main(string[] args)
{
person people1 = new person("beihai");
Console.WriteLine("show time");
T_shirt tshirt = new T_shirt();
shoes newshoes = new shoes();
tshirt.Ordername(people1);
newshoes.Ordername(tshirt);
newshoes.show();
Console.ReadKey();
}
}
}
运行输出:
show time
名字:beihai
T-Shirt shoes