- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读著名的破解编码面试书,现在我正在阅读关于 OOD(面向对象设计)的一章,其中包含这个问题:
design the data structures for a generic deck of cards. Explain how you would subclass the data structures to implement blackjack.
我想在这里向您展示一段我不太理解的代码:
public enum Suit {
Club (0),
Diamond (1),
Heart (2),
Spade (3);
private int value;
private Suit(int v) {
value = v;
}
public int getValue() {
return value;
}
public static Suit getSuitFromValue(int value) {
switch (value) {
case 0:
return Suit.Club;
case 1:
return Suit.Diamond;
case 2:
return Suit.Heart;
case 3:
return Suit.Spade;
default:
return null;
}
}
}
我发现了解设计模式,并且在代码中识别它们时遇到了一些困难。但是,当我们看到像本例这样的私有(private)构造函数时,它绝对意味着我们想要实现单例模式以拥有此类的唯一实例,不是吗?我认为这是合乎逻辑的,因为在一副牌中,我们每种类型只有一套套装(钻石、心形……)。
所以,如果(我不知道是否还有另一种情况,构造函数是私有(private)的),这个类是一个单例:
如果您能帮助我更好地理解这些要点,谢谢
最佳答案
枚举与 Java 中的类不同。它们具有比类更具限制性的特殊用途。
构造函数在枚举中是私有(private)的原因是因为与实例关联的值应该是预定义的。当您需要表示一组固定的常量(例如一周中的几天)时,枚举非常有用。您可以在编译时定义这些值,然后仅通过名称(MONDAY、TUESDAY 等)引用它们。
如果构造函数是公共(public)的,那么使用您的代码的人可能会在运行时发明自己的 Suit。这肯定会违反二十一点的标准规则,并给任何玩游戏的人带来错误。
在编译时将值分配给 Suits 可以增加编译时检查,避免因传入无效常量而产生错误,并且还记录允许的值。
示例中的静态方法是一个方便的实用程序,用于将整数转换为其相应的 Suit,但不是 Enum 的要求。
上面的类是线程安全的,并且枚举的创建也是线程安全的,因为它们是在枚举由 JVM“类加载”时初始化的,但您仍然可以在枚举中创建非线程安全的方法。
关于java - 一个单例类来设计一副通用的牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37363008/
我正在尝试模拟“发现它!”的套牌用 Python 制作的卡片。对于那些不知道什么是“Spot it!”的人is- 这是一种流行的纸牌游戏,一副牌有 55 张牌,每张牌上有 8 个随机符号(例如球、波浪
我目前正在尝试解决与其他人编写的程序相关的问题,该程序使用 Jackcess 版本 1.1.8 将信息写入 Access 数据库。在向给定 Access 表添加 400 万行的运行中,出现以下异常:
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我是一名优秀的程序员,十分优秀!