Вопросы с тегами [factory-pattern]

1

голосов
0

ответ
34

Просмотры

Фабрика Узор: createABC против GetType (ABC)

Я пытаюсь написать код, который фильтрует список объектов на основе определенных свойств, которые они имеют. Есть много способов, чтобы фильтровать эти объекты, так что я могу иметь несколько фильтров. Я не уверен, если это имеет значение для этого вопроса, но эти классы фильтров имеют различные конструкторы. Для того, чтобы управлять созданием этих фильтров, я прочитал о шаблоне фабрики, и решил попробовать его. Там, кажется, две реализации, которые широко используются: Используя метод GetType, который использует например, операторы переключателей от типа, чтобы определить, какой объект строится. Создание индивидуальных методов для всех возможных объектов, которые могут быть созданы, например, createFilterA, createFilterB. Как я понимаю, преимущество методы (2): Это обеспечивает очень хорошую видимость того, что фильтры могут быть сделаны, так как мой IDE сразу говорит мне методы, доступные на заводе-изготовителе. В то время как способ (1) не делают типы фильтров, которые могут быть сделаны известно пользователю. Различные методы могут сказать мне, что аргументы, необходимые для построения различных фильтров. Преимущества метода (1) являются: У нас есть способ, чтобы отобразить строку конкретного типа фильтра, так что пользователи API не придется возиться с различными классами. Мне интересно, если я пропускаю на любые недостатки / преимущества в отношении каждого из этих двух реализаций? Я в настоящее время склоняюсь к гибридному, т.е. имеющим как методам GetType и createFilterX, где метод GetType выключатели и называют индивидуальный createFilterA, методы createFilterB. У нас есть способ, чтобы отобразить строку конкретного типа фильтра, так что пользователи API не придется возиться с различными классами. Мне интересно, если я пропускаю на любые недостатки / преимущества в отношении каждого из этих двух реализаций? Я в настоящее время склоняюсь к гибридному, т.е. имеющим как методам GetType и createFilterX, где метод GetType выключатели и называют индивидуальный createFilterA, методы createFilterB. У нас есть способ, чтобы отобразить строку конкретного типа фильтра, так что пользователи API не придется возиться с различными классами. Мне интересно, если я пропускаю на любые недостатки / преимущества в отношении каждого из этих двух реализаций? Я в настоящее время склоняюсь к гибридному, т.е. имеющим как методам GetType и createFilterX, где метод GetType выключатели и называют индивидуальный createFilterA, методы createFilterB.
bchen
1

голосов
1

ответ
151

Просмотры

Django Generic Factory

I have two questions that bother me. I'm facing an implementation where some document are related to different level of geodata and would like a factory to generate them. Let's see an example how I thought it may work: from django.contrib.gis.db import models class Country(models.Model): name = models.CharField(max_length=60) class Region(models.Model): country = models.ForeignKey(Country, on_delete=models.PROTECT) name = models.CharField(max_length=60) class Law(models.Model): text = models.CharField(max_length=60) class Meta: abstract = True class CountryLaw(Law): country = models.ForeignKey(Country, on_delete=models.CASCADE) class RegionLaw(Law): region = models.ForeignKey(Region, on_delete=models.CASCADE) # Not sure this work but the idea is here class LawManager(models.Manager): def create_law(text,geodata): if isinstance(geodata, Country): return CountryLaw(text=text, country=geodata) elif isinstance(geodata, Region) return RegionLaw(text=text, region=geodata) else: raise TypeError("Inapropriate geodata type") I would like some factory method because I have some work to fill the fields of the "Law" that is common to all law, but this example doesn't show it. My question are the following : Is there a better way to design Law objects ? Would such a manager work ? How could I access it ? I search on google and stackoverflow for answer, but don't know what keyword to use and didnt found anything that could help me.. thanks for your help !
Merichbier
1

голосов
1

ответ
82

Просмотры

Обновление кэша Dependency Injection

Я новичок в разработке в C # так еще выяснить несколько вещей. Я пытаюсь придерживаться хороших дизайнерских принципалов, чтобы держать мой код обслуживаемыми. Так что делать я строю линии бизнес-приложения, используя шаблоны MVVM и Factory. Я также использую Dependency Injection (Unity). Мой вопрос о обновлении кэша данных, созданный с помощью Dependency Injection. Когда я создаю мой взгляд, модель кэш данных загружается следующим образом: _container.RegisterType (новый TransientLifetimeManager ()); Мой сценарий является то, что у меня есть данные, представленные пользователям в GridView. У меня есть многопользовательская среда с динамической информацией, так что возможно, что время от времени данных в кэш устаревает. Это может привести, как и следовало ожидать, в ошибках DBConcurrency времени от времени. То, что я борюсь с, как справиться с этим в правильном порядке. Должен ли я прервать весь процесс и есть пользователь перезагрузить приложение, таким образом, воссоздавая DI или есть элегантный способ обновить кэш и повторно присутствуют данные после предоставления необходимой информации для пользователя. Используя 2n'd варианта я мог бы, возможно, разместить кнопку обновления на экране или приурочено событие, чтобы обновить данные, чтобы пользователь мог видеть какие-либо изменения в данных. Поэтому в основном то, что я спрашиваю, как я могу держать кэш в синхронизации с базовой базой данных в режиме реального времени? Заранее спасибо. вариант d я мог бы, возможно, разместить кнопку обновления на экране или приурочено событие, чтобы обновить данные, чтобы пользователь мог видеть какие-либо изменения в данных. Поэтому в основном то, что я спрашиваю, как я могу держать кэш в синхронизации с базовой базой данных в режиме реального времени? Заранее спасибо. вариант d я мог бы, возможно, разместить кнопку обновления на экране или приурочено событие, чтобы обновить данные, чтобы пользователь мог видеть какие-либо изменения в данных. Поэтому в основном то, что я спрашиваю, как я могу держать кэш в синхронизации с базовой базой данных в режиме реального времени? Заранее спасибо.
Tony
1

голосов
0

ответ
17

Просмотры

Почему объект метод создатель фабричной модели принимает строку Parmeter?

Почему объект метод создатель фабричной модели принимает строку Parmeter? Почему общий метод создатель не имеет ничего общего?
uzay95
1

голосов
1

ответ
164

Просмотры

Завод проблема шаблон дизайна

Предположим, что есть завод, как показано ниже. Я хотел бы знать, если это возможно, чтобы не включать ObjectA.h и ObjectB.h. каталог структура завод | ----- Objecta | ----- ObjectB Так как я не хочу, чтобы включить заголовочный файл в поддиректории, есть ли способ сделать это? И если есть новый objectC, не нужно модифицировать класс фабрики. он будет автоматически создавать ObjectC, если тип «TypeC». #include "ObjectA.h" #include "ObjectB.h" объект * создать (константную строку & типа) {если (тип == "TypeA") {возвращение нового Objecta (); } Еще {возвратить новый ObjectB (); }};
Michael D
1

голосов
1

ответ
603

Просмотры

Factory Pattern для шаблонных классов и по умолчанию аргумента нового типа для шаблонных классов

У меня три слоя классов, например, BaseSpreading (базовый класс), IterativeMapSpreading (один из подклассов BaseSpreading) и TentSpreading, BernoulliSpreading (два из подклассов IterativeMapSpreading). Метод называется generateSpreading появляется во всех классах. Определенный пользователь параметр определяет рассеивание, например «палатку» или «Бернулли». Тогда, если-то управляющая структура вызывает метод generateSpreading соответствующего подкласса ( «палатка» и «бернуллиевость» будет вызывать метод generateSpreading из TentSpreading и BernoulliSpreading подклассов соответственно). Я знаю, как решить мою проблему, объявив generateSpreading как виртуальные и определить указатель базового класса (для BaseSpreading). Затем, производный класс объект может быть реализован внутри если-то структура управления в соответствии с вариантом пользователя. Несмотря на то, что такой случай не доступен за рамки структуры управления, можно указать указатель базового класса на объект производного класса, используя шаблон фабрики, смотрите, например, этот пост. Хотя решение на основе виртуальных методов работы, это не полезно для моих целей из-за его плохую работу. Моя симуляция вызывает виртуальную функцию миллионы раз. В качестве альтернативного подхода, я использовал программирование шаблона. В этом случае, мне приходится иметь дело с проблемой, что экземпляр вложенного класса шаблона не доступен за пределами сферы действия, если-то еще структуры. Мой вопрос заключается в том, можно ли распространить идею картины на заводе при работе с классами шаблонов. Для того, чтобы сделать эту работу, в случае, если это возможно, я бы создать указатель на шаблон базового класса, а затем указать его к реализованному шаблону подклассу, который определяется внутри если-иначе структура. В этом случае задача сводится к определению аргумента шаблона по умолчанию для шаблона базового класса, и это была моя трудность. Эта ссылка дает пример того, как определить шаблон по умолчанию аргумента в который не является хорошо известным типом, например, «Int» (аргумент по умолчанию, например по ссылке является стандартом «Распределитель» шаблон для векторов). Это мои скрипты: base_spreading.h: #ifndef BASE_SPREADING_H_ #define BASE_SPREADING_H_ #include #include #include шаблонный класс BaseSpreading {общественности: BaseSpreading (S & распространение); аннулированию generateSpreading (повышение :: числовыми :: ublas :: вектор &); частные: S & spreading_; }; Шаблон BaseSpreading :: BaseSpreading (S & разбрасывания): spreading_ (распространение) {} шаблон недействительными BaseSpreading :: generateSpreading (повышение :: числовые :: ublas :: вектор & SPR) {spreading_.generateSpreading (SPR); } #Endif / * * BASE_SPREADING_H_ / spreading_iterative_map.h #ifndef SPREADING_ITERATIVE_MAP_H_ #define SPREADING_ITERATIVE_MAP_H_ #include шаблонный класс IterativeMapSpreading {общественности: IterativeMapSpreading (S & разбрасывания); двойная evaluateMap (двойной); аннулированию generateSpreading (повышение :: числовыми :: ublas :: вектор &); двойная sampleInitialPoint (); частные: S & spreading_; недействительным calculateFollowingPoints (повышение :: числовыми :: ublas :: вектор &); }; Шаблон IterativeMapSpreading :: IterativeMapSpreading (S & разбрасывания): spreading_ (распространение) {} шаблон недействительными IterativeMapSpreading ::
scidom
1

голосов
1

ответ
1.6k

Просмотры

Пример заводского шаблона в Java JDK

В ссылке ниже: Примеры шаблонов GoF Design в основных библиотеках Java, что java.lang.Object # ToString () является примером фабричной модели. Я запутался об этом. Что я понял до сих пор, что завод шаблон используется для создания объектов. Может кто-нибудь объяснить это более ясно?
AKS
1

