본문 바로가기

JAVA/기초 프로그래밍

팩토리// 무기, 폭탄 사용게임

형태 참고

1.

1-1. Weapon 인터페이스에 무기사용 메서드 생성

-> 아래 Gun과 Sword(검) 상속으로 오버라이딩에 무기 종류 출력

1-2. Bomb 인터페이스에 폭탄투여 메서드 생성

-> 아래 Dynamite와 C4 상속으로 오버라이딩에 폭탄 종류 출력

 

2. Abstract Item 인터페이스 생성 후 Weapon의 무기1, Bomb의 폭탄1 저장하여 무기를 사용할지, 폭탄을 사용할지 선택 할 수 있게 두가지 메서드를 생성해 놓음

 

3. Person 클래스에서 무기, 변수 생성 후 Create라는 메서드를 통해 Abstract를 입력받아 Atype/Btype을 선택 할 수 있도록 매개변수 AbstractItem ai를 입력받는다. (메서드 속 처리는 AbstracItem의 함수 호출을 받는 변수 생성-> 메인에서 쓰임)

A/Btype 선택을 통해 return 값을 return new Dynamite(); 와 같이 지정해주어 Dynamite속 출력 메서드가 호출되게 해준다.

 

4. Main 에서 Person 객체 char1생성 후 

char1.create(new 타입종류); 선택 후 

무기 사용일지 폭탄사용일지 정해준다

 

 

 

 

 

main

public class mainClass {
	public static void main(String[] args) {
		
		Person char1 = new Person();
		char1.create(new Atype());//A/B 클래스 타입에 따라 실행되는게 다름
		
		char1.m_Weapon.drawWeapon();
		char1.m_Bomb.drawBomb();
		//무기 : Gun
		//폭탄 : C4
		
		Person char2 = new Person();
		char2.create(new Btype());
		
		char2.m_Bomb.drawBomb();
		char2.m_Weapon.drawWeapon();
		//폭탄 : Dynamite
		//무기 : Sword
	}
}

Weapon

public interface Weapon {
	public void drawWeapon();
}

Gun

public class Gun implements Weapon {

	@Override
	public void drawWeapon() {
		System.out.println("무기 : Gun");
	}
}

Sword

public class Sword implements Weapon {

	@Override
	public void drawWeapon() {
		System.out.println("무기 : Sword");
	}
}

 

 


 

 

Bomb

public interface Bomb {
	public void drawBomb();
}

C4

public class C4 implements Bomb {

	@Override
	public void drawBomb() {
		System.out.println("폭탄 : C4");
	}
}

Dynamite

public class Dynamite implements Bomb {

	@Override
	public void drawBomb() {
		System.out.println("폭탄 : Dynamite");
	}
}

 


 

 

 

AbstractItem

public interface AbstractItem {

	public Weapon createWeapon();
	public Bomb createBomb();
}

 

Atype

public class Atype implements AbstractItem {

	@Override
	public Weapon createWeapon() {
		return new Gun();
	}
	@Override
	public Bomb createBomb() {
		return new C4();
	}
}

Btype

public class Btype implements AbstractItem {

	@Override
	public Weapon createWeapon() {
		return new Sword();
	}

	@Override
	public Bomb createBomb() {
		return new Dynamite();
	}
}

 

 


Person

public class Person {

	public Weapon m_Weapon;
	public Bomb m_Bomb;
	
	public void create(AbstractItem ai) {//매개변수에 들어가는 클래스의 타입에 따라  A/B에서 실행될지 결정됨
		//메인의 char1객체의 create(매개변수 f)호출부분
		
		m_Weapon = ai.createWeapon();
		m_Bomb = ai.createBomb();
	}
}