Фабрика шаблон дизайна и структура характерного рисунка кода

Поле шаблонов проектирования программного обеспечения обеспечивает эффективный способ использования экспертного опыта проектирования для разработчиков. Режим разработки с использованием важных особенностей объектно-ориентированных языков программирования: инкапсуляция, наследование, полиморфизм.

В этой статье подробно описана в фабричном режиме.

Во- первых, классификация Паттерн В
целом дизайн модели на три категории:

Создать схему, в общей сложности пять категорий: Фабричный метод шаблона, абстрактный узор завод, одноэлементных, шаблон строитель, прототип модели.

Структурная модель, в общей сложности семи видов: режим адаптера, декоративный режим, проксите-режим, режим внешнего вида, режим моста, режим комбинации, балансир.

Поведенческие модели, в общей сложности одиннадцати видов: стратегия шаблон, шаблон шаблонного метода, режим наблюдателя, итератор шаблон, режим цепи ответственности, командный режим государственного режим режима памятки, паттерн посетителя, посредническая модель для объяснения режима.

Кроме того, есть два: параллелизм модель и режим пула потоков.

 

Во- вторых, общие принципы и шесть принципов проектирования моделей
общие принципы:

Открытый Закрытый Принцип (Открыть Закрыть Принцип)
открытие и закрытие принцип , который открыт для расширения, но закрыты для модификации. Когда программа должна расширяться, чтобы не изменить исходный код, а также расширить существующий код для достижения эффекта горячей замены. Так кратко в одном предложении: Для того , чтобы сделать программу более масштабируемость, простота в обслуживании и модернизации. Хотите , чтобы достичь этого эффекта, мы должны использовать интерфейсы и абстрактные классы и т.д., следуют за детальное проектирование, мы отметим эту точку.

Шесть принципов

  1. Single Ответственность Принцип: Причина есть не более одного класса приводит к изменению, а это означает, что каждый класс должен реализовать единую ответственность, в противном случае, они должны разделить класс.

  2, принцип замещения Рихтер принцип замещения (Лиск принцип замещение) Richter в этом месте может появиться какой-либо базовый класс, подкласс будет иметь возможность появляться. 

  3. Принцип инверсии зависимостей (зависимость Принцип инверсии) Это основано на принципе открытия и закрытия, содержание конкретно: ориентированный интерфейс программирования, в зависимости от абстрактного не зависит от специфики.

  4, то есть принцип сегрегации интерфейса (интерфейс сегрегация Принцип) Принцип заключается в том: меньше, чем подкласс должен реализовать, но не существует в каждом интерфейсе, если иначе интерфейс будет расколот.

  5, Закон Деметры (наименее известный принцип) (Деметра принцип), который: класс своей собственной уверенности знать лучше класс. То есть, независимо от того, насколько сложного зависимых классов, логика должна быть внутренняя частью методы упаковки.

  6, синтез Мультиплексирование принципы (Композитный Повторное использование принципа) принцип состоит в использовании первой синтетической полимерной информации / вместо наследования.

 

В-третьих, модель завода

Фабрика шаблон принадлежит схемам созданных, можно разделить на три категории, простой шаблон завода, шаблон фабричного метода, абстрактный узор завода

Сценарий:

Вот только для иллюстрации приложения сцены абстрактных фабричного образца: Когда объект необходимо создать ряд взаимосвязанного или взаимозависимого время семейства продуктов, вы можете использовать абстрактный узор фабрики. Более говорит, очевидно, точка является иерархия наследования, иерархия, если существует множество (то есть, существует множество абстрактных классов), и принадлежат к иерархической структуре существует между соответствующим классом реализации или ограничений, связанных с некоторыми из него Вы можете использовать абстрактный узор фабрики. Если корреляция не существует между различными ограничениями или иерархии классов реализации, с использованием множества отдельной фабрики, чтобы создать продукт, более уместно.

1, простой шаблон завод, его главной особенностью является необходимость принять решение в классе фабрики, чтобы создать соответствующий продукт. При добавлении нового продукта, нам нужно изменить класс фабрики. Несколько абстрактно, например, чтобы понять. Существует производство процессор производителей, он имеет только один завод, способный производить два типа процессорных ядер. Клиенты нуждаются какие процессорных ядер, мы должны явно указать завод по производству. Одна реализация приводится ниже.

Простой завод модель UML диаграмма:

Код:

перечисление CTYPE {COREA, COREB};     
класс SingleCore     
{     
общественности :    
     виртуальный  пустота Show () = 0 ;  
};    
// 单核     
класс SingleCoreA: общественный SingleCore     
{     
общественности :    
     недействительным Show () {суд << " SingleCore " << епсИ; }     
};    
// 单核B     
класс SingleCoreB: общественный SingleCore     
{     
общественности :    
     недействительным Show () {соиЬ <<" SingleCORE B " << епсИ;}     
};     
// только растения, может производить два типа процессорных ядер, определяется в пределах     
класса Factory в     
{     
общественности :      
    SingleCORE * CreateSingleCore ( перечисление CTYPE CType)     
    {     
        IF (CType == COREA ) // внутри завода определяется     
            вернуть  новый новый SingleCoreA (); // производить ядерное А     
        еще  IF (CType == COREB)    
             вернуть  новый новый SingleCoreB (); // производить ядерное Аргументы B     
        в другое     
            возвращение NULL;      
    }    
};    

