生成52張牌 -- 工廠函數

# coding:utf-8

'''
    生成52張牌
'''


class Card:
    def __init__(self, rank, suit):
        self.rank = rank  # 牌面數字
        self.suit = suit  # 牌面花色


class AceCard(Card):
    pass


class NumberCard(Card):
    pass


class FaceCard(Card):
    pass


class Suit:
    """
        將花色生成常量清單進行緩存
    """
    def __init__(self, name, symlink):
        self.name = name
        self.symlink = symlink


# 花色常量,後續不需要在每次調用類生成
Club, Diamond, Heart, Spade = Suit('Club','1'), Suit('Diamond', '2'), Suit('Heart','3'), Suit('Spade', '4')


# 工廠函數
def build_card_factory(rank, suit):
    if rank == 1: return AceCard('A',suit)
    elif 1 < rank < 11: return NumberCard(str(rank),suit)
    elif 11 <= rank < 14:
        name = {'11':'J','12':'Q','13':'K'}[str(rank)]
        return FaceCard(name,suit)


if __name__ == "__main__":
    cards = [ build_card_factory(rank,suit) for rank in range(1,14) for suit in (Club,Diamond,Heart,Spade)]
    cards_detail = [ (card.rank,card.suit.name) for card in cards]
    print(cards_detail)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章