我决定使用Java构建类似于rpg的坚固游戏结构来练习设计模式。
基本上,我的游戏中存在不同类型的角色,这些角色均被视为“游戏对象”,具有一些共同的特征:
public abstract class Character extends GameObject {
Status status;
//fields, methods, etc.
}
public abstract class Monster extends Character{
//fields, methods, etc
}
public class Hero extends Character {
//fields, methods, etc
}
Run Code Online (Sandbox Code Playgroud)
这里的状态是一个枚举:
public enum Status {
NORMAL,
BURNT,
POISONED,
HEALED,
FROZEN
}
Run Code Online (Sandbox Code Playgroud)
我想使我的代码灵活,易于修改,并且我想有效地使用必要的设计模式来遵循SOLID原则。
假设我要自定义字符,允许创建自定义的字符扩展名,从而仅允许某些状态更改。例如,我将创建一个名为
public class FireGolem extends Monster{...}
Run Code Online (Sandbox Code Playgroud)
,它不会因热而损坏(因此无法燃烧)。
我有2个想法可以做到这一点:
1)为角色类创建一个Set,在其中我将指定角色可以进行哪种状态更改
2)创建不同的接口(Burnable,Freezable等),并在必要时实施它们。
你怎么看?哪个更好?为什么?有没有更好更好的选择?
先感谢您。
我正在努力接近理解溪流,因此我正在做一些基本的练习.在这一个中,我想计算奇数的平均值.我写这个算法是为了这样做,但是它给出了不正确的结果(8.0).我试图调试它,但我找不到它实际上做了什么.
List<Integer> numbers = Arrays.asList(1, 3, -2, -4, -7, -3, -8, 12, 19, 6, 9, 10, 14);
OptionalDouble result = numbers.stream()
.filter(i -> i % 2 == 1)
.mapToDouble(i -> i).average();
if (result.isPresent()) {
System.out.println(result);
} else {
System.out.println("Error");
}
Run Code Online (Sandbox Code Playgroud)
我的代码现在在做什么?我应该如何解决它做它应该做的事情?
让我们假设有一个Fox类,它有名字,颜色和年龄.让我们假设我有一个狐狸列表,我想打印出那些颜色为绿色的狐狸名字.我想用流来做这件事.
领域:
我编写了以下代码来进行过滤和Sysout:
foxes.stream().filter(fox -> fox.getColor().equals("green"))
.forEach(fox -> System.out::println (fox.getName()));
Run Code Online (Sandbox Code Playgroud)
但是,我的代码中存在一些语法问题.
问题是什么?我该如何解决?
我已经阅读了他对 Singleton 的基本 Java 实现,因为我将在我的课堂上介绍设计模式:
public final class ClassSingleton {
private static ClassSingleton INSTANCE;
private String info = "Initial info class";
private ClassSingleton() {
}
public static ClassSingleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new ClassSingleton();
}
return INSTANCE;
}
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
用过几次,对它很熟悉。然而,当我深入研究这个话题时,我发现这个版本根本不是线程安全的。
这究竟是什么意思?如果多个线程访问它并创建一个新实例,是否会创建更多不同的实例?或者“安全”在哪里不复存在?
感谢您提前回答。
我有一个练习要解决.我有一个Fox类,它有名字和颜色字段.我的练习是按颜色找出狐狸的频率.
因此我创建了一个HashMap,其中String属性将是狐狸名称,而Integer将是它本身的出现:
Map<String, Integer> freq = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
完成后,我一直在尝试用流编写代码,但我正在努力做到这一点.我写了这样的东西:
foxes.stream()
.map(Fox::getColor)
.forEach()
//...(continued later on);
Run Code Online (Sandbox Code Playgroud)
,其中狐狸是一个清单.
我的问题基本上是语法.如果颜色没有出现,我想做一些事情
freq.put(Fox::getName, 1)
Run Code Online (Sandbox Code Playgroud)
其他
freq.replace(Fox::getName, freq.get(Fox::getName) + 1)
Run Code Online (Sandbox Code Playgroud)
我该怎么把它放在一起?