출처 : 이야기'sG님 유튜브
여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서
서로 교환 가능하도록 하는 패턴.
키보드나 디스플레이 따위처럼 사람과 컴퓨터를 연결하는 장치
기능에 대한 선언과 구현 분리
기능을 사용하는 통로
public interface Ainterface {
//기능에 선언
public void funcA();
}
public class AinterfaceImpl implements Ainterface{
@Override
public void funcA() {
System.out.println("AAA");
}
}
A인터페이스에 기능을 선언하고 그 기능을 구현하는 클래스를 만들어서 구현을 해줌.
public class Main {
public static void main(String[] args) {
System.out.println("hello");
Ainterface ainterface = new AinterfaceImpl();
//통로
ainterface.funcA();
AObject aObject = new AObject();
aObject.funcAA();
}
}
main 클래스에서 사용할 수 있다
위임하다(떠넘기다)
특정 객체의 기능을 사용하기 위해 다른 객체의 기능을 호출하는 것.
public class AObject {
Ainterface ainterface;
public AObject() {
ainterface = new AinterfaceImpl();
}
public void funcAA() {
//다른 객체 기능을 빌려서 사용 하는 것 : 위임한다
ainterface.funcA();
ainterface.funcA();
//System.out.println("AAA");
//System.out.println("AAA");
// ~ 기능이 필요합니다. 개발해주세요
}
}
public interface Weapon {
public void attack();
}
public class Knife implements Weapon{
@Override
public void attack() {
System.out.println("칼 공격");
}
}
public class Sword implements Weapon{
@Override
public void attack() {
System.out.println("검 공격");
}
}
public class Ax implements Weapon{
@Override
public void attack() {
System.out.println("도끼 공격");
}
}
public class GameCharacter {
//접근점
private Weapon weapon;
//교환 가능
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void attack() {
if (weapon == null) {
System.out.println("맨손 공격");
}else{
//델리 게이트
weapon.attack();
}
}
}
public class Main {
public static void main(String[] args) {
GameCharacter character = new GameCharacter();
character.attack();
character.setWeapon(new Knife());
character.attack();
character.setWeapon(new Sword());
character.attack();
character.setWeapon(new Ax());
character.attack();
}
}