您的位置:首页 > 其它

9.装饰者模式(Decorator Pattern)

2015-07-11 16:47 337 查看
using System;

namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
// 我买了个苹果手机
Phone phone = new ApplePhone();

// 现在想贴膜了
Decorator applePhoneWithSticker = new Sticker(phone);

// 扩展贴膜行为
applePhoneWithSticker.Print();
Console.WriteLine("----------------------\n");

// 现在我想有挂件了
Decorator applePhoneWithAccessories = new Accessories(phone);

// 扩展手机挂件行为
applePhoneWithAccessories.Print();
Console.WriteLine("----------------------\n");

// 现在我同时有贴膜和手机挂件了
Sticker sticker = new Sticker(phone);
Accessories applePhoneWithAccessoriesAndSticker = new Accessories(sticker);
applePhoneWithAccessoriesAndSticker.Print();
Console.ReadLine();
}
}

/// <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("现在苹果手机有漂亮的挂件了");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: