2017-02-15 2 views
-2

У меня есть 3 алгоритма - назовем их A, B, C. Каждый из них имеет свои собственные методы получения и настройки, например. A может иметь getA()/setA() То же самое относится к B и C. Класс MainDriver, который создает экземпляр A, B или C в зависимости от того, что передается в качестве аргумента командной строки этому классу MainDriver. MainDriver класс создает несколько потоков для выполнения методов алгоритма, экземпляр которого создается. Таким образом, когда этот экземпляр алгоритма создается, он передает этот экземпляр классу, который расширяет класс Thread, так что каждый отдельный поток может выполнять общедоступные методы этого алгоритма.

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

Теперь мой вопрос в том, какой шаблон проектирования следует использовать для реализации этой архитектуры?

Как класс потока знает, какой экземпляр алгоритма передан ему в качестве аргумента и, соответственно, какой метод getter и setter выполнить?

+0

Было бы лучше, если бы вы загрузили свой код. Вопрос скорее основан на мнениях. Ответ на ваш вопрос изменится с требованием. – BeginnersSake

+1

Посмотрите банду четырех книг по шаблонам дизайна – Gab

+0

@ GabrieleB-David: «поисковая банда четырех книг» - не очень полезно! –

ответ

0

Для начала вы можете создать иерархию для всех ваших альгиримов. например BaseAlgo - это интерфейс, и все бетонные Algos будут реализовывать то же самое.

Подкласс «Тема» может ссылаться на BaseAlgo («имеет отношение»), и вы можете ссылаться на методы на конкретном объекте Algo, который вы передаете ему.

0

Любое событие/асинхронная ориентированная «архитектура» очень легко решает вашу проблему, позволяя вам сосредоточиться на своем бизнес-коде вместо механика.

Скажите мне, если я ошибаюсь, но мы можем возобновить ваши требования, как это:

  • в зависимости от аргумента, выполнить определенную программу
  • выбранная программа должна выполняться в отдельном потоке

Например, реактор (полностью интегрированный с последней версией Spring) предлагает множество способов сделать это в стиле программирования, ориентированном на события.

  1. Многопоточность будет обрабатываться для вас. Вам просто нужно сконфигурировать ваши пулы (если вам нужно определенное поведение, но по умолчанию оно будет соответствовать вашим требованиям)
  2. Вы только разрабатываете свои «алгоритмические» компоненты, которые являются не чем иным, как компонентом, выполняющим определенный код. Каждый из этих компонентов прослушивает конкретное событие, брошенное вашей основной программой. Ничего больше.
Смежные вопросы