如何清楚地设计这两个类? [处于保留状态]

问题描述 投票:-3回答:1
        interface ILife {
            void Equip(IWeapon weapon);
        }
        interface IWeapon {
            void OnEquip(ILife life);
        }
        class People : ILife {
            int nowPower;
            public void Equip(IWeapon weapon) {
                //do something.....
                weapon.OnEquip(this);
                //so how to do like nowPower+=weapon.addPower?
            }
        }
        class Weapon : IWeapon {
            ILife user;
            int addPower=200;
            public void OnEquip(ILife life) {
                user = life;
                //do something...
            }
        }

这是我在游戏中的代码,ILife中需要处理很多类似Weapon中的addPower的字段,所以我如何在不添加IWeapon接口中添加字段以保持代码整洁的前提下做到这一点?

java c# c++ unity3d
1个回答
0
投票

这是设计问题。 Weapon具有字段addPower,但没有IWeapon。这意味着并非所有武器(并非所有实现IWeapon的类)都为角色增加了力量。因此,如果接口未定义此属性,则不能使用此属性。 (将接口投射到实现类上首先要考虑使用接口的全部要点)

如果all武器可以增加力量,那么界面IWeapon需要反映武器的这一要求:

interface IWeapon {
    void OnEquip(ILife life);

    int AddPower { get; }
}

然后所有武器都需要实现此属性:

class Weapon : IWeapon {
    int addPower=200;

    public int AddPower 
    {
        get {
            return this.addPower;
        }
    }
}

[如果武器确实增加任何力量(例如防御装备),则它最好在AddPower中返回0,没有区别。

© www.soinside.com 2019 - 2024. All rights reserved.