Дисциплины - Объектно-ориентированное программирование

Шаблоны проектирования практических задач - Структурные шаблоны проектирования - Мост

Мост — это структурный паттерн проектирования, который разделяет один или несколько классов на две отдельные иерархии — абстракцию и реализацию, позволяя изменять их независимо друг от друга.

При частом изменении класса преимущества объектно-ориентированного подхода становятся очень полезными, позволяя делать изменения в программе, обладая минимальными сведениями о реализации программы. Шаблон мост является полезным там, где часто меняется не только сам класс, но и то, что он делает.

Диаграмма UML

Пример на PHP

trait TData
{
    private $data;

    public function __construct(array $data)
    {
        $this->data = $data;
        $this->prepare();
    }
    abstract protected function prepare();
}

trait TShow
{
    private $content;

    public function show()
    {
        print $this->content;
    }
}

class XmlFormat
{
    use TData, TShow;

    protected function prepare()
    {
        $this->content = '';
        foreach ($this->data as $name => $item) {
            $this->content .= "<$name>$item";
        }
        $this->content .= '';
    }
}

class JsonFormat
{
    use TData, TShow;

    protected function prepare()
    {
        $this->content = json_encode($this->data);
    }
}

class SelfFormat
{
    use TData, TShow;

    protected function prepare()
    {
        $content = array();
        foreach ($this->data as $name => $item) {
            $string = '';
            if (is_string($name)) {
                $nLen = strlen($name);
                $string .= "[name|string({$nLen}){{$name}}:val|";
            }
            if (is_int($name)) {
                $string .= "[index|int{{$name}}:val|";
            }
            if (is_string($item)) {
                $vLen = strlen($item);
                $string .= "string($vLen){{$item}";
            }
            if (is_int($item)) {
                $string .= "int{{$item}";
            }
            $string .= "}]";
            array_push($content, $string);
        }
        $this->content = 'selfMadeDataFormat:Array('.count($this->data).'):';
        $this->content .= implode(',', $content);
        $this->content .= ':endSelfMadeDataFormat';
    }
}

$xml = new XmlFormat(array('a' => 'b', 'c'));
$json = new JsonFormat(array('a' => 'b', 'c'));
$self = new SelfFormat(array('a' => 'b', 'c'));
$self->show(); /* selfMadeDataFormat:Array(2):[name|string(1){a}:val|string(1){b}],[index|int{0}:val|string(1){c}]:endSelfMadeDataFormat */
$xml->show(); /* b<0>c */
$json->show(); /* {"a":"b","0":"c"} */

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться
814301 БГУИР
814302 БГУИР
814303 БГУИР
894351 БГУИР
90421 БГУИР


Изображения Видео

1. Абстрактная фабрика https://www.youtube.com/watch?v=1mVONOCxfLg
2. Фабричный метод https://www.youtube.com/watch?v=5UqUDR6_2cY
3. Шаблон декоратор https://www.youtube.com/watch?v=Lwb9bm8yKD0
4. Dessign patterns on PHP https://github.com/domnikl/DesignPatternsPHP
5. Приёмы объектно-ориентированного проектирования. Паттерны проектирования Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес; [пер. с англ.: А. Слинкин науч. ред.: Н. Шалаев]. — Санкт-Петербург [и др.] : Питер, 2014. — 366 с. : ил. ; 24 см.
6. Приемы объектно-ориентированного проектирования. Паттерны проектирования Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес; [пер. с англ.: А. Слинкин науч. ред.: Н. Шалаев]. — Санкт-Петербург [и др.] : Питер, 2014. — 366 с. : ил. ; 24 см.
7. Ajax http://erud.by/ajax
8. Ajax http://erud.by/ajax
9. Ajax http://erud.by/ajax
10. Документация Laravel http://laravel.com
Задание к курсовой работе
Задание к курсовой работе
Вопросы к экзамену