голосов
2

ответ
166

Просмотры

Is this right usage of factory pattern?

Есть проблема дизайна, может быть, вы можете помочь решить. Мой объект клиент может запросить набор объектов класса Report. Там определен набор доступных отчетов и в соответствии с правами клиента различных отчеты включены в возвращенном наборе. Отчеты создаются по запросу (каждый клиент получает совершенно новые экземпляры отчетов по каждому запросу). Должен ли я использовать свой род «фабрики», который будет инкапсулировать создание отчетов, как показано ниже: Класс ReportsFactory общественного {частной UserPermissionsChecker permissionsChecker; общественный Set createReports () {Установить отчеты = новый HashSet (); если (permissionsChecker.hasAccessTo ( 'Отчет А')) {reports.add (createReportA ()); } Если (permissionsChecker.hasAccessTo ( 'отчет В')) {reports.add (createReportB ()); } Если (permissionsChecker. hasAccessTo ( 'Отчет C')) {reports.add (createReportC ()); } Возвращать отчеты; } Частный отчет createReportA () {...} частный отчет createReportB () {...} частный отчет createReportC () {...}} Правильно ли это использование так называемой простой схеме Factory? Или у вас есть другие предложения? ** EDIT ** Некоторые комментарии ниже говорят, что это не совсем фабричная модель. Если нет, то как я мог бы назвать это?
grafthez
1

голосов
1

ответ
933

Просмотры

Реализация Factory Pattern в сочетании с чтением и письмом

Я пытаюсь создать приложение в правильном порядке, он должен гласить счета-фактуры данные из SQL Server (2 запросов в зависимости от типа счета: продажи или покупки) Процесс его (Acme может понадобиться меньше полей, чем SugarCorp и в различном формате) Выход TXT или CSV (это может измениться в будущем) я нашел завод модель полезна так prepeared диаграммы UML в соответствии с моим беспокойством. Каждый InvoiceFactoryProvider может генерировать PInvoice или SInvoice (специфичные для них). CreatePInvoice () и CreateSInvoice () должны вызывать нагрузки () и сохранить () методы. Как пара нагрузки () с классом SQLReader, чтобы получить каждую строку как объект PInvoice? И сохранить () с моим IDataWriter интерфейсом. Могли бы вы предоставить некоторые пример / советы? Edit: После просмотра примеров моста шаблона, как это было предложен Атул, я создал диаграмму классов для этой проблемы, используя его, которая выглядит следующим образом: Счетов-фактур запросов SQL может изменяться (приложение может загружать данные счета-фактуры от различных систем - PollosInvoice или StarInvoice) и каким образом они обрабатываются (различные реализации). В этом случае я развязан абстракции - Счет-фактура от ее реализаций - экспорт-фактуры на определенное программное обеспечение (AcmeExporter или SigmaExporter). AcmeExporter и SigmaExport будут устанавливать свои поля в соответствии со спецификацией - дату сделки, способом оплаты, взятые из DataTable счета-фактуры по типу счета-фактуры и т.д.. ExportInvoice () возвращает объект DataTable с необходимыми данными. InvoiceExporter также использует два интерфейса для кодирования и формата файла. Что вы думаете об этом? Какие изъяны / преимущества у него есть? В этом случае я развязан абстракции - Счет-фактура от ее реализаций - экспорт-фактуры на определенное программное обеспечение (AcmeExporter или SigmaExporter). AcmeExporter и SigmaExport будут устанавливать свои поля в соответствии со спецификацией - дату сделки, способом оплаты, взятые из DataTable счета-фактуры по типу счета-фактуры и т.д.. ExportInvoice () возвращает объект DataTable с необходимыми данными. InvoiceExporter также использует два интерфейса для кодирования и формата файла. Что вы думаете об этом? Какие изъяны / преимущества у него есть? В этом случае я развязан абстракции - Счет-фактура от ее реализаций - экспорт-фактуры на определенное программное обеспечение (AcmeExporter или SigmaExporter). AcmeExporter и SigmaExport будут устанавливать свои поля в соответствии со спецификацией - дату сделки, способом оплаты, взятые из DataTable счета-фактуры по типу счета-фактуры и т.д.. ExportInvoice () возвращает объект DataTable с необходимыми данными. InvoiceExporter также использует два интерфейса для кодирования и формата файла. Что вы думаете об этом? Какие изъяны / преимущества у него есть? ExportInvoice () возвращает объект DataTable с необходимыми данными. InvoiceExporter также использует два интерфейса для кодирования и формата файла. Что вы думаете об этом? Какие изъяны / преимущества у него есть? ExportInvoice () возвращает объект DataTable с необходимыми данными. InvoiceExporter также использует два интерфейса для кодирования и формата файла. Что вы думаете об этом? Какие изъяны / преимущества у него есть?
netdis
1

голосов
1

ответ
95

Просмотры

Дизайн дилемма при работе с заводскими классами [закрыт]

В моем приложении у меня есть несколько подклассов UITableViewCell. Я использую класс фабрики для создания экземпляра нужного типа и обеспечить их к тому, кто нуждается в них. Класс завода получает аргумент, который является объектом данных, который представляет ячейку. Я считаю, что все будет в порядке, так как завод является частью контроллера. Cellfactory * завод = [[Cellfactory Alloc] initWithData: данные]; Проблема возникает, когда этот объект данных отображается с видом представления внутри класса фабрики. Я думал, что 2 решения: сохранить словарь с отображением, ключи будут строковым представлением класса объектов данных и значение будет строковое представлением класса представления, ответственного за предоставление этого объекта данных. Таким образом, когда завод просит обеспечить представление на основе объекта данных, он будет знать, какой класс инстанцировать, глядя в словарь карты. Обратная сторона является то, что если добавить еще один объект данных, вам необходимо изменить фабричный метод тоже (добавить новую запись в своем словаре) более гибкое решение, которое не требует, чтобы не изменяя фабричный метод независимо от того, сколько новых объектов вы добавляете , было бы сохранить имя класса представления, ответственного за предоставление объекта данных внутри самого объекта данных. Но что связывает модель с точки зрения и как-то не чувствует себя хорошо для модели, чтобы предоставить информацию о визуализации. Итак, какой из этих двух являются более долгосрочной перспективе альтернативы? Есть ли другой вариант, который бьет их обоих? вам нужно изменить фабричный метод тоже (добавить новую запись в словаре) более гибкое решение, которое не требует, чтобы не изменяя фабричный метод независимо от того, сколько новых объектов вы добавите, будет держать имя класса зрения ответственного для визуализации объекта данных внутри самого объекта данных. Но что связывает модель с точки зрения и как-то не чувствует себя хорошо для модели, чтобы предоставить информацию о визуализации. Итак, какой из этих двух являются более долгосрочной перспективе альтернативы? Есть ли другой вариант, который бьет их обоих? вам нужно изменить фабричный метод тоже (добавить новую запись в словаре) более гибкое решение, которое не требует, чтобы не изменяя фабричный метод независимо от того, сколько новых объектов вы добавите, будет держать имя класса зрения ответственного для визуализации объекта данных внутри самого объекта данных. Но что связывает модель с точки зрения и как-то не чувствует себя хорошо для модели, чтобы предоставить информацию о визуализации. Итак, какой из этих двух являются более долгосрочной перспективе альтернативы? Есть ли другой вариант, который бьет их обоих? т чувствовать себя за модель, чтобы предоставить информацию о визуализации. Итак, какой из этих двух являются более долгосрочной перспективе альтернативы? Есть ли другой вариант, который бьет их обоих? т чувствовать себя за модель, чтобы предоставить информацию о визуализации. Итак, какой из этих двух являются более долгосрочной перспективе альтернативы? Есть ли другой вариант, который бьет их обоих?
Meda
1

голосов
1

ответ
2.7k

Просмотры

Как использовать фабричный шаблон проектирования с GenericDAO?

