본문 바로가기

자바

20. 패턴을 이용한 객체 지향 이해하기(인터페이스를 활용한 스트레티지)

이번에 할 것은 인터페이스를 이용하여 스트레티지 패턴을 더욱 간단하게 사용하는 것이다. 인터페이스를 만들어 인터페이스를 구현하는 클래스를 이용해 코드를 간략화 하였다. 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