Design Patterns

Материал из Wiki.crossplatform.ru

(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «= Порождающие паттерны проектирования = == Абстрактная фабрика (Abstract Factory, Factory), др. название…»)
(Одиночка (Singleton))
Строка 2: Строка 2:
== Абстрактная фабрика (Abstract Factory, Factory), др. название Инструментарий (Kit) ==
== Абстрактная фабрика (Abstract Factory, Factory), др. название Инструментарий (Kit) ==
== Одиночка (Singleton) ==
== Одиночка (Singleton) ==
 +
=== Статический  ===
 +
<source lang="cpp">class CSingleton
 +
{
 +
private:
 +
    static CSingleton m_singleton;
 +
 +
private:
 +
    CSingleton() {}
 +
    ~CSingleton() {}
 +
    CSingleton(const CSingleton &) {}
 +
    CSingleton & operator=(const CSingleton &) { return *this; }
 +
 +
public:
 +
    static CSingleton *instance() { return &m_singleton; }
 +
};
 +
 +
CSingleton CSingleton::m_singleton;
 +
 +
int main(int , char **)
 +
{
 +
    CSingleton *p = CSingleton::instance();
 +
    // ...
 +
    return 0;
 +
}</source>
 +
 +
=== Динамический ===
 +
<source lang="cpp">class CSingleton
 +
{
 +
private:
 +
    static CSingleton *m_pSingleton;
 +
    static int m_nCounter;
 +
 +
private:
 +
    CSingleton() {}
 +
    ~CSingleton() {}
 +
    CSingleton(const CSingleton &) {}
 +
    CSingleton & operator=(const CSingleton &) { return *this; }
 +
 +
public:
 +
    static CSingleton *instance()
 +
    {
 +
        if( m_nCounter == 0 )
 +
        {
 +
            m_pSingleton = new CSingleton();
 +
        }
 +
        m_nCounter++;
 +
        return m_pSingleton;
 +
    }
 +
    static CSingleton *freeInstance()
 +
    {
 +
        if( m_nCounter > 0 )
 +
        {
 +
            m_nCounter--;
 +
            if( m_nCounter == 0 )
 +
            {
 +
                delete m_pSingleton;
 +
                m_pSingleton = 0;
 +
            }
 +
        }
 +
    }
 +
};
 +
 +
CSingleton *CSingleton::m_pSingleton = 0;
 +
int CSingleton::m_nCounter = 0;
 +
 +
int main(int , char **)
 +
{
 +
    CSingleton *p = CSingleton::instance();
 +
 +
    return 0;
 +
}
 +
</source>
 +
== Прототип (Prototype) ==
== Прототип (Prototype) ==
== Создатель экземпляров класса (Creator) ==
== Создатель экземпляров класса (Creator) ==

Версия 07:18, 16 апреля 2013

Содержание

Порождающие паттерны проектирования

Абстрактная фабрика (Abstract Factory, Factory), др. название Инструментарий (Kit)

Одиночка (Singleton)

Статический

class CSingleton
{
private:
    static CSingleton m_singleton;
 
private:
    CSingleton() {}
    ~CSingleton() {}
    CSingleton(const CSingleton &) {}
    CSingleton & operator=(const CSingleton &) { return *this; }
 
public:
    static CSingleton *instance() { return &m_singleton; }
};
 
CSingleton CSingleton::m_singleton;
 
int main(int , char **)
{
    CSingleton *p = CSingleton::instance();
    // ...
    return 0;
}

Динамический

class CSingleton
{
private:
    static CSingleton *m_pSingleton;
    static int m_nCounter;
 
private:
    CSingleton() {}
    ~CSingleton() {}
    CSingleton(const CSingleton &) {}
    CSingleton & operator=(const CSingleton &) { return *this; }
 
public:
    static CSingleton *instance()
    {
        if( m_nCounter == 0 )
        {
            m_pSingleton = new CSingleton();
        }
        m_nCounter++;
        return m_pSingleton;
    }
    static CSingleton *freeInstance()
    {
        if( m_nCounter > 0 )
        {
            m_nCounter--;
            if( m_nCounter == 0 )
            {
                delete m_pSingleton;
                m_pSingleton = 0;
            }
        }
    }
};
 
CSingleton *CSingleton::m_pSingleton = 0;
int CSingleton::m_nCounter = 0;
 
int main(int , char **)
{
    CSingleton *p = CSingleton::instance();
 
    return 0;
}

Прототип (Prototype)

Создатель экземпляров класса (Creator)

Строитель (Builder)

Фабричный метод (Factory Method) или Виртуальный конструктор (Virtual Constructor)

Структурные паттерны проектирования классов/обьектов

Адаптер (Adapter)

Декоратор (Decorator) или Оболочка (Wrapper)

Заместитель (Proxy) или Суррогат (Surrogate)

Информационный эксперт (Information Expert)

Компоновщик (Composite)

Мост (Bridge), Handle (описатель) или Тело (Body)

Низкая связанность (Low Coupling)

Приспособленец (Flyweight)

Устойчивый к изменениям (Protected Variations)

Фасад (Facade)

Паттерны проектирования поведения классов/обьектов

Интерпретатор (Interpreter )

Итератор (Iterator) или Курсор (Cursor)

Команда (Command), Действие (Action) или Транзакция (Транзакция)

Наблюдатель (Observer), Опубликовать - подписаться (Publish - Subscribe) или Delegation Event Model

Не разговаривайте с неизвестными (Don't talk to strangers)

Посетитель (Visitor)

Посредник (Mediator)

Состояние (State)

Стратегия (Strategy)

Хранитель (Memento)

Цепочка обязанностей (Chain of Responsibility)

Шаблонный метод (Template Method)

Высокое зацепление (High Cohesion)

Контроллер (Controller)

Полиморфизм (Polymorphism)

Искусственный (Pure Fabrication)

Перенаправление (Indirection)