C#/수업과제

03/17 추상클래스, 인터페이스, 속성, 스택, 큐를 사용한 예제

박준희 2021. 3. 18. 01:41

 

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

 

App.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study06
{
    public class App
    {
        public App()
        {
            Console.WriteLine("App");

            Gateway gateway;
            gateway= new Gateway();

            Unit unit1 = new Unit("질럿1");
            Unit unit2 = new Unit("질럿2");
            Unit unit3 = new Unit("질럿3");
            Unit unit4 = new Unit("드라군1");
            Unit unit5 = new Unit("드라군2");

            gateway.ProductionStandbyUnit(unit1);
            gateway.ProductionStandbyUnit(unit2);
            gateway.ProductionStandbyUnit(unit3);
            gateway.ProductionStandbyUnit(unit4);
            gateway.ProductionStandbyUnit(unit5);

            int count = gateway.ProductionStandbyUnitCount();
            for (int i = 0; i< count;  i++)
            {
                Console.WriteLine("생산 대기중인 유닛 수 : " + gateway.ProductionStandbyUnitCount());
                Console.WriteLine("{0}가 생산되었습니다.", gateway.Produce().Name);
            } 
            Console.WriteLine("생산 대기중인 유닛 수 : " + gateway.ProductionStandbyUnitCount());            


        }

    }
}

 

Building.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study06
{
    public abstract class Building
    {
        public Building()
        {
            Console.WriteLine("건물이 생성되었습니다.");
        }
    }
}

 

Gateway.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study06
{
    public class Gateway : Building, IProductionPossible
    {        
        Queue<Unit> ProductionStandbyUnits { get; set; }

        public Gateway()
        {
            ProductionStandbyUnits = new Queue<Unit>();
        }
        public Unit Produce()
        {            
            return ProductionStandbyUnits.Dequeue();
        }

        public void ProductionStandbyUnit(Unit unit)
        {
            Console.WriteLine("{0}가 생산 대기중입니다.", unit.Name);
            ProductionStandbyUnits.Enqueue(unit);
        }

        public int ProductionStandbyUnitCount()
        {
            return ProductionStandbyUnits.Count;
        }
    }
}

 

IProductionPossible.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study06
{
    interface IProductionPossible
    {
        void ProductionStandbyUnit(Unit unit);
        Unit Produce();
    }
}

 

Unit.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study06
{
    public class Unit
    {
        public string Name { get; private set; }

        public Unit(string name)
        {
            Name = name;
        }
    }
}