设计模式学习笔记之 装饰者模式
代码:
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();
}
}
}
运行结果:
欢迎转载,转载请注明出处