Simple Pattern..가장 간단한 패턴 예제인데도. 한번보고 쉽게 이해를 못했다.
이 패턴의 가장 큰 특징은 어떤 같은 처리를 하는 메서드들이 여러개 있다면 이 메서드들을 처리하는 클래스를 하나 만드는 것이다.
아래 예제를 보면 알것지만...스타에는 일반형, 공격형, 진동형 의 데미지들이 있는데 이 공격형태에 따른 데미지를 어떤 클래스(여기선 DamageFactory)로 만들어서 처리했다.
이렇게 같은 행위를 하는 메서드들을 Factory 에 묶어 버려서 사용한다면 나중에 재사용하기 편리하다..
병화한테 전화와서 나감~ 휘리릭
아래 예제는 책보면서 나름대로 스타의 공격형에 관한 부분을 패턴화 시켜본 부분이다.
개인적으로 만든 허접한 예제니 보지 말것 -_-;
public class DamageFactory {
public DamageFactory() {}
public Damage getDamage(string unit, int damage) {
switch(unit) {
case "marine" :
return new NormalDamage(damage);
case "firebat" :
return new VibrationDamage(damage);
case "vulture" :
return new VibrationDamage(damage);
case "tank" :
return new ExplosionDamage(damage);
default :
return new NormalDamage(damage);
}
}
}
public class Damage {
protected int norDamage; // normal damage
protected int vibDamage; // vibration damage
protected int expDamage; // explosion damage
public int getNorDamage() {
return norDamage;
}
public int getVibDamage() {
return vibDamage;
}
public int getExpDamage() {
return expDamage;
}
}
public class NormalDamage : Damage {
public NormalDamage(int damage) {
norDamage = damage;
}
}
public class VibrationDamage : Damage {
public VibrationDamage(int damage) {
vibDamage = damage + 10;
}
}
public class ExplosionDamage : Damage {
public ExplosionDamage(int damage) {
expDamage = damage + 20;
}
}
한빛미디어에 있던 예제
참조 URL : http://network.hanbitbook.co.kr/view_news.htm?serial=626
// project created on 2004-03-18 at ì˜¤ì „ 12:16
#define WINDOWS
using System;
namespace Mona.DesingPattern
{
class Tester
{
[STAThread]
public static void Main(string[] args)
{
#if WINDOWS
OperationSystem os = new Windows();
#elif LINUX
OperationSystem os = new Linux();
#endif
os.Disk();
Console.WriteLine("npress any key to end...");
Console.Read();
}
}
public abstract class OperationSystem
{
public abstract void Disk();
}
public class Linux : OperationSystem
{
public override void Disk()
{
Console.WriteLine( this.ToString() + ".Disk()" );
}
}
public class Windows : OperationSystem
{
public override void Disk()
{
Console.WriteLine( this.ToString() + ".Disk()" );
}
}
}