CS/DesignPattern

[DesignPattern] 타입객체

리네엔 2024. 10. 23. 21:09

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