이번에 할 것은 인터페이스를 이용하여 스트레티지 패턴을 더욱 간단하게 사용하는 것이다. 인터페이스를 만들어 인터페이스를 구현하는 클래스를 이용해 코드를 간략화 하였다. 19강에 스트레티지 패턴과 코드가 거의 비슷하다.
package com.Airplaneinter;
public interface Fly {
public void fly();
}
package com.Airplaneinter;
public class Flyfast implements Fly{
public void fly() {
System.out.println("빨리 납니다.");
}
}
package com.Airplaneinter;
public class Flyslow implements Fly {
public void fly() {
System.out.println("느리게 납니다.");
}
}
package com.Airplaneinter;
public interface Missile {
public void missile();
}
package com.Airplaneinter;
public class MissileYes implements Missile{
public void missile() {
System.out.println("미사일을 쏩니다.");
}
}
package com.Airplaneinter;
public class MissileNo implements Missile{
public void missile() {
System.out.println("미사일을 못 쏩니다.");
}
}
package com.Airplaneinter;
public interface Raider {
public void raider();
}
package com.Airplaneinter;
public class RaiderYes implements Raider{
public void raider() {
System.out.println("레이더가 있습니다.");
}
}
package com.Airplaneinter;
public class RaiderNo implements Raider{
public void raider() {
System.out.println("레이더가 없습니다.");
}
}
package com.Airplanex;
import com.Airplaneinter.*;
public abstract class Airplane {
Fly f;
Missile m;
Raider r;
public Airplane() {}
public abstract void Shape(); //가상 함수
//매개변수로 객체타입을 인터페이스 이름으로 받는다.
public void setF(Fly f) {
this.f = f;
}
public void setM(Missile m) {
this.m = m;
}
public void setR(Raider r) {
this.r = r;
}
//인터페이스로 만든 객체의 함수를 실행
public void actionFly() {
this.f.fly();
}
public void actionMissile() {
this.m.missile();
}
public void actionRaidder() {
this.r.raider();
}
}
package com.Airplanex;
public class A_Plane extends Airplane {
public A_Plane() {
System.out.println("A비행기 입니다.");
}
public void Shape() {
System.out.println("미사일이 있고 레이더가 있습니다.");
}
}
package com.Airplanex;
public class B_Plane extends Airplane {
public B_Plane() {
System.out.println("B비행기 입니다.");
}
public void Shape() {
System.out.println("미사일은 없고 레이더는 있습니다.");
}
}
package com.Airplanex;
public class C_Plane extends Airplane {
public C_Plane() {
System.out.println("C비행기 입니다.");
}
public void Shape() {
System.out.println("미사일도 없고 레이더도 없습니다.");
}
}
package com.Airplanex;
import com.Airplaneinter.*;
public class Main {
public static void main(String[] args) {
System.out.println("-A비행기 제작-");
Airplane Ap = new A_Plane();
Ap.setF(new Flyfast());
Ap.setM(new MissileYes());
Ap.setR(new RaiderYes());
Ap.Shape();
Ap.actionFly();
Ap.actionMissile();
Ap.actionRaidder();
System.out.println();
System.out.println("-B비행기 제작-");
Airplane Bp = new B_Plane();
Bp.setF(new Flyfast());
Bp.setM(new MissileNo());
Bp.setR(new RaiderYes());
Bp.Shape();
Bp.actionFly();
Bp.actionMissile();
Bp.actionRaidder();
System.out.println();
System.out.println("-C비행기 제작-");
Airplane Cp = new C_Plane();
Cp.setF(new Flyslow());
Cp.setM(new MissileNo());
Cp.setR(new RaiderNo());
Cp.Shape();
Cp.actionFly();
Cp.actionMissile();
Cp.actionRaidder();
}
}'자바' 카테고리의 다른 글
| 22.API(Calendar) (0) | 2019.08.05 |
|---|---|
| 21. API(String) (0) | 2019.08.05 |
| 19. 패턴을 이용한 객체 지향 이해하기(스트레티지) (0) | 2019.07.31 |
| 18. 패턴을 이용한 객체 지향 이해하기(싱글톤) (0) | 2019.07.30 |
| 17. 다중 구현 (0) | 2019.07.29 |