利用静态关键字和单例设计模式。
当你的同事之前已经写过一个函数、一个类甚至一个算法时,你花了多少小时从头开始重写它,或者更糟的是,也许那个人是你的旧版本!
您为使代码可搜索而花费的时间和精力是值得的!
制作可搜索代码的一个好方法是利用大多数(如果不是所有)现代编辑器中存在的自动完成功能,将路径公开到您想要查找的代码段。
请注意,这种方法非常适合单线程应用程序,主要是视频游戏,应用程序的状态大多是可预测的。
静态关键字
一些人认为 static 关键字是对 OOP 方法的退步。使用静态字段将错过程序的状态,其中包含该静态字段的类的任何实例都可以修改其值。使用静态字段的内存效率不高,因为这些字段是全局存储的。
是的,没错,静态变量是邪恶的,但只有当坏人以不好的方式使用时......
单例模式
总之,单例类是一个利用 static 关键字来确保某个类只存在一个实例的类。它通过隐藏构造函数使其私有,然后在初始化时公开该类的公共实例来做到这一点。
//C# singlton example using properties.public class MySinglton
{
private static MySinglton _instance;
public static MySinglton Instance
{
get
{
if(_instance == null)
_instance = new MySinglton();
_instance = this;
return _instance;
}
private void MySinglton();
}
单例的一个很酷的事情是除了确保一个类只存在一个实例之外,它还公开了静态属性和字段的一个很酷的特性。 它是直接在编辑器中访问这些属性的能力。
//a cool method in some random cool class public void MyCoolMethod()
{
var a = MySingleton.Instance;
}
只需在任何代码块中的 MySingleton.Instance 之后放置一个点,就会展开一个下拉列表,显示该单例的所有成员字段和属性。
大多数开发人员的问题是,他们对学到的有用功能和设计模式感到兴奋,因此他们倾向于以漫无目的、不稳定的方式实现它们。这让他们最终得到大量不相关的单例,并且当代码库随着时间的推移变得更大时,可能会导致废弃代码。
条条大路通罗马
当您可以利用单例模式来访问代码库中的每一段公共代码时,为什么还要依赖肌肉记忆并浪费时间来管理和更新文档。
每个代码库都由一组功能组成。这些特性是最底层的类,有一堆公开的方法和成员,这些公开方法和成员会暴露给你、未来的你,以及目前正在或可能在项目上工作的其他开发人员。
方法很简单:
案例分析
考虑一个有一个玩家和多个敌人的典型游戏。
Player.cs
public class Player
{
public float health; public Player();
public TakeDamage(float damage)
{
health -= damage;
}
}
GameManager.cs
我们将有一个单例的 GameManager,它将作为我们代码库的入口点。
public class GameManager
{
private static GameManager _instance;
public static GameManager Instance
{
get
{
if(_instance == null)
_instance = new GameManager();
_instance = this;
return _instance;
}
}
public Player playerRef;
public EnemyPooler enemyPooler;
private void GameManager()
{
Init();
}
.
.
.
}
Enemy.cs
public class Enemy
{
public float health;
public float damage;
private Player _playerRef;
public Player PlayerRef
{
get
{
if(_playerRef == null)
_playerRef=GameManager.Instance.Player;
return _playerRef;
}
} public Enemy();
public GiveDamage()
{
_playerRef.TakeDamage(damage);
}
}
注意敌人不需要直接与玩家交流,我们知道实体玩家确实存在,使用编辑器提供的自动补全功能,只需在实例后面放一个点。
有人会争辩说,如果有敌人就应该有玩家是合乎逻辑的,这是对的,这个例子很简单,但是想象一下我们的代码库变得更大了,我们最终得到了多个系统。 想象一下,拥有一个具有保存和加载功能的 sfx、vfx 或状态管理系统。
关注七爪网,获取更多APP/小程序/网站源码资源!
留言与评论(共有 0 条评论) “” |