Skip to content

Instantly share code, notes, and snippets.

@cch12313
Created November 8, 2021 17:19
Show Gist options
  • Save cch12313/5e11a34897265b81568a2561ea25a7a8 to your computer and use it in GitHub Desktop.
Save cch12313/5e11a34897265b81568a2561ea25a7a8 to your computer and use it in GitHub Desktop.
using System;
namespace design_pattern
{
class Program
{
static void Main(string[] args)
{
// 原本寫法註解方便比較
// Toyote car1 = new Toyote();
// Bens car2 = new Bens();
// Tezla car3 = new Tezla();
// Blanket car4 = new Blanket();
// Chair car5 = new Chair();
// Gororo car6 = new Gororo();
var racingFactory = new RacingFactory();
var car1 = racingFactory.Create(RacingType.Toyote);
var car2 = racingFactory.Create(RacingType.Bens);
var car3 = racingFactory.Create(RacingType.Tezla);
var car4 = racingFactory.Create(RacingType.Blanket);
var car5 = racingFactory.Create(RacingType.Chair);
var car6 = racingFactory.Create(RacingType.Gororo);
car1.Skill();
car2.Skill();
car3.Skill();
car4.Skill();
car5.Skill();
car6.Skill();
}
}
public enum RacingType
{
Default = 0,
Toyote = 1,
Bens = 2,
Tezla = 3,
Blanket = 4,
Chair = 5,
Gororo = 6,
}
public class RacingFactory
{
public IRacing Create(RacingType racingType)
{
IRacing racing;
switch (racingType)
{
case RacingType.Toyote:
racing = new Toyote();
break;
case RacingType.Bens:
racing = new Bens();
break;
case RacingType.Tezla:
racing = new Tezla();
break;
case RacingType.Blanket:
racing = new Blanket();
break;
case RacingType.Chair:
racing = new Chair();
break;
case RacingType.Gororo:
racing = new Gororo();
break;
default:
throw new NotImplementedException();
}
return racing;
}
}
public interface IRacing
{
public void Skill();
}
public class Toyote: IRacing
{
private ISkill _skill;
public Toyote()
{
_skill = new Turbo();
}
public void Skill()
{
_skill.Cast();
}
}
public class Bens: IRacing
{
private ISkill _skill;
public Bens()
{
_skill = new Turbo();
}
public void Skill()
{
_skill.Cast();
}
}
public class Tezla: IRacing
{
private ISkill _skill;
public Tezla()
{
_skill = new ElectromagneticPulseBoost();
}
public void Skill()
{
_skill.Cast();
}
}
public class Blanket: IRacing
{
private ISkill _skill;
public Blanket()
{
_skill = new Hidden();
}
public void Skill()
{
_skill.Cast();
}
}
public class Chair: IRacing
{
private ISkill _skill;
public Chair()
{
_skill = new Rush();
}
public void Skill()
{
_skill.Cast();
}
}
public class Gororo: IRacing
{
private ISkill _skill;
public Gororo()
{
_skill = new ThrowBananaPeel();
}
public void Skill()
{
_skill.Cast();
}
}
public interface ISkill
{
public void Cast();
}
public class Turbo: ISkill
{
public void Cast()
{
Console.WriteLine("噴射加速~");
}
}
public class ElectromagneticPulseBoost: ISkill
{
public void Cast()
{
Console.WriteLine("電磁脈衝加速~");
}
}
public class Hidden : ISkill
{
public void Cast()
{
Console.WriteLine("隱形~");
}
}
public class Rush : ISkill
{
public void Cast()
{
Console.WriteLine("衝撞~");
}
}
public class ThrowBananaPeel : ISkill
{
public void Cast()
{
Console.WriteLine("丟香蕉皮~");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment