首页 > 代码库 > 装饰模式

装饰模式

装饰模式:

动态的给一个对象添加一些额外的职责,就增加功能呢来说,装饰模式比生成自来更为灵活。

 

装饰模式与职责链模式的差别:

1,装饰模式,增加这些功能会被一一执行。

2,职责链模式:并不是职责链中所有的职责代码都会执行。

 

/// <summary>
/// 手机抽象类,即装饰者模式中的抽象组件类
/// </summary>
public abstract class Phone
{
public abstract void Print();
}

/// <summary>
/// 苹果手机,即装饰着模式中的具体组件类
/// </summary>
public class ApplePhone:Phone
{
/// <summary>
/// 重写基类方法
/// </summary>
public override void Print()
{
Console.WriteLine("开始执行具体的对象——苹果手机");
}
}

/// <summary>
/// 装饰抽象类,要让装饰完全取代抽象组件,所以必须继承自Photo
/// </summary>
public abstract class Decorator:Phone
{
private Phone phone;

public Decorator(Phone p)
{
this.phone = p;
}

public override void Print()
{
if (phone != null)
{
phone.Print();
}
}
}

/// <summary>
/// 贴膜,即具体装饰者
/// </summary>
public class Sticker : Decorator
{
public Sticker(Phone p)
: base(p)
{
}

public override void Print()
{
base.Print();

// 添加新的行为
AddSticker();
}

/// <summary>
/// 新的行为方法
/// </summary>
public void AddSticker()
{
Console.WriteLine("现在苹果手机有贴膜了");
}
}

/// <summary>
/// 手机挂件
/// </summary>
public class Accessories : Decorator
{
public Accessories(Phone p)
: base(p)
{
}

public override void Print()
{
base.Print();

// 添加新的行为
AddAccessories();
}

/// <summary>
/// 新的行为方法
/// </summary>
public void AddAccessories()
{
Console.WriteLine("现在苹果手机有漂亮的挂件了");
}
}

 

地址:http://www.cnblogs.com/zhili/p/DecoratorPattern.html

装饰模式