Created
November 8, 2021 17:19
-
-
Save cch12313/5e11a34897265b81568a2561ea25a7a8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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