应用的场景的就是游戏中需要装饰的物品,增加的属性,接下来来个实例-宝剑与宝石镶嵌的实例
首先创建宝剑基类
//宝剑基类
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;
}
}