*Strategy Pattern: ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ ์ถ์์ ์ธ ์ ๊ทผ์ (์ธํฐํ์ด์ค)์ ๋ง๋ค์ด์ ์ ๊ทผ์ ์์ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ก ๊ตํ ๊ฐ๋ฅํ๋๋ก ํ๋ ํจํด
*์ฌ์ฉ ์: ์๋ ๋ฌธ์์์ ํ๋ฆฐํฐ, ํฐํธ ์ฌ์ฉ. ์ด๋ค ๊ธฐ์ข ์ ํ๋ฆฐํธ๋๋ผ๋ 'Print' ๋ฒํผ๋ง ๋๋ฅด๋ฉด ๋๊ฐ์ด ๋์ํจ.
๊ฒ์ ์บ๋ฆญํฐ์ ๋ฌด๊ธฐ(๊ต์ฒด ํ) ์ฌ์ฉ. ์ด๋ค ๋ฌด๊ธฐ๋ผ๋ '๊ณต๊ฒฉ' ๋ฒํผ๋ง ๋๋ฅด๋ฉด ๊ณต๊ฒฉ ๋์์ ์ํํจ.
public class MyWeapon
{
//์ ๊ทผ์
private IWeapon weapon;
//๋ฌด๊ธฐ ์ฒด์ธ์ง
public void SetWeapon(IWeapon weapon)
{
this.weapon = weapon;
}
//๋ฌด๊ธฐ์ฌ์ฉ
public void Shoot()
{
weapon.Shoot();
}
}
IWeapon ์ธํฐํ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๋ MyWeapon ํด๋์ค๋ฅผ ๋ง๋ ๋ค.
MyWeapon ํด๋์ค์๋ SetWeapon ํจ์์ Shoot ํจ์๊ฐ ์๋ค.
SetWeapon ํจ์์ IWeapon ์ธํฐํ์ด์ค๊ฐ ์ธ์๋ก ์ฐ๊ฒฐ๋๋ค.
Shoot ํจ์๊ฐ ์คํ๋ ๋, IWeapon ์ธํฐํ์ด์ค์ Shoot ํจ์๊ฐ ์คํ๋๋ค.
//์ธํฐํ์ด์ค
public interface IWeapon
{
void Shoot();
}
using UnityEngine;
public class Arrow : IWeapon
{
public void Shoot()
{
Debug.Log("Arrow Attack");
}
}
์ธํฐํ์ด์ค์ ์๋ Shoot ํจ์๋ฅผ Arrow ํด๋์ค์์ ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํํจ.
using UnityEngine;
public class Bullet : IWeapon
{
public void Shoot()
{
Debug.Log("Bullet Attack");
}
}
์ธํฐํ์ด์ค์ ์๋ Shoot ํจ์๋ฅผ Bullet ํด๋์ค์์ ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํํจ.
using UnityEngine;
public class WeaponManager : MonoBehaviour
{
MyWeapon myWeapon;
private void Start()
{
myWeapon = new MyWeapon();
myWeapon.SetWeapon(new Bullet());
}
//๋ฌด๊ธฐ ๋ณ๊ฒฝ
public void ChangeBullet()
{
myWeapon.SetWeapon(new Bullet());
}
//๋ฌด๊ธฐ ๋ณ๊ฒฝ
public void ChangeArrow()
{
myWeapon.SetWeapon(new Arrow());
}
//๋ฌด๊ธฐ ์ฌ์ฉ
public void Attack()
{
myWeapon.Shoot();
}
}
Bullet, Arrow ๊ฐ์ฒด์ ๋ฒํผ์ ChangeBullet(), ChangeArrow() ํจ์์ ์ฐ๊ฒฐํ๋ค.
MyWeapon ํด๋์ค์ SetWeapon() ํจ์๊ฐ ์คํ๋ ๋, IWeapon ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด๋ค์ด ๊ฐ๊ฐ ์ ๋ฌ๋๋ค.(์ ๊ทผ์ )
Attack ๊ฐ์ฒด์ ๋ฒํผ์ ๋๋ฅด๋ฉด Attack() ํจ์๊ฐ ์คํ๋๊ณ ๋ฌด๊ธฐ์ ํด๋น๋๋ Shoot() ํจ์๊ฐ ์คํ๋๋ค.
์ฆ, ์ฌ์ฉ์๋ ๋จ์ง ๋ฌด๊ธฐ๋ฅผ ๋ฐ๊พธ๊ณ Attack() ๋ง ์คํํ๋ฉด ๊ฐ ๋ฌด๊ธฐ์ ํด๋นํ๋ ๊ณต๊ฒฉ์ ์ํํ ์ ์๋ค.
'๐ Computer Science > Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unity][๋์์ธ ํจํด] Simple Factory Pattern(์ฌํ ํฉํ ๋ฆฌ ํจํด) (0) | 2023.09.13 |
---|---|
[Unity][๋์์ธ ํจํด] Component Pattern (0) | 2023.09.12 |
[C#][Unity][๋์์ธ ํจํด] Command ํจํด (0) | 2023.09.05 |
[Unity][๋์์ธ ํจํด] Observer Pattern (0) | 2023.09.03 |