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()" );
                }
        }
}