728x90
Singleton: 객체 인스턴스가 1개, 정적, 시스템에 많이 적용
Factory: 양산(미니언 같이)
State: 상태에 따라 무언가를 호출, 한정된 상태 안에서 계속(유한상태머신 FSM) → 몬스터 AI에 많이 사용, 상태이상에 사용
Program.cs
class test
{
public test()
{
Console.WriteLine("test");
}
public void Call()
{
Console.WriteLine("일반클래스");
}
} //main 전에 선언
//... main문 시작
test testing = new test();
testing.Call();
//singleton singleton = new singleton(); 싱글톤 선언을 해 두었기에 아래 식으로 바로 접근이 가능하다
singleton.Instance.singleton_call();
Console.WriteLine(singleton.Instance.get_int());
Console.WriteLine(singleton.Instance.a);
singleton.cs
class singleton
{
//싱글톤의 기본 형태
private static singleton _instance = null;
public static singleton Instance //본인 자체를 객체화
{
get
{
if(_instance == null)
{
_instance = new singleton();
}
return _instance;
}
}
public int a = 5;
//private int b = 6;
//다른 클래스에서 접근 불가
public singleton()
{
Console.WriteLine("지금 생성");
}
public void singleton_call()
{
Console.WriteLine("singleton_call()");
}
public int get_int()
{
return a;
}
}
state.cs
public enum state
{
Happy,
Angry,
Sad
}
public interface Istate
{
void Action();
}
public class Happy : Istate
{
//상태에 클래스를 만들어 상태를 객체화시킴
//상태 패턴은 상태를 객체화함으로 상태가 행동을 할 수 있도록 위임하는 패턴
string name;
public Happy(string name)
{
this.name = name;
}
public void Action()
{
Console.WriteLine($"{name}은 행복");
}
}
public class Angry : Istate
{
string name;
public Angry(string name)
{
this.name = name;
}
public void Action()
{
Console.WriteLine($"{name}은 분노");
}
}
public class Sad : Istate
{
string name;
public Sad(string name)
{
this.name = name;
}
public void Action()
{
Console.WriteLine($"{name}은 슬픔");
}
}
public class Human
{
public string name;
public Dictionary<state, Istate> State_dictionary;
public Human(string name)
{
this.name = name;
State_dictionary = new Dictionary<state, Istate>();
State_dictionary.Add(state.Happy, new Happy(name));
State_dictionary.Add(state.Angry, new Angry(name));
State_dictionary.Add(state.Sad, new Sad(name));
}
}
Program.cs main문
Human person = new Human("이름");
Console.WriteLine($"{person.name}");
person.State_dictionary[state.Happy].Action();
person.State_dictionary[state.Angry].Action();
person.State_dictionary[state.Sad].Action();
728x90
'공부 > C#' 카테고리의 다른 글
[C#] 콘솔창의 키보드 입력 필요할때만 받아서 처리하기 (0) | 2023.03.31 |
---|---|
[C#] Window 콘솔에서 mp3파일 가져와서 재생하기 (0) | 2023.03.30 |
[C#] out과 ref / stack과 queue / Hashtable과 Dictionary (0) | 2023.03.27 |
[C#] 예외처리 try-catch의 이용과 자료구조 Array, List, ArrayList 차이 (1) | 2023.03.24 |
[C#] 상속과 virtual, abstract, interface / 오버로딩, 오버라이딩 코드 (0) | 2023.03.23 |