Я хочу, чтобы применить общий шаблон дизайна для моего DAO слоя, так что я могу переключаться между третьей стороной ОРМ легко (Hibernate, JPA и т.д.). Видимо, у нас есть некоторые общие методы для всех DAO, как: общественная пустота создания (T) юридического лица; общественного недействительного обновление (T объект); общественного недействительными удалить (рк Object); общественных Т чтения (Pk Object); Список общественности ReadAll (); Все объекты DAO должны наследовать эти методы плюс дополнительные методы, специфичные для каждого DAO, я нашел следующий шаблон дизайна, подходящий для меня, но я не знаю, как использовать его для того, чтобы иметь все общие методы и специализированные один появляется на том же DAO ссылка: Во-первых, мы сделаем интерфейс для всех распространенных методов: интерфейс GenericDAOINT общественности {общественного недействительное создание (T) юридическое лицо; общественного недействительного обновление (T объект); общественного недействительными удалить (рк Object); общественных Т чтения (Pk Object); Список общественности ReadAll (); } И мы будем делать абстрактный класс, который реализует этот интерфейс: общественный абстрактный класс GenericDAOHibernate реализует GenericDAOINT {частный класс persistentClass; частная сессия сессия; частные статические SessionFactory SessionFactory; частные статический Logger ЛЕСОЗАГОТОВИТЕЛИ = Logger.getLogger ( "InfoLogging"); общественного GenericDAOHibernate (Т theClass) {this.persistentClass = (класс) theClass; сессия = sessionFactory.openSession (); } Общественного класса getPersistentClass () {вернуть persistentClass; } Общественного недействительными setPersistentClass (класс persistentClass) {this.persistentClass = persistentClass; .} {Статическое SessionFactory = новая конфигурация () настройки ( "hibernate.cfg.xml") .buildSessionFactory (); } GetSession общественности Session () {возвращение сессии; } Общественного недействительными создать (T объект) {// реализация} общественного недействительными обновление (T лица) {} общественного недействительными удалить (Object рк) {} общественного T чтения (рк Object) {} общественного Список ReadAll () {}} После этого мы сделаем DAOFactory, что позволит мне переключаться между различными ORM гладко: общественный абстрактный класс DAOFactory {общественности статической DAOFactory деЫпзЬапсе (класс фабрики) {попробуйте {возвращение (DAOFactory) factory.newInstance (); } Поймать (Exception е) {певд RuntimeException ( "Не удалось создать DAOFactory:" + фабрика); }} // возвращает ссылку на любой желаемый дао, чтобы вызвать специализированные методы общественного абстрактного RegionHome getRegionDAO (); общественный абстрактный ServicesHome getServicesDAO (); общественный абстрактный StatusHome getStatusDAO (); } Далее мы будем делать DAOFactory для спящего режима или любого другого сменного ОРМ: общественный класс DAOFactoryHibernate расширяет DAOFactory {общественного GenericDAOHibernate instantiateDAO (класс daoClass) {попробуйте {GenericDAOHibernate дао = (GenericDAOHibernate) daoClass.newInstance (); // исключение здесь возвращают дао; } Задвижка (Исключение е) {System.out.println (e.toString ()); бросить новый RuntimeException ( "Невозможно создать DAO:" + daoClass, е); }} @Override общественного RegionHome getRegionDAO () {// TODO автоматическая генерация метод возврата заглушки нуль; } @Override общественного ServicesHome getServicesDAO () {// TODO автоматическая генерация метод возврата заглушки нуль; } @Override общественного StatusHome getStatusDAO () {// TODO автоматическая генерация метод возврата заглушки нуль; }}, Чтобы добавить специализацию каждый DAO мы сделаем интерфейс для каждого DAO, что интерфейс будет распространяться GenericDAOINT включать общие методы в каждом DAO для ServicesDAO мы сделаем следующее: интерфейс ServicesDAO общественности расширяет GenericDAOINT {общественного недействительного specializedMethod (); } И, наконец, мы сделаем конкретный класс для ServicesDAO специфического для Hibernate следующим образом: общественный класс ServicesDAOHibernate расширяет GenericDAOHibernate реализует ServicesDAO {общественный ServicesDAOHibernate (класс theClass) {супер (theClass); // TODO Авто-конструктор генерируется окурок} @Override общественный недействительный specializedMethod () {System.err.println ( "Специализированный метод"); }} Я думаю, что эти картины облегчают процесс переключения между ОРМ легко и гибкой, но с другой стороны, я говорил вам о том, что я хочу, чтобы назвать все методы (Common + специализированные) по той же ссылке для каждого DAO, я попробовал следующий код клиента: тест общественного класса {государственной статической силы основных (String арг []) {DAOFactoryHibernate DFH = (DAOFactoryHibernate) DAOFactory.getInstance (DAOFactoryHibernate.class); ServicesDAOHibernate serviceObjectDAO = (ServicesDAOHibernate) DFH.instantiateDAO (ServicesDAOHibernate.class); serviceObjectDAO.specializedMethod (); } Но я получаю следующее исключение: исключение в потоке «основного» java.lang.
Java Player
1

голосов
1

ответ
330

Просмотры

Завод для вспомогательных классов со статическими методами?

У меня есть несколько вспомогательных классов (? Расширяет HelperBase), которые имеют только государственные статические методы. Я хотел бы иметь что-то похожее на то, что фабрика (с одноплодной поддержкой), но так как нет необходимости в случае, я не уверен, куда идти лучше. В конце концов, я хотел бы иметь что-то вроде: перечисление HELPER_TYPE {} ​​Type_A абстрактного класса HelperBase {аннотации аннулируется делать (); статический HelperBase getHelper (тип HELPER_TYPE) {// ...}} Класс Helper1 расширяет HelperBase {статической силы doImpl () {// ...} осущ здесь пустота делать () {doImpl (); }} // ... а затем: HelperBase помощник = HelperBase.getHelper (HELPER_TYPE.Type_A); helper.do (); Есть ли способ лучше ? Любое предложение будет оценено.
thelost
1

голосов
1

ответ
1k

Просмотры

как использовать одноэлементные и / или фабричные модели в бизнес-логике

Я понимаю, цель одноэлементных и фабричных моделей, однако у меня есть сомнения в ее реализации. Моя проблема заключается в том, что всякий раз, когда мне нужно вызвать метод из УСКА, то у меня есть создать экземпляр класса BLL (см конца коды ниже). Таким образом, я не уверен, если это правильная реализация синглтона шаблона. Я постараюсь кратко объяснить слои, которые я использую в течение многих лет в моем приложении: DataAccessLayer общественного запечатанного класс DataAccess {частного статический путь только для чтения строки = «SqlServerDAL»; общественности статической IDAL.IPost CreatePostInstance () {строка имя класса = "SqlServerDal.Post" Возвращение (IDAL.IPost) Assembly.Load (путь) .CreateInstance (имя класса))}} InterfaceDataAccessLayer общедоступный интерфейс IPost {IList GetPostsOfUser (Guid идентификатор пользователя); } SQLServerDataAccessLayer общественного класса Post: IPost {публичный виртуальный IList GetPostsOfUser (Guid идентификатор пользователь) {// Sql код для извлечения данных и создания IList}} открытого класса модель класса PostInfo {} бизнес-логика уровня общественного класса PostBLL {частного статический IPost чтение Даль = DALFactory.DataAcess.CreatePostInstance (); общественного IList GetPostsOfUser (Guid идентификатор пользователя) {вернуться dal.GetPostsOfUser (USERID); }} И, я называю класс BLL, как это из ASPX страниц: PostBLL managePost = новый PostBLL (); managePost.GetPostsOfUser (идентификатор пользователя); Являются ли эта структура и использование шаблона подходящей? Я использовал это в течение многих лет, но не уверен, если это является эффективным и правильным.
renakre
1

голосов
1

ответ
58

Просмотры

Фабрика - что шаблон дизайна является то, что?

Я новичок в области шаблонов проектирования, и я стараюсь, чтобы получить повесить вещи. Я слышал несколько раз о «фабрике» или «фабричной модели», которые люди используют, но когда я начал изучать шаблоны проектирования (в настоящее время я читаю книгу GoF) Я узнал, что нет на самом деле нет такого понятия, как «завод паттерн». Книга GoF описывает две модели, связанные с заводами: «абстрактную завод» и «фабричный метод». Так что мой вопрос заключается в следующем - когда люди говорят, что только «завод» (без добавления чего-либо еще), дизайн которого шаблон ли они на самом деле означает? Я нашел 2 источник прикасаясь этим вопросом: http://en.wikipedia.org/wiki/Factory_%28object-oriented_programming%29#Terminology вопросов относительно шаблона Factory Однако я м до сих пор не уверен, что ответ. Является ли один конкретный шаблон проектирования упоминается как «фабрика», или я должен всегда попросить кого указать, что они означают?
NPS
1

голосов
1

ответ
44

Просмотры

экземпляр проекта (то есть прототипа) объекта (например, турель) с завода без дублирования кода

Изображая его с игрой, это сделает проблему наиболее описываться. В башне обороны игру, что игрок может построить много типов башенки, вот код турели завода: - Entity * createTurret (EnumTurretType turretType) {Entity * револьверная = ...; переключатель (turretType) {случай FIRE_TURRET: {GraphicObject * fireCG = graphicFactory () -> создать (FIRE); // .... инициализировать несколько сетки, и несколько твердых предметов физико turret-> attachComponent (GraphicObject); }перерыв; случай ICE_TURRET: {// ......} перерыв; // .... 20-30 типов} возвращение турели; } Все хорошо до сих пор. Игра играть, и все довольны. Теперь это шаг, чтобы позволить игрокам строить башни с помощью мыши, и было бы здорово, если игрок может видеть силуэт (например, выцветанию голограмма) турели в то время как мышь движется вокруг. Вопрос: Как это должно быть реализовано без дублирования кода? Мои бедные подходы 1. Создать реальную башню, а затем переместить башню вместе с мышью турель будет функционировать как реальную, аварии с другой башней и стрелять - даже это только прототип, который таскает игрок. Борьба является создание магического флага, которые делают башню, как «прототип» (ака. Инвалидов). Это лечение должно распространяться среди многой игры части логики - проверить, была ли определенная турель отключить или нет .... пуля, является ли столкновение с «ОТКЛЫ» башенкой ... так далее. Это утомительно, вызывает ошибку, и уменьшить читаемость кода и немного ремонтопригодности. 2. Скопируйте код выше, а затем удалить, не относятся вещи Скопируйте и вставьте часть только графического объекта. Если есть какие-либо графическое изображение, которое связано с гейм-логике, должны быть повторно зашиты в графическом стиле. Например: - // псевдокод Физическая пушка будет 3 метра над основанием турели в; Нарисуйте графический пистолет на физическом положении пушки; ... должны быть преобразованы в ... Графическая пушка будет 3 метра над основанием турели в; Я должен сделать это для каждого типа башенки, и при изменении конструкции Turret, я должен буду обновить другую тоже. Это вызовет проблемы ремонтопригодности. и когда изменение конструкции Turret, я должен будет обновить другие тоже. Это вызовет проблемы ремонтопригодности. и когда изменение конструкции Turret, я должен будет обновить другие тоже. Это вызовет проблемы ремонтопригодности.
javaLover
1

голосов
1

ответ
203

Просмотры

C ++ не создание объекта кучи Factory с защищаемой конструктор и конструктор копирования

Из-за особенности RAII я хочу, чтобы мои объекты быть размещаемыми только на стеке, а также как создание объекта должно быть передано на специализированные заводы я не хочу ocpy конструктора, чтобы быть доступным для использования. Так что я сделал что-то вроде этого. шаблонный класс Создатель: общественный продукт {общественности: статический продукт создавать (арг ... арг) {возвращение продукта (арг ...); }}; Класс ProtectedClass {ProtectedClass (Const ProtectedClass & aThat) = удалить; ProtectedClass & оператор = (Const ProtectedClass & aThat) = удалить; защищенный: ProtectedClass () {}}; класс Spawner {общественности: ProtectedClass getProtectedClass () {возвращение Создатель :: Create (); }} Int основной () {Spawner Spawner; // мне нужно protectedClass быть заключена в пределах этого кадра ProtectedClass protectedClass = spawner.getProtectedClass (); // эээ копия конструктор delted} Я могу сделать что-то вроде этого шаблонного класса Creator: общественного продукта {общественности: Создатель (арг ... арг): product_ (арг ...) {} продукт и получить () сопзЬ {возвращение product_; } Частные: product_ продукта; }; класс Spawner {общественности: станд :: unique_ptr getProtectedClassCreator () {вернуть новый автор (); }} Int основной () {Spawner Spawner; станд :: unique_ptr создатель = станд :: ход (spawner.getProtectedClassCreator ()); ProtectedClass & protectedClass = creator-> Get (); } Но это не похоже, чтобы выглядеть правильно. Какие другие способы борьбы с этим? // эээ копия конструктор delted} Я могу сделать что-то вроде этого шаблонного класса Creator: общественного продукта {общественности: Создатель (арг ... арг): product_ (арг ...) {} продукт и получить () сопзЬ {возвращение product_; } Частные: product_ продукта; }; класс Spawner {общественности: станд :: unique_ptr getProtectedClassCreator () {вернуть новый автор (); }} Int основной () {Spawner Spawner; станд :: unique_ptr создатель = станд :: ход (spawner.getProtectedClassCreator ()); ProtectedClass & protectedClass = creator-> Get (); } Но это не похоже, чтобы выглядеть правильно. Какие другие способы борьбы с этим? // эээ копия конструктор delted} Я могу сделать что-то вроде этого шаблонного класса Creator: общественного продукта {общественности: Создатель (арг ... арг): product_ (арг ...) {} продукт и получить () сопзЬ {возвращение product_; } Частные: product_ продукта; }; класс Spawner {общественности: станд :: unique_ptr getProtectedClassCreator () {вернуть новый автор (); }} Int основной () {Spawner Spawner; станд :: unique_ptr создатель = станд :: ход (spawner.getProtectedClassCreator ()); ProtectedClass & protectedClass = creator-> Get (); } Но это не похоже, чтобы выглядеть правильно. Какие другие способы борьбы с этим? ) {} Продукт и получить () сопзЬ {возвращение product_; } Частные: product_ продукта; }; класс Spawner {общественности: станд :: unique_ptr getProtectedClassCreator () {вернуть новый автор (); }} Int основной () {Spawner Spawner; станд :: unique_ptr создатель = станд :: ход (spawner.getProtectedClassCreator ()); ProtectedClass & protectedClass = creator-> Get (); } Но это не похоже, чтобы выглядеть правильно. Какие другие способы борьбы с этим? ) {} Продукт и получить () сопзЬ {возвращение product_; } Частные: product_ продукта; }; класс Spawner {общественности: станд :: unique_ptr getProtectedClassCreator () {вернуть новый автор (); }} Int основной () {Spawner Spawner; станд :: unique_ptr создатель = станд :: ход (spawner.getProtectedClassCreator ()); ProtectedClass & protectedClass = creator-> Get (); } Но это не похоже, чтобы выглядеть правильно. Какие другие способы борьбы с этим? getProtectedClassCreator ()); ProtectedClass & protectedClass = creator-> Get (); } Но это не похоже, чтобы выглядеть правильно. Какие другие способы борьбы с этим? getProtectedClassCreator ()); ProtectedClass & protectedClass = creator-> Get (); } Но это не похоже, чтобы выглядеть правильно. Какие другие способы борьбы с этим?
user1079475
1

голосов
3

ответ
562

Просмотры

Как загрузить заводской шаблон динамически с карты?

У меня есть различные типы событий, как показано ниже. В общем у меня есть больше событий. EVENTA EventC EventD событие В EventE Ниже приведен код, где я буду получать каждый тип события: (! Closed.get ()) публичный запуск недействительными () {попробуйте {{в то время как ConsumerRecords записи = consumer.poll (10000); // Обработать новые рекорды (ConsumerRecord записи: записей) {GenericRecord полезная нагрузка = decoder.decode (record.value ()); Строка типСобытие = String.valueOf (payload.get ( "типСобытие")); Строка eventMapHolder = String.valueOf (payload.get ( "eventMapHolder")); Карта eventHolder = parseStringToMap (eventHolder); // здесь типСобытия будет «EVENTA», «событие В» и так далее // Передает типСобытие, чтобы получить индивидуальный завод для этого типа события // а затем передать eventHolder определенного методу той фабрики класса, который вызывает соответствующий метод запроса. }}} Поймать (Exception е) {// журнал ошибки}} Для каждого события, мне нужно выполнять различные запросы к базе данных, но для большинства из них по крайней мере, мне нужно выполнить один запрос к базе данных, которая является общей для всех из них. Например: EVENTA -----> QueryA, QueryB ----- событие В> QueryA EventC -----> QueryA, QueryC EventD -----> QueryA, QueryD EventE -----> Ниже будет быть поток: EVENTA -----> QueryA, QueryB ----- событие В> QueryA eventHolder EventC -----> QueryA, QueryC EventD -----> QueryA, QueryD EventE -----> Скажем так, я получаю «EVENTA», как типСобытия в коде у меня есть в моем вопросе, то я передам eventHolder карту к способу (давайте называть это, как QueryA) и в рамках этого метода, я буду сделать некоторые операции на этой карте и возвращает новую карту. И тогда эта новая карта будет передана другим метод, то (давайте называть это QueryB), а затем снова мы будем делать некоторые операции над этим, а затем вернуть другую карту, а затем, что карта будет вернуться к абоненту. Теперь предположим, что «событие В» приходит как типСобытия в коде у меня есть в моем вопросе, то я передам eventHolder карту к способу (давайте называть это, как QueryA) и в рамках этого метода, я буду делать некоторые операции на этой карте и возвращать новая карта. И тогда эта карта будет передана обратно к абоненту. Теперь давайте говорить «EventE» приходит как типСобытие в коде у меня есть в моем вопросе, то я передам eventHolder карты к классу EventE и и так как нет ничего, что мы должны сделать для этого случая, то я передам эту карту, как это возвращается к абоненту. Вопрос: Какой шаблон дизайна следует использовать для такого рода проблемы? Я хочу, чтобы избежать использования, если / другое или переключить здесь bcoz вообще у меня много типов событий, так думающих создания индивидуального завода для них, которые мы можем загрузить его во время выполнения динамически, передавая значение типСобытия. Я знаю, что все типСобытии заранее, так что я могу статически инициализировать все заводы, поставив его на карте, а затем, как только типСобытия приходит, когда мы бежим код, я могу загрузить отдельные заводы по карте. Как я могу использовать абстрактный узор фабрики здесь, чтобы сделать это, если это правильный шаблон дизайна для этой проблемы? Я хочу передать " как ключ к фабрике, которая будет возвращать экземпляр этого типа события. Так скажем, я передам «EVENTA» на заводе, а затем он будет возвращать класс фабрики для «EVENTA», а затем мы будем называть конкретный метод этого класса, который внутренне вызывает метод QueryA и тогда мы называем метод QueryB и в конце концов вернет карту, которую я буду печатать его в коде выше. А Аналогично для других типов событий. Я думал, что-то на этой земле: Я не уверен, возможно ли это вообще с рисунком фабричной или может быть какой-то другой шаблон дизайна. (Мои правила именования могут быть перепутались, я только что пришел с теми ниже именами) EventFactory eventFactory = EventTypeFactory.getInstance () getFactory (типСобытия). Держатель карты = eventFactory.execute (eventHolder); как ключ к фабрике, которая будет возвращать экземпляр этого типа события. Так скажем, я передам «EVENTA» на заводе, а затем он будет возвращать класс фабрики для «EVENTA», а затем мы будем называть конкретный метод этого класса, который внутренне вызывает метод QueryA и тогда мы называем метод QueryB и в конце концов вернет карту, которую я буду печатать его в коде выше. А Аналогично для других типов событий. Я думал, что-то на этой земле: Я не уверен, возможно ли это вообще с рисунком фабричной или может быть какой-то другой шаблон дизайна. (Мои правила именования могут быть перепутались, я только что пришел с теми ниже именами) EventFactory eventFactory = EventTypeFactory.getInstance () getFactory (типСобытия). Держатель карты = eventFactory.execute (eventHolder); скажу я передам «EVENTA» на завод, а затем он будет возвращать класс фабрики для «EVENTA», а затем мы будем называть конкретный метод этого класса, который внутренне вызывает метод QueryA и тогда мы называем метод QueryB и в конце он будет вернуть карту, которую я напечатаю его в приведенной выше коде. А Аналогично для других типов событий. Я думал, что-то на этой земле: Я не уверен, возможно ли это вообще с рисунком фабричной или может быть какой-то другой шаблон дизайна. (Мои правила именования могут быть перепутались, я только что пришел с теми ниже именами) EventFactory eventFactory = EventTypeFactory.getInstance () getFactory (типСобытия). Держатель карты = eventFactory.execute (eventHolder); скажу я передам «EVENTA» на завод, а затем он будет возвращать класс фабрики для «EVENTA», а затем мы будем называть конкретный метод этого класса, который внутренне вызывает метод QueryA и тогда мы называем метод QueryB и в конце он будет вернуть карту, которую я напечатаю его в приведенной выше коде. А Аналогично для других типов событий. Я думал, что-то на этой земле: Я не уверен, возможно ли это вообще с рисунком фабричной или может быть какой-то другой шаблон дизайна. (Мои правила именования могут быть перепутались, я только что пришел с теми ниже именами) EventFactory eventFactory = EventTypeFactory.getInstance () getFactory (типСобытия). Держатель карты = eventFactory.execute (eventHolder); и тогда мы будем называть конкретный метод этого класса, который внутренне вызывает метод QueryA и тогда мы называем метод QueryB и в конце концов вернет карту, которую я буду печатать его в коде выше. А Аналогично для других типов событий. Я думал, что-то на этой земле: Я не уверен, возможно ли это вообще с рисунком фабричной или может быть какой-то другой шаблон дизайна. (Мои правила именования могут быть перепутались, я только что пришел с теми ниже именами) EventFactory eventFactory = EventTypeFactory.getInstance () getFactory (типСобытия). Держатель карты = eventFactory.execute (eventHolder); и тогда мы будем называть конкретный метод этого класса, который внутренне вызывает метод QueryA и тогда мы называем метод QueryB и в конце концов вернет карту, которую я буду печатать его в коде выше. А Аналогично для других типов событий. Я думал, что-то на этой земле: Я не уверен, возможно ли это вообще с рисунком фабричной или может быть какой-то другой шаблон дизайна. (Мои правила именования могут быть перепутались, я только что пришел с теми ниже именами) EventFactory eventFactory = EventTypeFactory.getInstance () getFactory (типСобытия). Держатель карты = eventFactory.execute (eventHolder); Я не уверен, возможно ли это вообще с рисунком фабричной или может быть какой-то другой шаблон дизайна. (Мои правила именования могут быть перепутались, я только что пришел с теми ниже именами) EventFactory eventFactory = EventTypeFactory.getInstance () getFactory (типСобытия). Держатель карты = eventFactory.execute (eventHolder); Я не уверен, возможно ли это вообще с рисунком фабричной или может быть какой-то другой шаблон дизайна. (Мои правила именования могут быть перепутались, я только что пришел с теми ниже именами) EventFactory eventFactory = EventTypeFactory.getInstance () getFactory (типСобытия). Держатель карты = eventFactory.execute (eventHolder);
john
1

голосов
1

ответ
32

Просмотры

Returning different versions of set of data

Таким образом, у меня есть класс со статическим методом, который использует EF, чтобы получить определенный набор списков рассылки и карты класса. открытый статический Список GetMailingListsForUser (пользователь IUsersAccess, IProspectorDataSource дБ) {вернуться db.MailingLists.Where (х => x.UserID == user.UserID) .ToList () .Select (у => новый MailingList (у, дБ)). К списку(); } Теперь, хотя у меня есть прок, который будет возвращать MailingList плюс некоторые дополнительные вещи. Я не хочу, чтобы добавить эти дополнительные столбцы (которые будут использоваться в других разделах и функциональных областей) к этому классу. Что это лучший способ для решения этой проблемы? Я имею в виду, на заводе шаблон, который будет генерировать другой класс, который реализует различные контракты (интерфейсы), основанные на Что необходимо. Собираюсь попробовать реализовать его и разместит код / ​​работу после завершения. Было интересно, что другие люди сделали в тех случаях, как это, и если есть какие-то более эффективные способы решения этой проблемы. Edit: (некоторая дополнительная информация, чтобы помочь людям понять, что я имею в виду). общественного класса MailingList {общественного ИНТ MailingListID {получить; задавать; } Публичная строка Name {получить; задавать; } публичная строка Комментарии {получить; задавать; } Общественности теги {получить; задавать; } Общественного ИНТ Идентификатор_пользователя {получить; задавать; } Общественного System.DateTime DateCreated {получить; задавать; } Публичная строка CreatedBy {получить; задавать; } Общественного System.DateTime LastModified {получить; задавать; } Публичная строка ModifiedBy {получить; задавать; } Публичный список MailingListAddresses {получить; задавать; } Это определение объекта, который мы возвращаем. Теперь есть новый случай, когда я собираюсь вернуть некоторые дополнительные столбцы из прока и карта на MailingList. Так что я мог бы просто добавить свойства здесь, но вопрос MailingListAddresses будет нулевым, поскольку они не будут возвращены в хранимой процедуре. Так есть ли способ для сопоставления с определенными свойствами и не должно возвращать нуль для MailingListAddresses к переднему концу каждый раз.
SharpCode
1

голосов
1

ответ
1.3k

Просмотры

правильно переопределить __new__ в Python3

Так что я пытаюсь переопределить __new__ и пусть она существует как фабрика для создания производных экземпляров. После прочтения немного на SO, я нахожусь под впечатлением, что я должен быть вызывающим __new__ на производный экземпляра, а также. BaseThing класса BaseThing: Защита __init (я, имя, ** kwargs): self.name = имя # метода, которые будут получена ThingFactory класса Thing (BaseThing): Защита __new __ (КНК, имя, ** kwargs): если имя == ' A ': возвращение A .__ нового __ (имя, ** kwargs), если имя == 'B': возвращение B .__ нового __ (имя, ** kwargs) Защита __init __ (самоповреждения, * арг, ** kwargs): супер (). __init __ (имя, ** kwargs) # методы должны быть реализованы конкретным классом (так же, как и в базе) класс A (BaseThing): четкости __init __ (сам, имя, ** kwargs): супер () .__ INIT __ (имя, ** kwargs) класса B B (BaseThing): Защиту __init __ (я, имя, ** kwargs): супер () .__ INIT __ (имя, ** kwargs), что я ожидал, что это было бы просто работать. >>> а = Thing ( 'A') дает мне TypeError: объект .__ новый __ (X): X не является типом объекта (ул) Я немного смущен этим; когда я просто вернуть конкретный экземпляр производного класса, он просто работал. т.е. Защита __new __ (КНК, имя, ** kwargs): если имя == «A»: возвращение А (имя), если имя == «B»: возвращение B (имя) я, однако, не думает, что этого правильный путь возвращения в __new__; он может дублировать вызовы __init__. когда я проверяю подпись __new__ в объекте, кажется, будет это один: @staticmethod # известного случаем __new__ Защита __new __ (ЦБС, * больше): # известные частный случай объекта .__ new__ «»»Создать и вернуть новый объект. См помощи (типа) для точной подписи. «»»Пройти я не ожидал, что это был один;.. Я бы ожидать, что она пришла с арг и kwargs, а я должен был сделать что-то здесь, мне кажется, что мне нужно, чтобы наследовать объект непосредственно в моей базе, но может кто-нибудь объяснить правильный способ сделать это?
stucash
1

голосов
1

ответ
315

Просмотры

Factory pattern return generic types in c#

открытый интерфейс IRequestProcessor {T Перевести строку (caseId); } Класс xyzReqProcessor общественности: IRequestProcessor {xyzType процесс общественного (строка xyzMsg) {возвратить новый хуг (); }} VHDReqProcessor общественный класс: IRequestProcessor {VHDType процесс общественного (строка xyzMsg) {вернуть новый виртуальный жесткий диск (); }} До здесь она хорошо выглядит. Теперь я хочу, чтобы инициализировать класс с заводом, но это не в состоянии вернуть тип IRequestProcessor объекта. общественности статической IRequestProcessor Get (FormType translatorType) {IRequestProcessor retValue = NULL; переключатель (translatorType) {случай EFormType.VHD: retValue = новый VHDProcessor (); перерыв; Случай EFormType.XYZ: retValue = новый XYZProcessor (); перерыв; } Если (retValue == NULL) бросить новый Exception ( "Нет запроса процессор не найден"); вернуться retValue;
Milan chavda
1

голосов
2

ответ
205

Просмотры

Метод фабрики - нужен ли класс приложения абстрактным?

GOF шаблон дизайна книга Эриха Gamma говорит: В то время как приложение слова может создать несколько документов по себе, как показано ниже: Оказывается, что одно приложение может создать несколько документов. В каком случае тогда я требую, чтобы сделать класс Application абстрактным, а затем извлечь из него?
Aquarius_Girl
1

голосов
1

ответ
97

Просмотры

Метод фабрики модель использует наследование в то время как абстрактный узор фабрика использует композицию как?

Я иду через разницу между Abstract Factory Pattern против Factory Method Pattern. Я понял, что фабричный метод используется для создания одного продукта только, но Abstract Factory о создании семейств связанных или зависимых продуктов. Но как метод Factory модель использует наследование в то время как абстрактный узор фабрики использует состав неясен для меня. Я знаю, что это было предложено несколько раз, Может ли один пожалуйста, объясните с ниже код, как происходит наследование и состав? Завод Код метода класса IRose {общественности: виртуальная строка Color (аннулируются) = 0; }; класс RedRose: общественный IRose {общественности: строка Color (аннулируются) {возвращение "Красный"; }}; класс YellowRose: общественный IRose {общественности: строка Color (аннулируются) {возвращение "Желтый"; }}; класс IFactory {общественности: виртуальный IRose * Создать (строковый тип) = 0; // Завод метод создания в 90% случаев будет принимать параметр, который // определяет, какой тип объекта завод вернется. }; Класс Factory: общественный IFactory {общественности: IRose * Создать (тип строки) {если ( "Красный" == типа) возвращает новый RedRose (); если ( "желтый" == типа) вернуть новый YellowRose (); возвращать NULL; }}; INT основных () {IRose * р = NULL; IFactory * F = NULL; е = новый завод (); // Вы должны создать экземпляр фабрики р = f-> Создать ( «Красный»); соиЬ возвращать NULL; }}; INT основных () {IRose * р = NULL; IFactory * F = NULL; е = новый завод (); // Вы должны создать экземпляр фабрики р = f-> Создать ( «Красный»); соиЬ возвращать NULL; }}; INT основных () {IRose * р = NULL; IFactory * F = NULL; е = новый завод (); // Вы должны создать экземпляр фабрики р = f-> Создать ( «Красный»); соиЬ
Deepak
1

голосов
1

ответ
119

Просмотры

Symfony фабрика: инъекционные зависимости, автоматическое связывание и связывание параметров

Документы Symfony не дают полный пример использования фабрик в Symfony. В моем случае у меня есть много различных услуг, которые производят, скажем, различные фрукт APIs: BananaApiService AppleApiService PearApiService .. Каждая услуга имеет свою зависимость, зависимость есть некоторый параметр привязки: услуги: _defaults: autowire: истинная привязка: $ guzzleClientBanana: ' @ eight_points_guzzle.client.banana»$ guzzleClientApple: '@ eight_points_guzzle.client.apple' ... Услуги являются, например: # BananaApiService.php класс BananaApiService расширяет DefaultEndpointService {защищенный $ guzzleClientBanana; общественная функция __construct (GuzzleClient $ guzzleClientBanana) {$ this-> guzzleClientBanana = $ guzzleClientBanana; } Общественная функция handleRequest (ApiRequest $ apiRequest) {...}} В настоящее время я не использую шаблон фабрики, но вместо этого передавая все услуги в конструктор менеджера, который является слишком грязным и против лучших практик: # класса ApisManagerService ApisManagerService {защищенного $ BananaApiService ; защищенный $ AppleApiService; защищенный $ PearApiService; Функция __construct общественности (BananaApiService $ BananaApiService, AppleApiService $ AppleApiService, PearApiService $ PearApiService) {$ this-> BananaApiService = $ BananaApiService; // ...} общественная функция RequestDispatcher (ShoppingList $ ShoppingList): пустота {Еогеасп ($ shoppingList-> GetItems () как $ п) {переключатель ($ item-> GetName ()) {случай 'банан': $ this-> BananaApiService-> handleRequest ($ пункт); перерыв; случай 'яблоко': $ this-> AppleApiService-> handleRequest ($ пункт); перерыв; // ...}}}} Этот RequestDispatcher вызывается через некоторое событие абонента: класс EasyAdminSubscriber реализует EventSubscriberInterface {функция triggerApisManagerService общественности (GenericEvent $ события): пустота {/ * @var $ сущность ShoppingList * / $ объект = $ event-> getSubject (); (! $ Сущность InstanceOf ShoppingList) если {возвращение; } $ This-> apisManagerService-> RequestDispatcher ($ юридическим лицом);
numediaweb
1

голосов
2

ответ
60

Просмотры

Python Astroid (Pylint) How to mimic inheritance when class passes through factory?

Где я работаю, мы широко используем SQLAlchemy. Сверхурочные мы разработан базовый класс для наших моделей, который соответствует нашим потребностям. Но когда приходит время, чтобы нибудь вкусненькое наш код, мы всегда перегружены предупредив мы знаем, мы могли бы игнорировать. Но до сих пор мы только сумели сделать это во всем мире с помощью директивы сгенерированных-членов, которая стремится скрыть проблемы. Так что я начал задаваться вопросом: «Как я мог научить, что pylint?» Вот ситуация: от sqlalchemy.ext.declarative класса импорта declarative_base CustomBaseModel (объект): Защита функция (Я): пройти Model = declarative_base (ЦБС = CustomBaseModel) Классная вещь (модель): идентификатор = Column (Integer, primary_key = True) метка = Column (String (64)) т = Thing () t.feature () # Pylint говорит вещь не `` функция) метод (. Так что я хотел бы сделать, это сказать pylint, что модель является на самом деле, более или менее CustomBaseModel. Следовательно, это больше похоже я должен использовать inference_tip на возвращаемое значение вызова declarative_base (). Но я не совсем уверен в том, как действовать. И похоже, что API изменилось с течением времени, и я никуда не пойду. Другая стратегия, которую я смотрел на это атрибуты копии, найденные на CustomBaseModel к модели. Но это не работает. Действительно для Pylint модели, кажется, просто имя ... он потерял то, что он и понятия не имеет, что это класс. Любые намеки были бы оценены ... Действительно для Pylint модели, кажется, просто имя ... он потерял то, что он и понятия не имеет, что это класс. Любые намеки были бы оценены ... Действительно для Pylint модели, кажется, просто имя ... он потерял то, что он и понятия не имеет, что это класс. Любые намеки были бы оценены ...
Cans
1

голосов
1

ответ
55

Просмотры

Использование Factory Pattern в Spring Batch FileHeaderFieldSetMapper

Я настройка Spring Batch работы, которая будет обрабатывать несколько записи файла с. Один из записи, имеющие следующую структуру. Штат Индиана, RecCode, AccNum, RecTypeDesc, EffectiveDate, CreditAmount, DebitAmount, BatchNumber, NumberOfTrasactions 5, 20, 100, PRL, 12084, As0, 0, 3, 1 В зависимости от значения в поле RecordCode, он будет либо оплаты записи или разворот записи. Я настраиваю на PatternMatchingCompositeLineMapper читать типы записей в файле. Я создал следующие 2 реализаций FieldSetMapper классов @Component ( "paymentBatchFieldSetMapper") общественный класс PaymentBatchFieldSetMapper реализует FieldSetMapper {@Override общественного PaymentBatch mapFieldSet (Fieldset Fieldset) бросает BindException {// TODO Auto-генерируемый метод заглушки возврат нуль; }}, И второй, как, @Component ( "reversalBatchFieldSetMapper") общественный класс ReversalBatchFieldSetMapper реализует FieldSetMapper {@Override общественного PaymentBatch mapFieldSet (Fieldset Fieldset) бросает BindException {// TODO Auto-генерируемый метод заглушки возврат нуль; }} Я создал класс фабрики следующим образом возвращать либо из выше 2, как показано ниже @Component ( «achBatchFieldSetMapperFactory») общественного класса ACHBatchFieldSetMapperFactory {@Autowired частных ApplicationContext ApplicationContext; общественного FieldSetMapper }} Я создал класс фабрики следующим образом возвращать либо из выше 2, как показано ниже @Component ( «achBatchFieldSetMapperFactory») общественного класса ACHBatchFieldSetMapperFactory {@Autowired частных ApplicationContext ApplicationContext; общественного FieldSetMapper }} Я создал класс фабрики следующим образом возвращать либо из выше 2, как показано ниже @Component ( «achBatchFieldSetMapperFactory») общественного класса ACHBatchFieldSetMapperFactory {@Autowired частных ApplicationContext ApplicationContext; общественного FieldSetMapper
AbNig
1

голосов
1

ответ
0

Просмотры

Как обрабатывать несколько заводов

Я работаю над дизайном для проекта и запустить в интересную проблему. По существу есть веб-форма, которая позволяет кому-то, чтобы создать новое задание для моей службы планировщика. Форма будет содержать такие свойства, как: Покупка Обмен Продажа Обмен Для этого предположим, что мы имеем для каждого из этих полей: Покупка Обмен: Exchange1, Обмен 2 Продам Обмен: SellExchange1, SellExchange2 я должен быть в состоянии выбрать любой из Купить обменам или продать куплю из формы, но не существует явная связь между Покупка Обмен или продажи обмена в модели домена Моего текущий дизайн должны иметь службу планировщика по созданию новой работы вызывает завод, который будет создать экземпляр поставщика для Buy биржи, которая была выбран. Оба провайдеры будут реализовывать интерфейс, содержащий метод Sell (). Мой вопрос я должен использовать второй завод для обмена распродажи, который будет вызван методом распродажи интерфейса? Поскольку логика «продажа» будет отличаться для каждой распродажи обмена Я интересно, если есть определенный шаблон дизайна для этого? Вот некоторые быстро psuedocode для моего дизайна общедоступного интерфейса IExchangeFactory () {// Создать обмен 1 или обмен 2} общественного класса ExchangeFactory: IExchangeFactory {// Либо вернуть обмен 1 или обмен 2 поставщика} класса SellExchangeFactory общественности: IExchangeFactory {// Либо возврат Продажа Обмен 1 или продать Обмен 2 провайдера} класс Exchange1Provider общественности: IExchange1Provider {общественного недействительный PerformPurchase () {{// Покупка логик} общественного недействительный Sell () {// Инстанцировать Продажу Обмен выбранный в форме}} общественного класса Exchange2Provider: IExchange2Provider {общественного недействительный PerformPurchase () {{// Покупка логик} общественного недействительный Sell () {// Использовать обмен надувательства фабрики для создания экземпляра распродажи поставщика обмена}} будет ли это правильный дизайн для решения этой проблемы? Я не был уверен, как искать этот вопрос, я не уверен, что терминология для этого IExchange2Provider {общественного недействительный PerformPurchase () {{// Покупка логик} общественного недействительный Sell () {// Использовать обмен надувательства фабрики для создания экземпляра распродажи поставщика обмена}} Будет ли это правильный дизайн для решения этой проблемы? Я не был уверен, как искать этот вопрос, я не уверен, что терминология для этого IExchange2Provider {общественного недействительный PerformPurchase () {{// Покупка логик} общественного недействительный Sell () {// Использовать обмен надувательства фабрики для создания экземпляра распродажи поставщика обмена}} Будет ли это правильный дизайн для решения этой проблемы? Я не был уверен, как искать этот вопрос, я не уверен, что терминология для этого
Reagan Kirby
1

голосов
3

ответ
0

Просмотры

Рефакторинг кода, который использует новый оператор более проверяемым

У меня есть следующий код, и я пытаюсь единичном проверить: общественные переопределения IRenderable GetRenderable () {вар знач = SomeCalculationUsingClassMemberVariables (); вернуть новый EquationRenderable (VAL); } Похоже, что я хочу использовать фабрику здесь, так что я могу отделить создание IRenderable от этого класса. Проблема заключается в том, что у меня есть многие из этих классов, которые создают различные IRenderables, которые построены по-разному, так что мне нужно было бы реализовать новый фабричный метод для каждого из них. Что это лучший способ решить эту проблему?
Shane Fulmer
1

голосов
2

ответ
0

Просмотры

Использование Dependency Injection в Spring для замены фабричной модели

В настоящее время я работаю над приложением, в котором экземпляр объекта домена D впрыскивается в приложение. Объект домен может содержать множество классов вместе в различных комбинациях и перестановок, как определено ее компонента и, следовательно, приводит ко многим различных конечных объектов D, которые я имею в виду как различные версии D. Для данной версии D, я должен заполнить примитивные значения в нем, а затем сохранить его в базу данных. Сохранение в базу данных довольно просто с помощью JPA и Hibernate. Проблема заполнения значения в D. Значения выбираются по сети с помощью протокола SNMP, а затем заполнены. Для каждой версии D, существует другая стратегия следовать, так как каждая версия D может иметь различную MIB. Я в настоящее время по образцу фабрики. Завод принимает версию D и возвращает valueRetriever для специфичны для этой версии D, которая затем используется для извлечения значений и заполнить D. Другой очевидный способ придать конфигурации ретривера в с D, а затем использовать его для извлечения конфигурация. Но мне также нужно использовать ретривера во время выполнения повторной выборки конфигурации, так что делает его нужно хранить ретривера тоже в базе данных, поэтому создание новой таблицы для каждого поисковика, который, кажется, накладных расходов в настоящее время. Мой вопрос: Может ли быть лучшим способом для получения конфигурации, т.е. имеет valueRetriever учитывая вышеприведенный сценарий с помощью инъекции зависимостей. Edit: Может АОП быть любого использования здесь? Другой очевидный способ придать конфигурации ретривера в с D, а затем использовать его для получения конфигурации. Но мне также нужно использовать ретривера во время выполнения повторной выборки конфигурации, так что делает его нужно хранить ретривера тоже в базе данных, поэтому создание новой таблицы для каждого поисковика, который, кажется, накладных расходов в настоящее время. Мой вопрос: Может ли быть лучшим способом для получения конфигурации, т.е. имеет valueRetriever учитывая вышеприведенный сценарий с помощью инъекции зависимостей. Edit: Может АОП быть любого использования здесь? Другой очевидный способ придать конфигурации ретривера в с D, а затем использовать его для получения конфигурации. Но мне также нужно использовать ретривера во время выполнения повторной выборки конфигурации, так что делает его нужно хранить ретривера тоже в базе данных, поэтому создание новой таблицы для каждого поисковика, который, кажется, накладных расходов в настоящее время. Мой вопрос: Может ли быть лучшим способом для получения конфигурации, т.е. имеет valueRetriever учитывая вышеприведенный сценарий с помощью инъекции зависимостей. Edit: Может АОП быть любого использования здесь? Может ли быть лучшим способом для получения конфигурации, т.е. имеет valueRetriever учитывая вышеприведенный сценарий с помощью инъекции зависимостей. Edit: Может АОП быть любого использования здесь? Может ли быть лучшим способом для получения конфигурации, т.е. имеет valueRetriever учитывая вышеприведенный сценарий с помощью инъекции зависимостей. Edit: Может АОП быть любого использования здесь?
Satadru Biswas
1

голосов
1

ответ
0

Просмотры

Java best practice library creation for flexible class creation (Factory Pattern, abstraction, and interfaces)

Представьте себе, я являюсь разработчиком программного обеспечения Java для производителя автомобилей. Я была поставлена ​​задача создать библиотеку, которая будет использоваться многочисленными приложениями в доме. Для каждого типа модели автомобиля, изготовленный, я создаю объект Java, представляющий эту модель. Я должен быть в состоянии отслеживать не только текущие модели, но модели прототипа. Модели прототипа будут иметь одно имя, которое, скорее всего, изменится, как только она идет в производство. Мне нужно, чтобы иметь возможность использовать библиотеку для учета прототипов и изгибаться с изменением названия, когда они включены в производство. Мой вопрос, что это лучший подход для этого? Вот мои мысли ... Я читал несколько книг для идей, чтобы наилучшим образом справиться с этой ситуацией. Сразу же мой ум прыгает с помощью шаблона фабрики. Я бы CarModelFactory класса, который будет возвращать конкретный объект для каждой модели. Например: общественный класс CarModelFactory () {общественный CarModel createCivicModel () {} общественного CarModel createAccordModel () {} общественного CarModel createPrototype1 () {возвратить новый ModelX (); } Общественного CarModel createPrototype1 () {возвратить новый ModelY (); } Будет ли это лучший подход? Я чувствую, что должен быть еще один слой абстракции. Проблемы я вижу, являются: 1) Что делать, если ModelX идет в производство, создать метод для него и поставить что-то еще в методе createPrototype1, теперь программы, которые называют этот метод получить неправильный объект 2) Как справиться с ModelX меняет свое название? Я благодарю вас за ваше время! } Общественного CarModel createPrototype1 () {возвратить новый ModelY (); } Будет ли это лучший подход? Я чувствую, что должен быть еще один слой абстракции. Проблемы я вижу, являются: 1) Что делать, если ModelX идет в производство, создать метод для него и поставить что-то еще в методе createPrototype1, теперь программы, которые называют этот метод получить неправильный объект 2) Как справиться с ModelX меняет свое название? Я благодарю вас за ваше время! } Общественного CarModel createPrototype1 () {возвратить новый ModelY (); } Будет ли это лучший подход? Я чувствую, что должен быть еще один слой абстракции. Проблемы я вижу, являются: 1) Что делать, если ModelX идет в производство, создать метод для него и поставить что-то еще в методе createPrototype1, теперь программы, которые называют этот метод получить неправильный объект 2) Как справиться с ModelX меняет свое название? Я благодарю вас за ваше время!
user662793
1

голосов
1

ответ
0

Просмотры

Создание модели завода с PHP MVC

Я написал приличную фреймворку на основе некоторых твердых учебников и заимствуя от торта. Это подходит для наших потребностей, потому что мы уже есть приложение, на которое мы строим. Моя ситуация выглядит следующим образом: У меня есть модель, которая описывает скажем, команду. Эта команда имеет свойства, методы, бла-бла-бла. В моем контроллере я могу создать одну команды, довольно легко: $ команды = новый Team ( «Шершень») Он отлично работает. Однако, скажем, я хочу иметь метод, который возвращает все команды для данной страны? Перед использованием MVC я бы просто сделать класс фабрики и сделать: $ команд = Array (); $ команд = TeamFactory :: getTeams ( 'Canada') Это возвращает массив команд. Я предполагаю, что я все еще могу это сделать, но мой основной вопрос, где бы я храню эти заводские классы в моей структуре папок? У меня есть папка под названием «Lib» в корневом каталоге, где я держу различные классы, которые я использую на регулярной основе. Моя единственная забота в том, что папка собирается стать большим перемешан беспорядком «Team.Factory.php», «Player.Factory.php», смешивает со всеми другими вещами. Мой собственный инстинкт может быть, сделать вложенную папку внутри «Lib» под названием «фабрики», а затем идти вперед. Является ли это «не-MVC»? Amidoingthisrite?
MikeMurko
1

голосов
1

ответ
0

Просмотры

Factory Design Pattern Extend

I am reading Head First Design Pattern and at chapter of Factory. I am thinking to change one my working code to implement it. First I create IAction and ActionFactory with GetAction, from IAction I create UploadDatabase, CopyFile, UploadSharepoint, etc. This is in DLL and can be call from a exe. This is easy and done. Then I plan to create AutoCADAction from IAction which include action like Print, Script, etc. Those actions only can be run inside AutoCAD. Now I like to create AutoCADActionFactory with override GetAction, it will creaet ActionFactory's, and AutoCADAction as well. Now I lost. Here is the sample code: In ActionFactory.GetAction public IAction GetAction(ActionType myActionType) { switch (myActionType) { case ActionType.UploadDatabase: return new UploadDatabase(); case ActionType.CopyFile: return new CopyFile(); case ActionType.UploadSharepoint: return new UploadSharepoint(); } } How I code my AutoCADActionFactory.GetAction, Is this correct? public AutoCADAction GetAction(ActionType myActionType) { return Base.GetAction; switch (myActionType) { case ActionType.Print: return new Print(); case ActionType.Script: return new Script(); ... } } Thank you,
weslleywang
1

голосов
1

ответ
0

Просмотры

Инъекция в Rhino издевается «фальшивой» Фабрика

Я пытаюсь проверить класс, инстанцирует объекты динамически и хранит их в коллекции. Потому что мне нужно, чтобы проверить логику, инстанцирует их и операции над этими объектами, я думал, что это будет отличная идея, чтобы создать вспомогательную фальшивый класс фабрики, который может быть введен для тестирования. Вот что я придумал общественный класс RhinoFakeFactory где TFakeable: класс {общественности Список Подделка {получить; задавать; } Общественного FakeType FakeTypeToCreate {получить; задавать; } Общественного TFakeable GetFake () {TFakeable поддельной = по умолчанию (TFakeable); переключатель (FakeTypeToCreate) {случай FakeType.None: случай FakeType.Stub: поддельные = MockRepository.GenerateStub (); перерыв; Случай FakeType.DynamicMock: поддельные = MockRepository.GenerateMock (); перерыв; Случай FakeType.DynamicMockWithRemoting: поддельные = MockRepository.GenerateDynamicMockWithRemoting (); перерыв; Случай FakeType.StrickMock: поддельные = MockRepository.GenerateStrictMock (); перерыв; Случай FakeType.StrickMockWithRemoting: поддельные = MockRepository.GenerateStrictMockWithRemoting (); перерыв; Случай FakeType.PartialMock: поддельные = MockRepository.GeneratePartialMock (); перерыв; } Fakes.Add (подделка); возвращать поддельные; } Общественного RhinoFakeFactory () {Подделки = новый список (); }} Общественного перечисление FakeType {Нет, Заглушка, DynamicMock, DynamicMockWithRemoting, StrickMock, StrickMockWithRemoting, PartialMock} После того, как я написал, Я тогда подумал: «Я могу привнести это как раз хорошо, но теперь я должен ссылаться на мой тестовый проект и пространство имен». Это не сидит хорошо со мной. Может быть, потому что я новичок в модульное тестирование и пытается придерживаться конвенции как можно больше. Из того, что я понимаю, тестовый код должен быть в основном прозрачным для тестируемого кода, так что может может сохранить как можно больше внимания и ясности о том, что он пытается достичь, насколько это возможно. Должен ли я перестать беспокоиться и просто использовать свой поддельный завод? Я хотел бы, потому что он генерирует фальшивки, как мне они нужны для случаев, как я описал выше, и потому, что я могу получить доступ к инстанцированы поддельные объекты в подделках собственности, чтобы проверить их состояние. Есть ли что-то еще реализованы или, возможно, что-то в рамках Rhino издевается, что уже ухаживает этой ситуации? Это не сидит хорошо со мной. Может быть, потому что я новичок в модульное тестирование и пытается придерживаться конвенции как можно больше. Из того, что я понимаю, тестовый код должен быть в основном прозрачным для тестируемого кода, так что может может сохранить как можно больше внимания и ясности о том, что он пытается достичь, насколько это возможно. Должен ли я перестать беспокоиться и просто использовать свой поддельный завод? Я хотел бы, потому что он генерирует фальшивки, как мне они нужны для случаев, как я описал выше, и потому, что я могу получить доступ к инстанцированы поддельные объекты в подделках собственности, чтобы проверить их состояние. Есть ли что-то еще реализованы или, возможно, что-то в рамках Rhino издевается, что уже ухаживает этой ситуации? Это не сидит хорошо со мной. Может быть, потому что я новичок в модульное тестирование и пытается придерживаться конвенции как можно больше. Из того, что я понимаю, тестовый код должен быть в основном прозрачным для тестируемого кода, так что может может сохранить как можно больше внимания и ясности о том, что он пытается достичь, насколько это возможно. Должен ли я перестать беспокоиться и просто использовать свой поддельный завод? Я хотел бы, потому что он генерирует фальшивки, как мне они нужны для случаев, как я описал выше, и потому, что я могу получить доступ к инстанцированы поддельные объекты в подделках собственности, чтобы проверить их состояние. Есть ли что-то еще реализованы или, возможно, что-то в рамках Rhino издевается, что уже ухаживает этой ситуации? тестовый код должен быть в основном прозрачным для тестируемого кода, так что может может сохранить как можно больше внимания и ясности о том, что он пытается достичь, насколько это возможно. Должен ли я перестать беспокоиться и просто использовать свой поддельный завод? Я хотел бы, потому что он генерирует фальшивки, как мне они нужны для случаев, как я описал выше, и потому, что я могу получить доступ к инстанцированы поддельные объекты в подделках собственности, чтобы проверить их состояние. Есть ли что-то еще реализованы или, возможно, что-то в рамках Rhino издевается, что уже ухаживает этой ситуации? тестовый код должен быть в основном прозрачным для тестируемого кода, так что может может сохранить как можно больше внимания и ясности о том, что он пытается достичь, насколько это возможно. Должен ли я перестать беспокоиться и просто использовать свой поддельный завод? Я хотел бы, потому что он генерирует фальшивки, как мне они нужны для случаев, как я описал выше, и потому, что я могу получить доступ к инстанцированы поддельные объекты в подделках собственности, чтобы проверить их состояние. Есть ли что-то еще реализованы или, возможно, что-то в рамках Rhino издевается, что уже ухаживает этой ситуации? Должен ли я перестать беспокоиться и просто использовать свой поддельный завод? Я хотел бы, потому что он генерирует фальшивки, как мне они нужны для случаев, как я описал выше, и потому, что я могу получить доступ к инстанцированы поддельные объекты в подделках собственности, чтобы проверить их состояние. Есть ли что-то еще реализованы или, возможно, что-то в рамках Rhino издевается, что уже ухаживает этой ситуации? Должен ли я перестать беспокоиться и просто использовать свой поддельный завод? Я хотел бы, потому что он генерирует фальшивки, как мне они нужны для случаев, как я описал выше, и потому, что я могу получить доступ к инстанцированы поддельные объекты в подделках собственности, чтобы проверить их состояние. Есть ли что-то еще реализованы или, возможно, что-то в рамках Rhino издевается, что уже ухаживает этой ситуации?
jlafay
1

голосов
1

ответ
0

Просмотры

Есть ли лучший способ поддельных интерфейсов статического класса?

Делает ли это шаблон дизайна много смысла? Первоначально я был один статический класс, возвращающей хэш-функцию для каждого алгоритма реализованного. Открытый делегат ИНТ хэш-функция (целое семя, Params Int клавиша []); Но я тогда понял, что я хотел несколько частей метаданных вместе с каждым алгоритмом, поэтому я создал этот интерфейс: открытый интерфейс IHashAlgorithm {{CalculateHash хэш-функцию получить; } NoiseFunction CalculateNoise {получить; } {INT Максимум получить; } {INT Minimum получить; }} Внутренний класс реализует необходимый интерфейс: общественный делегат двойной NoiseFunction (INT семя, PARAMS ИНТ [] клавиши); Внутренний класс запечатан HashAlgorithm: IHashAlgorithm {общественных HashAlgorithm (функция хэш-функцию, Int мин, Int макс) {CalculateHash = функция; Минимум = мин; Максимальный = макс; } Общественности {CalculateHash хэш-функцию получить; частный набор; } Общественного NoiseFunction CalculateNoise {получить {вернуться шум; }} Общественного ИНТ Максимальное {получить; частный набор; } Общественного ИНТ Минимальный {получить; частный набор; } Частного двойного шум (целое семя, PARAMS INT []) {ключи возврат ((двойные) CalculateHash (семена, ключи) - Минимальный) / ((двойной) Максимум - минимум + 1); }}, Которые создаются и возвращаются в своем роде общественного класса статических фабричным: общественный статического класс хеширование {частного статический чтения IHashAlgorithm MurmurHash2Instance = новый HashAlgorithm (MurmurHash2Hash, 0, int.MaxValue); частных статических чтения IHashAlgorithm ReSharperInstance = новый HashAlgorithm (ReSharperHash, int.MinValue, int.MaxValue); общественности статической IHashAlgorithm MurmurHash2 {получить {вернуться MurmurHash2Instance; }} Общественности статической IHashAlgorithm ReSharper {получить {вернуться ReSharperInstance; }} Частных статический ИНТ MurmurHash2Hash (интермедиат семенных, ключи PARAMS ИНТ []) {// ...} частное статический ИНТ ReSharperHash (целое семя, PARAMS ИНТ [] клавиши) {// ...}} Я бы предпочел быть в состоянии реализовать IHashAlgorithm на статические классы для каждого алгоритма: общественный статический класс MurmurHash2: IHashAlgorithm {открытые статические INT Hash (интермедиат семенных, PARAMS ИНТ [] клавиши) {...} // ...} к сожалению, C # не позволяет это , так что это моя попытка денется.
dlras2
1

голосов
1

ответ
0

Просмотры

Параллельное завод / наилегчайшем с TBB

У меня есть образец, работающий в наилегчайшем сериалу, где завод использует зЬй :: карты для хранения и предоставления доступа к создаваемым объектам. Завод возвращает итератор, указывающий на объект в карте. Объекты на заводе являются константами, так что они не будут обновляться после вставки, если они не будут удалены. Я хотел бы сделать завод Параллельным с использованием TBB :: concurrent_hash_map, но я не уверен, что возвращение должно быть. Я мог бы использовать итератор (она должна быть const_iterator?), Но в документации сказано, что все итераторы становятся недействительными, когда что-то делает находку или вставить в concurrent_hash_map. Так что я мог бы использовать const_accessor, так как только доступ только для чтения необходим, но это отличается от последовательного осуществления (итератор против аксессора). Какой из них лучше использовать? Если консистенция типов (то есть. как итераторы) иметь важное значение? Оба последовательных и резьбовые опции времени компиляции должны быть там.
tpg2114
1

голосов
2

ответ
0

Просмотры

EXC_BAD_ACCESS при синтезе «глобальный» объекта

это дополнительный вопрос к моему последнему здесь: IOS: Инициализировать объект при запуске приложения для всех контроллеров для использования. Я поставил мое приложение следующий образом (игнорировать DB Префикс): DBFactoryClass // Встроенный DataManaging объект для последующего использования в приложении DBDataModel // создается на заводе-изготовителе, содержит все данные & методу доступа DBViewControllerA // Покажем некоторые из данные, которые DBDataModel держит moreViewControllers, что будет необходим доступ к одной и той же DBDataModel объект я буду идти шаг за шагом через приложение, а затем, в конце концов на сообщения сообщение об ошибке я получаю при создании. AppDelegate.h #import "DBFactoryClass.h" AppDelegate.m - (BOOL) ... didFinishLaunching ... {DBFactoryClass * ФАБРИКА = [[DBFactoryClass Alloc] инициализации]; вернуться YES; } DBFactoryClass.h #import #import "DBDataModel.h" @interface DBFactoryClass: NSObject @property (сильный) DBDataModel * DataModel; @end DBFactoryClass.m #import "DBFactoryClass.h" @implementation DBFactoryClass @synthesize DataModel; - (ID) {INIT самостоятельно = [супер INIT]; [Собственной setDATAMODEL: [[DBDataModel Alloc] инициализации]]; Самовозврат; } @End ViewControllerA.h #import #import "DBDataModel.h" @class DBDataModel; @interface todayViewController: UIViewController @property (сильный) DBDataModel * DataModel; @property (слабый, неатомический) IBOutlet UILabel * testLabel; @end ViewControllerA.m #import "todayViewController.h" @implementation todayViewController @synthesize testLabel; @synthesize DataModel; - (недействительными) viewDidLoad {todaySpentLabel.text = [[тест DataModel] stringValue]; } @End #import DBDataModel.h @interface DBDataModel: NSObject @property (неатомической, сохранить) NSNumber * тест; @end DBDataModel.m #import "DBDataModel.h" тест @implementation DBDataModel @synthesize; - (ID) инициализации {тест = [[NSNumber Alloc] initWithInt: 4]; Самовозврат; } @End, когда я построить его, я получаю следующее сообщение об ошибке: EXC_BAD_ACCESS в этой строке: @synthesize DataModel; из DBFactoryClass.m
Sebastian Flückiger
1

голосов
1

ответ
832

Просмотры

Реализация абстрактной модели фабрики для различных провайдеров исключений в C #

Я планирую решить конкретную проблему с помощью абстрактной модели фабрики. Я был успешным в реализации заводского образца, но не в состоянии продлить заводский шаблон для абстрактного завода у меня есть два разных мест, где деталь исключения может храниться базами данных файловой системы я использовал заводский шаблон абстрагироваться от деталей создания объекта от интерфейса клиента публичного интерфейса ILogException {аннулируется LogException (); } FileSystemLogger общественного класса FileExceptionLogger: ILogException {общественного недействительными LogException () {Console.WriteLine ( "Exception File Logger"); }} DBSystemLogger класс DBExceptionLogger общественности: ILogException {общественного недействительными LogException () {Console.WriteLine ( "БД Исключение Logger"); }} Factory Реализация общественного класса ExceptionFactory {сопзЬ Int я = 1; общественности статической ILogException GetFactory () {если (я == 1) {возвратить новый FileExceptionLogger (); } Иначе, если (я == 2) {вернуть новый DBExceptionLogger (); } Еще {возвратить новый ServiceExcetionLogger (); }}} Я знаю, что это не самое лучшее реализации, но я планирую изменить его. Теперь FileSystemLogger и DatabaseLogger в себе завод, я хочу, чтобы группа после внедрения под FileSystemLogger и DatabaseLogger так, что клиент может иметь FileSystemLoggerFactory и DatabaseLoggerFactory FileSystemLogger FlatFileSystemLogger XMLFileSystemLogger DatabaseLogger SQLSERVERLogger OracleLogger Как я должен приступить к определению FileSystemLoggerFactory и DatabaseLoggerFactory?
rohit
1

голосов
4

ответ
1.4k

Просмотры

Фабрика для создания и создания экземпляра объекта, основываясь на строку?

У меня есть запрос на чтение строки сообщений из очереди и «обрабатывать их». Каждое сообщение имеет 4 цифры «идентификатор / ключ» на старт, а затем по дате, времени и другой номер ... с тех пор, каждое сообщение отличается и требует различной обработки. Моя мысль была использовать завод, чтобы создать объект нужного типа, а также вызвать конструктор asbtract одновременно. Это разумный подход взять? Если это так ... как? например 1000,2013-02-13,09: 00: 00492, .................... 4000,2013-02-13,09: 00: 01492 ,. ................... 1000,2013-02-13,09: 00: 02,74664, ............... ..... 4003,2013-02-13,09: 00: 03,1010, .................... 4000,2013-02-13,09 : 00: 04493, .................... Чтобы построить объект класса Message1000: AbstractMessage, IMessageThing Message4000: AbstractMessage, IMessageThing Message4003: AbstractMessage,
BlueChippy
1

голосов
2

ответ
131

Просмотры

Could this work as a Generic Factory method?

Просто дурачиться, и я получил эту идею, это хорошая реализация для общего шаблона метода фабрики? Завод код: общественный класс Factory статического {открытые статический T Create (), где T: новый () {возвратить новый T (); }} Вызов завод где-нибудь еще: класс Program {статической силы Main (string [] арг) {вар OBJ = Factory.Create (); obj.Name = "Марк"; ЕЫпе (obj.Name); вар obj2 = Factory.Create (); obj2.AnimalType = "Dog"; ЕЫпе (obj2.AnimalType); Динамический obj3 = Factory.Create (); obj3.Age = 20; ЕЫпе (obj3.Age); Console.ReadKey (); }} Я имею в виду работает, как ожидалось ... но вы видите любую проблему здесь? Потому что я не ...
MRFerocius
1

голосов
1

ответ
60

Просмотры

JS - factory pattern overwrites private vars when stored in memory

так что я все еще довольно новое для JS и я хотел, чтобы попасть в более продвинутые вещи, но у меня есть эта проблема с рисунком фабрики, вот основной код (функция () {вар OBJS = []; функция createObj (имя) {вар thename = имя; возвращение {publicsaythename: функция () {console.log (thename);}}} для (вар я = 0; г <5; я ++) {вар theObj = createObj ( "thename" + I); theObj.publicsaythename (); objs.push (theObj);} для (вар я = 0; я <objs.length; я ++) {theObj.publicsaythename ();}}) (); первая серия console.log вызовов выводит то, что я ожидал: thename0 thename1 thename2 thename3 thename4 Вторая серия console.logs выводит последний объект я создал 5 раз. 5 х thename4 я делаю что-то неправильно? или это ожидается? Кроме того, если ожидается. как решить эту проблему, чтобы быть в состоянии хранить объекты, созданные для последующего использования?
AJ 4Testing
1

голосов
3

ответ
92

Просмотры

Является ли это делегируя ответственность фабрики класса, НЕ подклассов, правильно?

Я читаю о фабричной модели и понять концепцию и реализацию этого. Но определение сбивает с толку меня. Может кто-то просьба уточнить это? Определение: Шаблон Фабрики определить интерфейс для создания объектов, но делегаты создания объекта на подклассы. Я был смущен делегатами создания объекта на подклассы. Он делегируя ответственность фабрики класса не подразделы классов правильно?
Java P

Просмотр дополнительных вопросов