使用合成时如何从合成的到达主要class?
How to reach main class from composed ones when using composition?
我正在使用 classes 的组合。主 class 包含另外 2 个 class。我的问题是如何从组合的 classes 到达我的主要 class?可能有哪些方法?
例如。我们有机器 class,里面有 2 个设备。所有 3 classes 都有一个布尔状态是否激活。我们可以打开设备。任务是:当两个设备都打开时,THEN 机器状态处于活动状态。
可以使用什么方法来实现这种行为?
public class Machine {
private boolean active;
private Device1 device1;
private Device2 device2;
public Machine(Device1 device1, Device2 device2) {
this.device1 = device1;
this.device2 = device2;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public Device1 getDevice1() {
return device1;
}
public Device2 getDevice2() {
return device2;
}
}
public class Device1 {
private boolean active;
public void turnOn(){
// should check the state of another device and change machine state if necessary
this.active = true;
}
}
public class Device2 {
private boolean active;
public void turnOn(){
this.active = true;
// should check the state of another device and change machine state if necessary
}
}
public class App {
public static void main(String[] args) {
Device1 device1 = new Device1();
Device2 device2 = new Device2();
Machine machine = new Machine(device1, device2);
machine.getDevice1().turnOn();
machine.getDevice2().turnOn();
boolean active = machine.isActive(); // should be true
System.out.println(active);
}
}
打开两个设备后,机器活动状态应为 true。如何实现?
如果我理解你的问题,机器内部的方法应该是这样的。
public boolean isActive() {
this.active = device1.isActive() && device2.isActive()
return this.active;
}
您必须检查是否所有定义的设备都已打开。需要明确的是,每个设备都应该有一个状态,描述在关闭关闭打开后是否处于活动状态。
最简单的解决方案是这样做:
public boolean isActive() {
if (device1 == null || device2 == null) return false;
return device1.isActive() && device2.isActive();
}
您可能会考虑为您的设备使用 Abstract 类 或让您的设备扩展机器。然后可以有一个机器列表并独立检查每台机器的活动状态。
一种方法可能是在 Machine class 中没有 isActive 布尔状态,而只有如下所示的 isActive 方法:
public boolean isActive(){
return device1.isActive() && device2.isActive();
}
我正在使用 classes 的组合。主 class 包含另外 2 个 class。我的问题是如何从组合的 classes 到达我的主要 class?可能有哪些方法?
例如。我们有机器 class,里面有 2 个设备。所有 3 classes 都有一个布尔状态是否激活。我们可以打开设备。任务是:当两个设备都打开时,THEN 机器状态处于活动状态。 可以使用什么方法来实现这种行为?
public class Machine {
private boolean active;
private Device1 device1;
private Device2 device2;
public Machine(Device1 device1, Device2 device2) {
this.device1 = device1;
this.device2 = device2;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public Device1 getDevice1() {
return device1;
}
public Device2 getDevice2() {
return device2;
}
}
public class Device1 {
private boolean active;
public void turnOn(){
// should check the state of another device and change machine state if necessary
this.active = true;
}
}
public class Device2 {
private boolean active;
public void turnOn(){
this.active = true;
// should check the state of another device and change machine state if necessary
}
}
public class App {
public static void main(String[] args) {
Device1 device1 = new Device1();
Device2 device2 = new Device2();
Machine machine = new Machine(device1, device2);
machine.getDevice1().turnOn();
machine.getDevice2().turnOn();
boolean active = machine.isActive(); // should be true
System.out.println(active);
}
}
打开两个设备后,机器活动状态应为 true。如何实现?
如果我理解你的问题,机器内部的方法应该是这样的。
public boolean isActive() {
this.active = device1.isActive() && device2.isActive()
return this.active;
}
您必须检查是否所有定义的设备都已打开。需要明确的是,每个设备都应该有一个状态,描述在关闭关闭打开后是否处于活动状态。
最简单的解决方案是这样做:
public boolean isActive() {
if (device1 == null || device2 == null) return false;
return device1.isActive() && device2.isActive();
}
您可能会考虑为您的设备使用 Abstract 类 或让您的设备扩展机器。然后可以有一个机器列表并独立检查每台机器的活动状态。
一种方法可能是在 Machine class 中没有 isActive 布尔状态,而只有如下所示的 isActive 方法:
public boolean isActive(){
return device1.isActive() && device2.isActive();
}