设计模式:哪种UML关系最能描述这个类?

时间:2016-08-03 05:55:25

标签: design-patterns uml notation

鉴于以下课程:

public class CardGame extends Game {
    private CardDeck[] cardDecks;
    public CardGame(int numCardDecks) {
        super();
        cardDecks = new CardDeck[numCardDecks];
        for (int i=0; i < numCardDecks; i ++) {
            cardDecks[i] = new CardDeck();
        }
    }
}

哪个UML关系最能描述这个类? (为什么?)
     - 聚合      - 作文      - 概括      - 工厂

注意:我认为这个单选测试问题本身并没有明确定义。

2 个答案:

答案 0 :(得分:3)

聚合,组合和泛化是UML(类图)符号,表示不同类型的关系,即逻辑连接的类型。

在你的情况下,“游戏”是“CardGame”的概括; 'CardGame是'游戏'的专长。我想说,在你的情况下,'CardDecks'与你的'Cardgame'有一个组合关系,因为你的卡是在'CardGame'类中创建的,如果你删除'CardGame'即会删除,即“暗示一个关系子女不能独立于父母“(What is the difference between aggregation, composition and dependency?)而存在。但是如果你将特定的'CardDecks'存储在一个数据库中,或者如果你想在现实世界中建模你可以在另一个游戏中使用这些卡,那么它就是聚合。您的CardDeck类是一个“工厂方法”,因为它是一个创建对象的类。

我不认为这应该归类为设计模式,因为它必须是设计模式,必须描述软件设计中常见问题的重复解决方案。

“在软件工程中,设计模式是软件设计中常见问题的一般可重复解决方案。设计模式不是可以直接转换为代码的完成设计。它是如何描述或模板的解决可以在许多不同情况下使用的问题。“ (https://sourcemaking.com/design_patterns

答案 1 :(得分:3)

CardGame一般化CardGame,因为cardDecks来自它。

我认为CardDeckCardGame的组合,因为CardGame控制了它们的生命周期,并且在此代码的上下文中,它们只能属于// Saving it to documents direcctory NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDirectory = [directoryPaths objectAtIndex:0]; NSString* filePath = [documentDirectory stringByAppendingPathComponent:@"FileName.png"]; NSData *imageData = // Some Image data; NSURL *url = [NSURL fileURLWithPath:filePath]; if ([imageData writeToURL:url atomically:YES]) { NSLog(@"Success"); } else{ NSLog(@"Error"); } $order->getShippingIncTax() 1}}。