クラス間の依存性を減らす

ゲーム管理において、クラスを参照してイベントを実行する場合があるが、
クラス間の依存性が大きくなる問題がある。

そこで、クラスとクラスの間にインターフェースを設け、依存性を減らそうと思う。

ゲーム管理部

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

public class GameManager
{
    Dictionary<string, MessageInterface> list = new Dictionary<string, MessageInterface>();

    public void AddMessage(string data, MessageInterface obj)
    {
        list.Add(data, obj);
    }
    public void Message(string address, string data1, string data2)
    {
        if (list.ContainsKey(address))
        {
            list[address].Message(data1, data2);
        }
        else Debug.Log("送信する相手がいません メッセージを破棄します");
    }
}
public interface MessageInterface
{
    void Message(string data1, string data2);
}

受信側

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

public class Player3 : MessageInterface
{
    public GameManager gm;
    int hp = 100;
    void Start()
    {
        gm.AddMessage("player", this);
    }
    void MessageInterface.Message(string data1, string data2)
    {
        if (data1 == "damage")
        {
            hp -= int.Parse(data2);
        }
    }
}

送信側

public class Enemy : MessageInterface
{
    public GameManager gm;
    void Attack()
    {
        //プレイヤーに30のダメージを与える
        gm.Message("player", "damage", "30"); 
    }
}

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。