Design Pattern - Strategy Pattern 디자인 패턴 - 전략 패턴 _ Unity c#으로 적용


전략패턴(strategy pattern) - 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어 접근 점에서 서로 교환 가능하도록 하는 패턴.

인터페이스 - 사람과 컴퓨터를 연결하는 장치
- 기능에 대한 선언과 구현 분리
- 기능을 사용할 수 있는 통로
델리게이트 - 위임하다.


인터페이스
1
2
3
public interface IWeapon  {
    void Attack();
}
cs

Interface Implements1
1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Axe : MonoBehaviour , IWeapon{
    
    public void Attack()
    {
        Debug.Log("Attack Axe");
    }
    
}
cs

Interface Implements2
1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Sword : MonoBehaviour, IWeapon
{
 
    public void Attack()
    {
        Debug.Log("Attack Sword");
    }
}
 
cs
Interface Implements3
1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Knife : MonoBehaviour, IWeapon
{
 
    public void Attack()
    {
        Debug.Log("Attack Knife");
    }
}
 
cs
Character
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Character : MonoBehaviour {
 
    // 접근점
    private IWeapon weapon;
 
    // 교환 기능
    public void SetWeapon(IWeapon weapon)
    {
        this.weapon = weapon;
    }
 
    public void Attack()
    {
        if(weapon == null)
        {
            Debug.Log("맨손 공격");
        }
        else
        {
            // 델리게이트
            weapon.Attack();
        }
        
    }
}
 
cs

Main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Main : MonoBehaviour {
 
    // Use this for initialization
    void Start () {
        Character cha = new Character();
 
        cha.Attack();
 
        cha.SetWeapon(new Knife());
        cha.Attack();
 
        cha.SetWeapon(new Sword());
        cha.Attack();
 
        cha.SetWeapon(new Axe());
        cha.Attack();
    }
}
 
cs

결과


공부 : 인프런 - 자바 디자인 패턴의 이해 _ Gof Design Pattern

댓글