设计模式学习笔记之 装饰者模式

代码:

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DecoratePattern
{
class Program
{
static void Main(string[] args)
{
Console.Write(
"顾客:来一盘饺子\r\n");
Console.Read(); Console.Read();

Dumpling dumpling
= new Dumpling();
Console.Write(
"服务生:"+dumpling.Describe()+" "+dumpling.Cast().ToString()+"元人民币\r\n");
Console.Read(); Console.Read();

Console.Write(
"顾客:等等,再给我拿点醋\r\n");
Console.Read(); Console.Read();

Vinegar vingarDumpling
= new Vinegar(dumpling);//用“醋”修饰饺子
Console.Write("服务生:" + vingarDumpling.Describe() + " " + vingarDumpling.Cast().ToString() + "元人民币\r\n");
Console.Read(); Console.Read();

Console.Write(
"顾客:什么,太黑了,醋也要钱,那酱油我也要点\r\n");
Console.Read(); Console.Read();

Soy soyVingarDumpling
= new Soy(vingarDumpling);//用“酱油”修饰那盘加了醋的饺子
Console.Write("服务生:" + soyVingarDumpling.Describe() + " " + soyVingarDumpling.Cast().ToString() + "元人民币\r\n");
Console.Read(); Console.Read();

Console.Write(
"顾客:啊,酱油不是和醋算在一起的?\r\n");
Console.Read(); Console.Read();
Console.Write(
"----------顾客吃光了饺子----------\r\n");
Console.Read(); Console.Read();

Console.Write(
"顾客:也太少了点,再来一盘馄饨吧,还有加醋和酱油\r\n");
Console.Read(); Console.Read();

Soy soyVingarWonton
=new Soy(new Vinegar(new Wonton()));
Console.Write(
"服务生:" + soyVingarWonton.Describe() + " " + soyVingarWonton.Cast().ToString() + "元人民币\r\n");
Console.Read(); Console.Read();

Console.Write(
"顾客:cow,再也不来这里吃饭了\r\n");
Console.Read(); Console.Read();


}
}

/// <summary>
/// 食物超类
/// </summary>
abstract class Food
{
abstract public string Describe();
abstract public double Cast();

}


/// <summary>
/// 被修饰者一:馄饨
/// </summary>
class Wonton : Food
{
public override Double Cast()
{
return 10;
}

public override string Describe()
{
return "馄饨";
}
}

/// <summary>
/// 被修饰者二:饺子
/// </summary>
class Dumpling : Food
{
public override Double Cast()
{
return 12;
}

public override string Describe()
{
return "饺子";
}
}

class Vinegar : Food
{
private Food _Food;

public Vinegar(Food Food)
{
this._Food = Food;
}
public override string Describe()
{
return "加醋" + this._Food.Describe();
}

public override double Cast()
{
return 2 + this._Food.Cast();
}
}

class Soy : Food
{
private Food _Food;

public Soy(Food Food)
{
this._Food = Food;
}
public override string Describe()
{
return "加酱油" + this._Food.Describe();
}

public override double Cast()
{
return 3 + this._Food.Cast();
}

}

}

运行结果:

原文地址:https://www.cnblogs.com/zzy0471/p/1324762.html