/// <summary>
/// 定义一个对象接口,可以给这些对象动态地添加职责
/// </summary>
public abstract class Component
{
public abstract void Opration();
}
/// <summary>
/// 具体对象
/// </summary>
public class ConcreteComponent:Component
{
public override void Opration()
{
// 具体对象的操作
}
}
/// <summary>
/// 抽象的装饰类,它不能初始化对象。
/// </summary>
public abstract class Decorator:Component
{
protected Component component;
/// <summary>
/// 设置Component
/// </summary>
/// <param name="component"></param>
public void SetComponent(Component component)
{
this.component = component;
}
/// <summary>
/// 重写Operation,实际执行的是Component的Operation。
/// </summary>
public override void Opration()
{
if (component != null)
{
component.Opration();
}
}
}
public class ConcreteDecoratorA : Decorator
{
private void SpecialOpration()
{
// 本类特有的功能
}
public override void Opration()
{
//首先运行原Component的Operation(),在执行本类的功能,相当于对原Component进行了装饰
base.Opration();
this.SpecialOpration();
}
}
public class ConcreteDecoratorB : Decorator
{
private void SpecialOprationA()
{
// 本类特有的功能 A
}
private void SpecialOprationB()
{
// 本类特有的功能 B
}
public override void Opration()
{
//首先运行原Component的Operation(),在执行本类的功能,相当于对原Component进行了装饰
base.Opration();
this.SpecialOprationA();
this.SpecialOprationB();
}
}
/// <summary>
/// 装备类,相当于Component
/// </summary>
public abstract class Equipment
{
public abstract void Attack();
}
/// <summary>
/// 士兵类,继承自Equipment
/// </summary>
public class Soldier : Equipment
{
public Soldier()
{
// 构造函数
}
/// <summary>
/// 没有任何武器装备下的核心功能
/// </summary>
public override void Attack()
{
Console.WriteLine("用拳脚攻击!");
}
}
public abstract class EquipDecorator : Equipment
{
protected Equipment equipment;
/// <summary>
/// 增加装备,使用该方法来动态地给士兵增加装备
/// </summary>
/// <param name="equipment"></param>
public void SetComponent(Equipment equipment)
{
this.equipment = equipment;
}
/// <summary>
/// 攻击
/// </summary>
public override void Attack()
{
//如果有装备,就用装备进行攻击
if (equipment != null)
{
equipment.Attack();
}
}
}
/// <summary>
/// 步枪
/// </summary>
public class RifleEquipment : EquipDecorator
{
public override void Attack()
{
base.Attack();
Console.WriteLine("步枪射击,啪!");
}
}
/// <summary>
/// 机枪
/// </summary>
public class MachineGunEquipment : EquipDecorator
{
public override void Attack()
{
base.Attack();
Console.WriteLine("机枪扫射,突突突!");
}
}
/// <summary>
/// 火箭筒
/// </summary>
public class RocketGunEquipment : EquipDecorator
{
public override void Attack()
{
base.Attack();
Console.WriteLine("火箭炮射击,唰......!");
}
}
class Program
{
static void Main(string[] args)
{
// 定义新兵
Soldier soldier = new Soldier();
// 三种装备
RifleEquipment rifle = new RifleEquipment();
MachineGunEquipment machineGun = new MachineGunEquipment();
RocketGunEquipment rocketGun = new RocketGunEquipment();
// 将三种装备全部交给新兵
rifle.SetComponent(soldier);
machineGun.SetComponent(rifle);
rocketGun.SetComponent(machineGun);
// 攻击,除了拳脚功夫外,新兵还可以使用步枪,机枪,火箭炮.最终执行的是rocketGun.Attack().
rocketGun.Attack();
Console.Read();
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有