У меня есть класс, который выполняет операции с базой данных и возвращает результаты (array, true, false). И у меня есть другой класс, который создает строку JSON, используя этот класс в своем конструкторе. Можем ли мы сказать, что этот класс является адаптером? Или просто обертка или …
Class Db { public function getRows($params) { //... } } Class DbAdapter { private $_dbh; public function __construct($dbh) { $this->_dbh = $dbh; } public function getJson() { return '{"key": "foo", "key2": ' . json_encode($this->_dbh->getRows($params)) . '}'; } }
благодаря
Id говорит, что его больше Decorator … http://en.wikipedia.org/wiki/Decorator_pattern
От: http://www.fluffycat.com/PHP-Design-Patterns/Adapter/
Адаптеры полезны, если вы хотите использовать класс, у которого нет точных методов, которые вам нужны, и вы не можете изменить класс orignal. Адаптер может использовать методы, которые вы можете получить в исходном классе, и адаптировать их к необходимым вам методам.
Я бы сказал, что ваш код соответствует адаптеру, если вы планируете добавлять методы для дополнения другого класса.
Я не думаю, что вы можете выбрать один образец и сказать, что это тот, который используется здесь. Вот мой небольшой список шаблонов, которые я вижу в вашем примере. Не стесняйтесь комментировать.
Делегирование, потому что класс DBAdapter
делегирует задачу получения фактических строк в классе DB.
Decorator, потому что класс DBAdapter
украшает класс DB дополнительными функциональными возможностями – выделением вывода в JSON.
Adapter / Wrapper, если вы считаете, что он позволяет другому клиенту получить доступ к вашим строкам базы данных, которые понимают только JSON или XML или какой-либо другой формат.
Но если бы нам пришлось выбрать один, я бы сказал, Адаптер. Он принимает данные в форме структур данных PHP и преобразует их в представление JSON.