TypeObject Pattern?
- 클래스 하나를 인스턴스 별로 다른 객체형으로 표현할 수 있게 만들어, 새로운 클래스들을 유연하게 만들 수 있게 하는 방법.
예제
다양한 몬스터를 생성
- type Object calss 와 typed object class 정의
- type object object instance : 논리적으로 다른 타입을 의미
- typed object : 자신의 타입을 나타내는 타입 객체를 참조함.
기본적인 타입객체 패턴
public class Breed
{
private int _health;
private float _attack;
pubilc Breed(int health, float attack)
{
health = health;
_attack = attack;
}
}
public class Monster
{
private int _health;
private Breed _breed;
public Monster(Breed breed)
{
health = breed.Health;
breed = breed
}
}
팩토리 매서드 패턴을 활용하면?
public class Breed
{
public Monster()
{
return new Monster(this);
}
}
public class Monster
{
public Monster(Breed breed)
{
_health = breed.Health;
_breed = breed;
}
}
- 몬스터를 메모리에 올리기전에 이것저것 초기화 하거나 메모리를 불러오는 등의 관리를 할 수 있다!
더 나은 방법
이미 충분하지만, 몬스터가 수백마리일 때 여러 종족이 속성값을 공유할 수 있다면?
타입 객체 끼리의 상속 할 수 있는 시스템을 구현
class Brred { private Breed _parent; public Breed(Breed parent, int helath, float attack):_parent(parent) { _health = health; _attack = attack; } }
1. 상속 값을 요청 받을 때마다 동적으로 위임하는 방식
class Breed { public int GetHealth() { if(health != 0 || _parent ==null) { return _health; } return _parent.GetHealth(); } }
2. copy-down 위임
생성 시점에 상속을 적용하는 방법
pubic class Breed { public Breed(Breed parent, int health, float attack) { _health = health; _attack = attack; if(parent != null) { if(health==0) { _health = parent.GetHealth(); } } } }
'CS > DesignPattern' 카테고리의 다른 글
[DesignPattern] MVC (0) | 2024.10.31 |
---|---|
[DesignPattern] BuilderPattern (0) | 2024.10.25 |
[DesignPattern] 이중버퍼 (0) | 2024.10.21 |
[DesignPattern] 프로토타입 패턴 (0) | 2024.10.14 |
[DesignPattern] 경량 패턴 (0) | 2024.10.14 |