C#/수업내용

03/25 싱글턴 디자인패턴 연습

박준희 2021. 3. 25. 11:51
728x90

싱글턴
하나의 클래스가 하나의 인스턴스만 갖도록 제한, 전역범위에서 인스턴스를 엑세스 생성자를 private으로 만듦
일반적으로 Singleton 인스턴스를 클라이언트가 처음 Singleton 인스턴스를 엑세스할때 생성

 

 

 

Program.cs

using System;

namespace Study07
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Main");
            new App();
        }
    }
}

 

App.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;

namespace Study07
{
    public class App
    {
        //생성자 
        public App()
        {
            Console.WriteLine("App");
            DataManager.GetInstance().LoadWeaponData("./weapon_data.json");
            foreach(var weaponData in DataManager.GetInstance().dicWeaponDatas)
            {
                Console.WriteLine("{0} {1}", weaponData.Key, weaponData.Value.name);
            }
        }
        
    }

}

 

DataManager.cs

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study07
{
    public class DataManager
    {
        private static DataManager instance;
        public Dictionary<int, WeaponData> dicWeaponDatas;
        //생성자
        private DataManager()
        {
            
        }

        public static DataManager GetInstance()
        {
            if (DataManager.instance == null)
                DataManager.instance = new DataManager();
            return DataManager.instance;
        }

        public void LoadWeaponData(string path)
        {
            var json = File.ReadAllText(path);
            var arr = JsonConvert.DeserializeObject<WeaponData[]>(json);
            dicWeaponDatas = arr.ToDictionary(x => x.id);
        }
    }
}

 

WeaponData.cs

namespace Study07
{
    public class WeaponData
    {
        public int id;
        public string name;
        public int grade_type;
        public float damage;
        public int sell_price;
    }
}

 

Json파일

weapon_data.json
0.00MB

728x90