5. DIP
Dependency Inversion Principle (DIP; 의존관계 역전 원칙)
Dependency Inversion Principle (DIP; 의존관계 역전 원칙)
위반 사례

해결


전체 코드
Links
Last updated
class Lamp {
private Button button;
public void turnOn();
public void turnOff();
}interface Switchable {
void activate();
void deactivate();
}
class Lamp implements Switchable {
@Override public void activate() {
System.out.println("Lamp: turn on");
}
@Override public void deactivate() {
System.out.println("Lamp: turn off");
}
}abstract class Button {
private Switchable client;
public Button(Switchable client) {
this.client = client;
}
// detect its state and activate/deactivate
public void run() {
boolean isButtonOn = getState();
if (isButtonOn) {
client.activate();
} else {
client.deactivate();
}
}
abstract boolean getState();
}class ToggleButton extends Button {
private boolean isActive = false;
public ToggleButton(Switchable client) {
super(client);
}
// Unique method only for ToggleButton
public void toggle() {
this.isActive = !this.isActive;
}
@Override public boolean getState() {
return this.isActive;
}
}class Main {
public static void main(String[] args) {
ToggleButton lampButton = new ToggleButton(new Lamp());
lampButton.run();
lampButton.toggle();
lampButton.run();
}
}class Computer implements Switchable {
@Override public void activate() {
System.out.println("Computer: turn on");
}
@Override public void deactivate() {
System.out.println("Computer: turn off");
}
}
class Main {
public static void main(String[] args) {
ToggleButton computerButton = new ToggleButton(new Computer());
computerButton.run();
computerButton.toggle();
computerButton.run();
}
}