C#装饰者模式

应用的场景的就是游戏中需要装饰的物品,增加的属性,接下来来个实例-宝剑与宝石镶嵌的实例

首先创建宝剑基类

//宝剑基类
public class Sword
{
    public float attack;
    public float xixue;
    public float xuanyun;
    public float attackSpeed;
}

实例化宝剑

public class YTSword : Sword
{
    public YTSword()
    {
        attack = 10;
        attackSpeed = 20; 
    }
}


public class TLSword : Sword
{
    public TLSword()
    {
        attack = 15;
        attackSpeed = 15;
    }
}

接下来是创建宝石

//创建宝石,这里是个抽象类
public abstract class Jewel
{
    //镶嵌方法
    public abstract Sword SetDrill(Sword sword);
    //取回
}

实例化宝石

public class GreenJewel : Jewel
{

    //这里面返回的是宝剑的实例,方便链式调用
    public override Sword SetDrill(Sword sword)
    {
        sword.attack += 10;
        return sword;
    }
}

public class RedJewel : Jewel
{
    public override Sword SetDrill(Sword sword)
    {
        sword.attackSpeed += 10;
        return sword;
    }
}


public class BlueJewel : Jewel
{
    public override Sword SetDrill(Sword sword)
    {
        sword.attack += 20;
        return sword;
    }
}

最后就是调用宝石镶嵌了

         //实例化一把宝剑
        Sword sword = new YTSword();

        //实例宝石
        GreenJewel greed = new GreenJewel();
        RedJewel red = new RedJewel();

        red.SetDrill(greed.SetDrill(sword));

原理其实就是写个类调用方法给另一个类更改属性,以下是全部代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DecratorMode : MonoBehaviour {

    // Use this for initialization
    void Start () {
        //实例化一把宝剑
        Sword sword = new YTSword();

        //实例宝石
        GreenJewel greed = new GreenJewel();
        RedJewel red = new RedJewel();

        red.SetDrill(greed.SetDrill(sword));
    }


}


//宝剑基类
public class Sword
{
    public float attack;
    public float xixue;
    public float xuanyun;
    public float attackSpeed;
}


public class YTSword : Sword
{
    public YTSword()
    {
        attack = 10;
        attackSpeed = 20; 
    }
}


public class TLSword : Sword
{
    public TLSword()
    {
        attack = 15;
        attackSpeed = 15;
    }
}


//创建宝石
public abstract class Jewel
{
    //镶嵌方法
    public abstract Sword SetDrill(Sword sword);
    //取回
}

public class GreenJewel : Jewel
{
    public override Sword SetDrill(Sword sword)
    {
        sword.attack += 10;
        return sword;
    }
}

public class RedJewel : Jewel
{
    public override Sword SetDrill(Sword sword)
    {
        sword.attackSpeed += 10;
        return sword;
    }
}


public class BlueJewel : Jewel
{
    public override Sword SetDrill(Sword sword)
    {
        sword.attack += 20;
        return sword;
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值