c# 강의/과제

20200413 - 팩토리 시즈모드

쪼혀 2020. 4. 13. 23:05

 


> App.cs

더보기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200413
{
    class App
    {
        public App()
        {
            Factory factory = new Factory();
            SiegeTank siegeTank = factory.CreateSiegeTank();
            siegeTank.CreateTank();
            siegeTank.Move();
            siegeTank.SiegeMode();
            siegeTank.Move();
            siegeTank.UnSiegeMode();
            siegeTank.Move();
        }
    }
}

 

> SiegeTank.cs

더보기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200413
{
    enum eAttactMode { TankMode, SizeMode }

    class SiegeTank
    {
        eAttactMode attactMode;

        public SiegeTank()
        {
            this.attactMode = eAttactMode.TankMode;
        }

        public SiegeTank CreateTank()
        {
            SiegeTank siegeTank = new SiegeTank();
            Console.WriteLine("시즈탱크 생성");

            return siegeTank;
        }

        public void SiegeMode()
        {
            this.attactMode = eAttactMode.SizeMode;
            Console.WriteLine("시즈모드로 변경했습니다.");
        }

        public void UnSiegeMode()
        {
            this.attactMode = eAttactMode.TankMode;
            Console.WriteLine("탱크모드로 변경했습니다.");
        }

        public void Move()
        {
            if (this.attactMode != eAttactMode.SizeMode)
            {
                Console.WriteLine("시즈탱크가 이동합니다.");
            }
            else
            {
                Console.WriteLine($"{this.attactMode}에서는 이동할수 없습니다.");
            }
        }
    }
}

 


> 강사님코드 - 모드변경 한곳에서 처리

더보기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study_008
{
    class Factory
    {
        //생성자 
        public Factory()
        {
            Console.WriteLine("팩토리가 생성되었습니다.");
        }

        //시즈탱크 생성 
        public SiegeTank CreateSiegeTank()
        {
            return new SiegeTank();
        }

    }
}

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

namespace Study_008
{
    public enum eAttackMode
    {
        TankMode, SiegeMode
    }

    class SiegeTank
    {
        public eAttackMode attackMode;

        //생성자 
        public SiegeTank()
        {
            Console.WriteLine("시즈탱크가 생성되었습니다.");
            this.attackMode = eAttackMode.TankMode;
        }

        //이동 
        public void Move()
        {
            if (this.attackMode == eAttackMode.TankMode)
            {
                Console.WriteLine("이동 합니다.");
            }
            else if ( this.attackMode == eAttackMode.SiegeMode) 
            {
                Console.WriteLine("{0}에서는 이동 할수 없습니다.", this.attackMode);
            }
        }

        //모드 변환 
        public eAttackMode ChangeAttackMode()
        {
            eAttackMode prevMode = this.attackMode;

            if (this.attackMode == eAttackMode.SiegeMode)
            {
                this.attackMode = eAttackMode.TankMode;
            }
            else 
            {
                this.attackMode = eAttackMode.SiegeMode;
            }
            Console.WriteLine("{0} -> {1}", prevMode, this.attackMode);

            return this.attackMode;
        }
    }
}