[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Немного моих наблюдений на тему ООП
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
chee
Цитата (twin @ 12.07.2019 - 13:50)
1. жирный, наклонный и зачеркнутый?
2 жирный и зачеркнутый?
3. наклонный и зачеркнутый
4. наклонный и подчеркнутый
5. жирный и подчеркнутый
6. подчеркнутый и зачеркнутый
7. жирный, подчеркнутый и зачеркнутый
8. наклонный зачеркнутый и подчеркнутый


С учетом кода выше, примерно так:

$result = "";
$type = FormatterFactory::TYPE_HTML;
$words = [
'I am, ' => 'Italic,Bold',
'Human' => 'Bold',
'!' => 'Italic',
];


foreach ($words as $word => $wordModes) {
foreach (explode(',', $wordModes) as $wordMode) {
$word = FormatterFactory::make($type, $wordMode)->render($word);
}
$result .= $word;
}
echo $result;
echo '<br/>';


если же ты хочешь на основе виюхи, тоже есть вариант.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Если нужно будет форматтер, в котором нужно несколько оформлений, то тут надо переделать так

class FormatterCommonGroup extends Formatter
{
protected $formatters = [];

public function addFormatter(Formatter $formatter)
{
$this->formatters[] = $formatter;
}

public function render($text)
{
if (empty($this->formatters)) {
return $text;
}

foreach ($this->formatters as $formatter) {
$text = $formatter->render($text);
}

return $text;
}
}


class FormatterFactory
{
const TYPE_HTML = '';
const TYPE_BB = 'bb';
const TYPE_COMMON = 'Common';

public function make($type, $formatter)
{
$className = 'Formatter' . ucfirst($type) . ucfirst($formatter);

return new $className;
}

}

$group = FormatterFactory::make(FormatterFactory::TYPE_COMMON, 'Group');
$group->addFormatter(FormatterFactory::make(FormatterFactory::TYPE_HTML, 'Bold'));
$group->addFormatter(FormatterFactory::make(FormatterFactory::TYPE_HTML, 'Italic'));

$obj = new FormatterView('Hello, World!');
echo $obj->render($group);

И вот здесь, появляется делегирования. Но и то, вместо этого класса можно создать кучу отдельных классов, в которых будет примерно тоже самое что в FormatterBoldItalic из моего первого примера.

В FormatterCommonGroup мне не нравится что есть метод, addFormatter. Потому что если поставить себя на место человека, который будет юзать фабрику, то он будет ожидать объект с методом render. А тут ему приходит еще и метод addFormatter

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.