gpt4 book ai didi

java - 这两副牌设计模式中哪一种更稳定/更受欢迎?

转载 作者:行者123 更新时间:2023-12-01 12:30:27 25 4
gpt4 key购买 nike

我正在学习 OOP 概念,这是我之前问题的延续。为了练习,我正在设计一副纸牌。我心中有两种模式

public interface ISuit {
String getLogo();
String getName();
}

public class Card {
ISuit suit;
Integer n;

public Card(ISuit suit, Integer n) {
this.suit = suit;
this.n = n;
}

void setSuit(ISuit suit){
this.suit = suit;
}

void display(){
System.out.println(suit.getName()+","+n);
}
}

第二种模式

public interface Icard<T extends ISuit> {
T getSuit();
String getNumber();
}



public class Queen<E extends ISuit> implements Icard<E> {
Class<E> clazz;


public Queen(Class<E> clazz) {
this.clazz = clazz;
}

@Override
public String getNumber() {
return "12";
}

@Override
public E getSuit() {
try {
return clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}

}

显然,第一个更直观、更直接。在那里,我将 52 张具有正确花色的卡片对象,数字作为参数。
在第二个设计中,我将为每个牌索引创建 13 个类,然后用正确的花色实例化它们。将来,如果有新的索引,我可以创建一个扩展 Icard 的新类。

作为一个新手,我不知道第二种设计是否有任何缺点,或者我是否违反了任何设计原则。

有人可以帮我解决这个问题吗?

最佳答案

52 个类别(如果你想包括 clown 则为 54 个类别)极端。如果您想要另一种构造来表示特定花色,则可以使用一个或两个类轻松完成此任务。

这样想吧。卡片实际上是由什么组成的?

  • 西装
  • 面值
  • 其正确名称(即 10 of Clubs)

如果我们想进一步分解它,我们可以说花色永远只是四种值之一 - 黑桃、梅花、红心和方 block - 这很适合枚举。

不同纸牌游戏的面值各不相同,并且根据您想要如何表示 Ace,它可以是套装中值(value)最高的牌,也可以是套装中值(value)最低的牌。您需要一些特殊的行为来实现您想要的面值。

我首先看到两个类 - 一个用于 Card,它定义了我们关心的所有元数据的基本容器,另一个用于 Suit 的枚举,它定义了我们支持四种基本花色。

对于 clown 支持,您可以将 clown 视为红色或黑色(并且您可以选择合适的红色/黑色套装来遵循),或者保留套装未定义。这又因您实际玩的纸牌游戏类型而异,但考虑这一点很重要。

关于java - 这两副牌设计模式中哪一种更稳定/更受欢迎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25957509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com