在这种情况下我应该使用聚合吗?

时间:2013-05-21 12:27:11

标签: oop aggregation

如果我有一个名为Payment的类,它是另一个名为Card的类的超类,我如何将该类加入另一个验证卡是否有效的类。 我的UML图是这样的:

Payment<---------Card

我想过两种方法,但我想知道哪一种方法是正确的:

1)带有关联的模型,以检查信用卡是否有效,但不将其加入paymentCard:

Card_list---1--------------1*---<>Card

所以在我的课程卡片中,我称之为:

class paymentCard extends Payment
{
     public authorized()        ---abstract method
     {
          if card.verified(card_number) return true;     ---here I call the card class
          else return false;
     }
}

2)我已经读过我可以使用聚合,但我有点怀疑如何使用它:

class paymentCard extends Payment
{
          Card creditcard                  //aggregation
          public authorized()
          {
               creditcard=new Card(numberCard)
               if creditcard.verified() return true;
               else return false;
          }
 }

两种形式中的哪一种更好?对我来说,第一个看起来像对外部类的查询,也可以是数据库,而第二个我不太确定它

有任何评论吗?

2 个答案:

答案 0 :(得分:1)

有一天,您可能想要其他付款方式。

IMO,付款有pay_method,可以是ByCard,By ...,所以:

class Payment
{
    protected PaymentMethodoption;
}

abstract class PaymentMethod
{
    public abstract bool authorized();
}

class PaymentByCreditCard : PaymentMethod
{
    public override bool authorized() { return card.verified(card_number); }
}

答案 1 :(得分:0)

嗯,你基本上回答了自己的问题。关键问题是:创建信用卡对象的成本有多高?可能不只是像你在第二个例子中那样传递一个数字,这意味着你可能会将它们存储在其他地方。