C ++类中的工厂依赖

时间:2016-01-11 22:36:11

标签: c++ design-patterns

考虑有两个类,名为UserPlayer。从表面上看,这些类是指游戏中的用户(帐户)和玩家的玩家。每个用户都有一个玩家,而每个玩家可以由单个用户拥有。

当用户想要加入游戏时,会创建一个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.

1 个答案:

答案 0 :(得分:1)

您将Player的构造函数设为私有,并且Player声明User为朋友。然后createPlayer可以正常调用Player的构造函数,但没有其他类可以。尽量不要为玩家宣布任何其他朋友,在某些情况下使用朋友是好的,但过度使用通常是一个不好的迹象。