반응형
https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4
[기본]
1.인터페이스
=>기능부와 구현부를 분리할수 있도록 제공
=>어떠한 기능을 호출할수 있도록 제공
2.델리게이트
=>특정객체에 기능을 사용하기 위해 다른객체의 기능을 호출하여
책임을 위임할수 있다.
public class AObj {
AInterfacee aInterfacee;
public AObj(){
aInterfacee=new AinterfaceImpl();
}
//다른객체에 기능을 떠넘기다 :델리게이트
public void funcAA(){
aInterfacee.funcA();
aInterfacee.funcA();
}
}
public class Main {
public static void main(String[] args){
/*
AInterfacee aInterfacee= new AinterfaceImpl();
aInterfacee.funcA(); //기능에 대해 통로준비.
*/
AObj aObj=new AObj();
aObj.funcAA();
}
}
public class AinterfaceImpl implements AInterfacee {
@Override
public void funcA() {
System.out.println("AAA");
}
}
[전략패턴의 개념]
여러가지 알고리즘을 하나의 추상적인 접근(=인터페이스)을 만들어 접근접에서 서로 교환가능하도록 하는패턴
[실습]
게임캐릭터가 무기라는 전략을 가지고있고 그 무기를 통해서 공격을 들어가면, 그공격이 어떤 공격이냐에 따라 호출되는게 다르게 된다.
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();
}
}
//교환 가능한 무기
public interface Weapon {
public void attack();
}
public class Sword implements Weapon {
@Override
public void attack() {
System.out.println("돌공격");
}
}
public class Knife implements Weapon {
@Override
public void attack() {
System.out.println("칼공격");
}
}
public class GameCharacter {
Weapon weapon;//접근점 생성
//교환 가능
public void setWeapon(Weapon weapon){
this.weapon=weapon;
}
public void attack(){
//델리게이트: weapon이 알아서 할꺼임. 특정객체의 기능이 다른객체의기능을 이용하는 기능
if(weapon==null){
System.out.println("맨손공격");
}
else {
weapon.attack();
}
}
}
맨손공격
칼공격
돌공격
반응형
'객체지향' 카테고리의 다른 글
[디자인패턴]Template Method Pattern (0) | 2022.03.27 |
---|---|
[디자인 패턴]AdapterPattern (0) | 2022.03.27 |
Exception (0) | 2021.06.01 |
추상화와 인터페이스 (0) | 2018.08.23 |
객체지향 알아 둘 것 (0) | 2018.03.27 |