2014-02-12 6 views
1

Ну, я создаю библиотеку, и эта библиотека должна взять все другие библиотеки и заставить их работать «одинаково».Адаптер или мост в моей конкретной ситуации?

Например: представьте, что у меня есть 5 библиотек, и все библиотеки имеют одну и ту же идею, работают в одном и том же случае, но у них есть свой собственный путь работы, свой собственный API, и мне нужно сделать их работа с использованием одного API.

Что я намереваюсь создать «фабрику» с «доверительным списком» внутри фабрики, которая позволяет пользователю выбирать разные библиотеки для создания и «заводские» взгляды на «список доверия» и если библиотека действительно существует, она создает и возвращает библиотеку.

Но это также может быть сделано с использованием интерфейсов, где я могу принимать только классы, которые реализуют указанный интерфейс, где у меня будет безопасность реализации методов, которые я хочу, так что это значит? Все библиотеки должны реализовывать этот интерфейс, внедрять методы и создавать в библиотеку разворот оболочки, и таким образом они будут работать с одним и тем же API. Пользователь может создать библиотеку с использованием фабрики и использовать один и тот же API для всех из них.

Я не знаю, понимаете ли вы то, что я пытаюсь объяснить, но я хочу знать, исходя из того, что я сказал, что самое лучшее в моей ситуации, «мост» или «адаптер»?

А также, моя идея правильная или я с ума сошел? (Интерфейс и фабрика, а также мост и адаптер, расскажите мне, что вы имеете в виду).

Благодарим вас заблаговременно.

+0

Итак, эта библиотека написана на Java, PHP и C++? Если нет, удалите ненужные теги. –

+0

Это не имеет значения, речь идет не о языках, а о «шаблоне проектирования», самой реализации. –

+1

Тогда, пожалуйста, не добавляйте тег языка программирования. –

ответ

0

Шаблон Bridge предназначен для отделения интерфейса класса от его реализации, поэтому вы можете изменять или заменять реализацию без изменения кода клиента.

Я думаю, вы можете указать публичный не виртуальный интерфейс, а затем использовать Template Method в каждой из этих открытых функций вызывают метод реализации.

class Basic { 
public: 
     // Stable, nonvirtual interface. 
     void A { doA();} 
     void B { doB();} 
     //... 
private: 
     // Customization is an implementation detail that may 
     // or may not directly correspond to the interface. 
     // Each of these functions might optionally be 
     // pure virtual 
     virtual void doA { impl_ -> doA();} 
     virtual void doB { impl_ -> doB();} 
}; 

Эти лекции могут быть полезны:

Bridge pattern

Template method

+0

Я подумал, может быть, я могу создать интерфейс «Адаптер», который реализует весь API, который я хочу, и создать класс, который реализует «Адаптер» для каждой библиотеки, например: «AAdapter», и получить «Adaptee» (библиотеку, которую я хочу работать с API) в качестве аргумента (экземпляра) в конструкторе, а затем реализовать методы «Адаптер» на этом «мосте» (AAdapter). Я прав? Спасибо. –

+0

точно, вы закончите что-то вроде адаптера myA (AAdapter), адаптер myB (BAdapter) – 4pie0

+0

Пример: http://www.codeproject.com/KB/architecture/595716/image001.png -: D –

0

Звучит как адаптер для меня. У вас есть несколько адаптеров, которые являются базовым полиморфизмом, и каждый адаптер знает, как адаптироваться к конкретной библиотеке.

Я не вижу, как шаблон моста будет иметь какой-то смысл здесь. Обычно вы используете это в тех местах, где вы используете эти библиотеки, но пока не знаете конкретной реализации библиотеки.

Смежные вопросы