[헤드퍼스트 디자인패턴] 54쪽 오리코드 테스트
파일명 | 용도/특징 |
Duck.java | 슈퍼클래스(추상클래스) |
MallardDuck.java | 서브클래스 |
FlyBehavior.java | 인터페이스 |
FlyNoWay.java | 행동구현 클래스 |
FlyWithWings.java | 행동구현 클래스 |
QuackBehavior.java |
인터페이스 |
MuteQuack.java | 행동구현 클래스 |
Squeak.java | 행동구현 클래스 |
MiniDuckSimulator.java | 클래스 |
Duck.java
public abstract class Duck { //슈퍼(부모)클래스가 될 클래스
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
//행동 인터페이스 형식의 레퍼런스 변수 2개를 선언합니다.
//같은 패키지에 속하는 모든 서브클래스에서 이 변수를 상속 받습니다.
public Duck() {}
public abstract void display(); //추상 메소드 (모든 오리의 형태가 다르므로 추상메소드로 선언)
public void performFly() {
flyBehavior.fly(); //행동 클래스에 위임한다
}
public void performQuack() {
quackBehavior.quack(); //행동 클래스에 위임한다
}
public void swim() {
System.out.println("모든 오리는 물에 뜹니다. 가짜 오리도 뜨죠.");
}
}
MallardDuck.Java (Duck 클래스의 서브클래스)
public class MallardDuck extends Duck { //Duck 클래스를 상속받는다
public MallardDuck() {
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public void display() {
System.out.println("저는 물오리 입니다.");
}
}
FlyBehavior.java (인터페이스)
public interface FlyBehavior {
public void fly();
}
FlyNoWay.java (FlyBehavior 인터페이스의 행동 구현 클래스)
public class FlyNoWay implements FlyBehavior{
public void fly() {
System.out.println("저는 못 날아요.");
}
}
FlyWithWings.java (FlyBehavior 인터페이스의 행동 구현 클래스)
public class FlyWithWings implements FlyBehavior {
public void fly() {
System.out.println("날고 있어요!");
}
}
QuackBehavior.java (인터페이스)
public interface QuackBehavior {
public void quack();
}
Quack.java (QuackBehavior 인터페이스의 행동구현 클래스)
public class Quack implements QuackBehavior{
public void quack() {
System.out.println("꽥");
}
}
MuteQuack.java (QuackBehavior 인터페이스의 행동구현 클래스)
public class MuteQuack implements QuackBehavior{
public void quack() {
System.out.println("조용~");
}
}
Squeak.java (QuackBehavior 인터페이스의 행동구현 클래스)
public class Squeak implements QuackBehavior{
public void quack() {
System.out.println("삑");
}
}
MiniDuckSimulator.java (작성한 클래스들 테스트)
public class MiniDuckSimulator {
public static void main(String[] args) {
Duck mallard = new MallardDuck(); //객체생성
mallard.performQuack();
mallard.performFly();
}
}