Главный недостаток: если вы хотите добавить новый ядерный тип, нам нужно изменить класс фабрики. Это нарушает принцип ОТКРЫТО ЗАКРЫТО: программные объекты (классы, модули, функции) может быть продлен, но не может быть изменен.

2, метод фабрики шаблон, средство для создания объекта определения интерфейса, так решить, какой экземпляр подкласса класса. Фабричный метод, чтобы сделать экземпляр класса, чтобы задержать его подклассов. Это звучит очень абстрактно, или в примере только что объяснил. Это производство основного процессора мощности дома много денег, поэтому решил создать завод, посвященный производству одноядерных моделей B, в то время как оригинальная фабрика занимается производством моделей одноядерных A. В это время, клиенты должны сделать, это найти хороший завод, например, для моделирования ядра А, чтобы найти фабрику, чтобы быть, в противном случае найти B фабрики, больше не нужно быть сказано, какой тип завода конкретных процессорных ядер.

Фигура UML фабричный метод:

класс SingleCore     
{     
общественности :    
     виртуальный  пустота Show () = 0 ;  
};    
// 单核     
класс SingleCoreA: общественный SingleCore     
{     
общественности :    
     недействительным Show () {суд << " SingleCore " << епсИ; }     
};    
// 单核B     
класс SingleCoreB: общественный SingleCore     
{     
общественности :    
     недействительным Show () {суд << " SingleCore B "<< епсИ;}     
};     
класс Factory в     
{     
общественности :    
     Virtual SingleCORE CreateSingleCore * () = 0 ;   
};     
// Производство АЭС     
класса FactoryA: общественный завода     
{     
общественный :     
    SingleCoreA * CreateSingleCore () { вернуть  новый новый SingleCoreA;}     
} ;     
// завод по производству ядерного B     
класса FactoryB: государственный завод     
{     
общественность :     
    SingleCoreB * CreateSingleCore () {вернуть  новый SingleCoreB; }     
};    

Factory Method шаблон недостаток: каждый дополнительные продукты, нам нужно добавить объект фабрики. Если компания быстро развивается, введение многого нового ядра процессора, то это откроет соответствующий новый завод. В реализации C ++, это определить один из класса фабрики. Очевидно, что по сравнению с простым шаблоном фабрики, фабричный метод требует больше определения класса.

3, абстрактный узор фабрика: Например, технология компании продолжает прогрессировать, может не только производить одноядерный процессор может производить многоядерные процессоры. Теперь простой завод модель и завод метод картина вне досягаемости всех. Абстрактный дебют завода картины. Она определяется как ряд связанных или зависимых объектов для создания интерфейсов без указания их конкретных классов. В частности, это приложение, оно по-прежнему открыты два завода по производству многоядерного процессора одноядерного специального типа A, в то время как еще один завод предназначен для производства одноядерного процессора типа В многоядерный.

  Абстрактная фабрика диаграмма модели UML:

Следующие коды приведены реализации.

//单核    
class SingleCore     
{    
public:    
    virtual void Show() = 0;  
};    
class SingleCoreA: public SingleCore      
{    
public:    
    void Show() { cout<<"Single Core A"<<endl; }    
};    
class SingleCoreB :public SingleCore    
{    
public:    
    void Show() { cout<<"Single Core B"<<endl; }    
};    
//多核    
class MultiCore      
{    
public:    
    virtual void Show() = 0;  
};    
class MultiCoreA : public MultiCore      
{    
public:    
    void Show() { cout<<"Multi Core A"<<endl; }    
    
};    
class MultiCoreB : public MultiCore      
{    
public:    
    void Show() { cout<<"Multi Core B"<<endl; }    
};    
//工厂    
class CoreFactory      
{    
public:    
    virtual SingleCore* CreateSingleCore() = 0;  
    virtual MultiCore* CreateMultiCore() = 0;  
};    
//工厂A,专门用来生产A型号的处理器    
class FactoryA :public CoreFactory    
{    
public:    
    SingleCore* CreateSingleCore() { return new SingleCoreA(); }    
    MultiCore* CreateMultiCore() { return new MultiCoreA(); }    
};    
//工厂B,专门用来生产B型号的处理器    
class FactoryB : public CoreFactory    
{    
public:    
    SingleCore* CreateSingleCore() { return new SingleCoreB(); }    
    MultiCore* CreateMultiCore() { return new MultiCoreB(); }    
};   

抽象工厂模式中的多台机制:通过父类的虚函数实现动态联编。

抽象工厂模式的优点:

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

抽象工厂模式的缺点:

产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

至此,工厂模式介绍完了。

代码地址:https://github.com/Jonahmoon/SoftwareEngineering.git

 

рекомендация

отwww.cnblogs.com/jonahmoon/p/11997893.html