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;
}
}
}