package ex05.ch04;
class Protoss {
int getHp() {
return 3842;
}
int getPower() {
return 3842;
}
void setHp(int hp) {
}
void setPower(int power) {
}
void attack(Protoss unit) {
}
}
class River extends Protoss {
int hp;
int power;
public River() {
this.hp = 100;
this.power = 50;
}
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
// 기존 오브젝트 수정
public void attack(Protoss unit) {
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
class Dragoon extends Protoss {
int hp;
int power;
public Dragoon() {
this.hp = 100;
this.power = 10;
}
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
// 기존 오브젝트 수정
public void attack(Protoss unit) {
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
// Close
class Zealot extends Protoss { // 추상화
int hp;
int power;
public Zealot() {
this.hp = 100;
this.power = 20;
}
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
// 기존 오브젝트 수정
public void attack(Protoss unit) {
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
// Open
class DarkTempler extends Protoss {
int hp;
int power;
public DarkTempler() {
this.hp = 100;
this.power = 20;
}
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
// 기존 오브젝트 수정
public void attack(Protoss unit) { //DIP
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
public class StarGame {
public static void main(String[] args) {
Protoss z1 = new Zealot();
Protoss z2 = new Zealot();
Protoss d1 = new Dragoon();
z1.attack(d1);
System.out.println(d1.getHp()); // 80
z1.attack(z2);
System.out.println(z2.getHp()); // 80
}
}

Share article