这是关于赌博的简单情况。
有一个赌徒和骰子。
赌徒可以掷骰子,然后骰子值会改变
对于上述情况,我创建了这个类图
如上图所示
赌徒可以掷骰子,它是在Gambler.roll()
方法中实现的
赌徒掷骰子时,骰子值正在改变,它是通过Dice.roll()
方法实现的
使用Java代码实现上述情况,如下所示 请注意此代码为伪代码,语法可能错误
class Gambler{
private Dice dice;
Gambler(Dice dice){
this.dice = dice;
}
public void roll(){
dice.roll();//delegation call
}
}
/* --------------------------- */
import java.util.Random;
class Dice{
private int faceValue;
public int getFaceValue(){
return faceValue;
}
public void roll(){
//get random value between 1 ,6
Random random = new Random();
this.faceValue = random.nextInt((6 - 1) + 1) + 1;
}
}
我想知道
我的实现是否遵循OOAD最佳实践,并且没有违反封装?
特别是在委托将骰子从Gambler
滚动到Dice
类时
Gambler
是否有roll()
方法正确吗?
答案 0 :(得分:2)
您的设计基本上是正确的。唯一的问题是const util = require("util");
// Imports the Google Cloud client library
const monitoring = require("@google-cloud/monitoring");
// Your Google Cloud Platform project ID
const projectId = "<YOUR PROJECT ID>";
// Creates a client
const client = new monitoring.MetricServiceClient({
keyFilename: "<YOUR CREDENTIALS>"
});
// list of metrics also avaliable at https://cloud.google.com/monitoring/api/metrics_gcp#gcp-cloudfunctions
// list all metrics avaliable
client
.listMetricDescriptors({
// name: `projects/${projectId}/monitoredResourceDescriptors/cloud_function`,
name: `projects/${projectId}`,
filter: 'metric.type = starts_with("cloudfunctions.googleapis.com")'
})
.then(results => {
console.log(results);
})
.catch(err => {
console.error("ERROR:", err);
});
const currentTime = new Date();
endTime = currentTime.toISOString();
startTime = new Date(currentTime - 1 * 60 * 60 * 1000).toISOString();
interval = {
startTime: {
// Limit results to the last 20 minutes
seconds: Date.now() / 1000 - 60 * 60
},
endTime: {
seconds: Date.now() / 1000
}
};
// get the executions accross time
client
.listTimeSeries({
name: `projects/${projectId}`,
filter:
'metric.type = "cloudfunctions.googleapis.com/function/execution_count" AND resource.label.function_name = "<YOUR FUNCTION NAME>"',
view: "FULL",
interval
})
.then(results => {
// console.log(results);
console.log(util.inspect(results, { showHidden: true, depth: 5 }));
})
.catch(err => {
console.error("ERROR:", err);
});
属性前面缺少了-
。我不确定缺少的指标是否默认为某种东西(乍一看找不到和指示)。无论如何,您应该添加它以使其明确。
此外,faceValue
应该重命名为Dice
(单数)。
最后(更深入地研究代码),您需要一个包含2个元素而不是一个Die
的{{1}}数组,并且需要掷两个骰子。
答案 1 :(得分:0)
我认为骰子不是赌徒的一部分,赌徒只有掷骰子的行为。我认为下面的实现会更好:
class Gambler{
//some field
public int roll(Dice dice){
return dice.roll();
}
}
/* --------------------------- */
import java.util.Random;
class Dice{
private int[] values = new int[]{1,2,3,4,5,6};
public int roll(){
//get random value between 1 ,6
Random random = new Random();
return values[random.nextInt((6 - 1) + 1) + 1];
}
}
当然,这取决于实际需求。