考虑有两个类,名为User
和Player
。从表面上看,这些类是指游戏中的用户(帐户)和玩家的玩家。每个用户都有一个玩家,而每个玩家可以由单个用户拥有。
当用户想要加入游戏时,会创建一个Player
实例,并且游戏抽象将拥有包含的玩家。
类Player
的实例不应由User
以外的任何人创建。更准确地说,User
有一个方法Player *createPlayer(...)
,以便创建Player
。
如何实现这一目标?我认为User
类可以从Player
继承,所以使用Player
的受保护构造函数就可以了。但是,你知道,这最终是奇怪的。我们希望从Player
继承User
,而不是相反。
类的伪代码(由AndyG建议):
class User {
String username
String password
func createPlayer(type: GameType, owner: Game) {
var player = Player(type: type, owner: owner)
return player
}
}
class Player {
private(set) Game owner
private(set) GameType type
Set<Weapon> loadout
UInt kills
UInt deaths
init(type: GameType, owner: Game) {
self.type = type
self.owner = owner
}
}
用法:
var user = User() // consider this gives you user
var game = Game() // consider there is a game
var player = user.createPlayer(.Deathmatch, game) // the way we should create it
var anotherPlayer = Player(.Deathmatch, game) // oops, compiler error.
答案 0 :(得分:1)
您将Player的构造函数设为私有,并且Player声明User为朋友。然后createPlayer可以正常调用Player的构造函数,但没有其他类可以。尽量不要为玩家宣布任何其他朋友,在某些情况下使用朋友是好的,但过度使用通常是一个不好的迹象。