Singleton Pattern

class Singleton
{
    private static Singleton instance;
    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }

    // 클래스 몸체...
}

Observer Pattern

델리게이트를 이용한 방식

class Publisher
{
    public delegate void MyEventHandler();
    private event MyEventHandler onClick;

    public void AddSubscriber (MyEventHandler Subscriber)
    {
        onClick += Subscriber;
    }

    public void DoClick()
    {
        if(onClick != null)
        {
            onClick();
        }
    }
}

Generic을 이용한 방식

// List를 이용한 방식
class PublisherList
{
    private List<Action> list = new List<action>();

    public void AddSubscriber (Action Callback)
    {
        list.Add(Callback);
    }

    public void DoClick()
    {
        foreach (var callback in list)
        {
            callback();
        }
    }
}

// Dictionary를 이용한 방식
class PublisherDictionary
{
    private Dictionary<string, Action> dict = new Dictionary<string, Action>();

    public void AddSubscriber (string Key, Action Callback)
    {
        dict[Key] = Callback;
    }

    public void DoClick()
    {
        foreach (var kvp in dict)
        {
            kvp.Value();
        }
    }
}

Factory Method Pattern

abstract class WeaponFactory
{
    public abstract void Fire ();

    // 클래스 몸체...
}

class pistol : WeaponFactory
{
    public override void Fire ()
    {
        // 권총 발사
    }
}

class Arrow : WeaponFactory
{
    public override void Fire ()
    {
        // 화살 발사
    }
}