JavaRush /Java блог /Архив info.javarush /Шаблон Bridge, правильно ли я понял?
BigVOVA
30 уровень

Шаблон Bridge, правильно ли я понял?

Статья из группы Архив info.javarush
Коллеги, помогите... Сейчас разбираю шаблон Bridge. Ниже набросал код в котором демонстрирую мое понимание данного подхода. Правильно ли я понял? Демо задача:
Бухгалтерия печатает отчеты... Сегодня нужны за неделю и месяц, а завтра фиг его знает))) Формат пока нужен PDF и DOC, но и это может измениться))) Т.е. система отчетов должна быть масштабируемой по условным двум осям.
Реализация: abstract class AbstractFormat { abstract void print(); } public class DOCFormat extends AbstractFormat { @Override void print() { System.out.println("This is a DOC representation:"); } } public class PDFFormat extends AbstractFormat { @Override void print() { System.out.println("This is a PDF representation:"); } } abstract class AbstractReport { void print(AbstractFormat abstractFormat){ abstractFormat.print(); } } public class MonthlyReport extends AbstractReport{ @Override void print(AbstractFormat abstractFormat) { super.print(abstractFormat); System.out.println("Monthly report"); } } public class WeeklyReport extends AbstractReport{ @Override void print(AbstractFormat abstractFormat) { super.print(abstractFormat); System.out.println("Weekly report"); } } public class Main { public static void main(String[] args) { new MonthlyReport().print(new PDFFormat()); new MonthlyReport().print(new DOCFormat()); new WeeklyReport().print(new PDFFormat()); new WeeklyReport().print(new DOCFormat()); } } Кстати, ребята! В процессе решения задачек не забывайте про фундамент. Я вот как дошел до поиска работы, неожиданно пришлось в шаблонах разбираться)))
Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Joysi Уровень 41
17 октября 2016
вывод —
Doc created.Built daily report base on data=данные 1
PDF created.Built monthly report base on data=данные 2
Joysi Уровень 41
17 октября 2016
Можно чуть глубже копнуть, если тестовое задание:

public class Bridge {

    public static void main(String[] args) {

        // отчет - это что 1) имеет доступ к данным и 2)на основе которых можно их распечатать
        abstract class ReportImpl {
            protected String reportData; // 1 - данные для построения отчета (пусть String для примера)

            public ReportImpl(String reportData) {
                this.reportData = reportData;
            }

            abstract void print(); // 2 - что должен делать отчет, его призвание
        }

        // Абстракция отчета, его задача - хранить ссылку на экземпляр (Implementation) отчета и уметь ее распечатать
        class Report {
            protected ReportImpl reportImpl; // Ради чего, все и затеяно.

            public void printReport() {
                reportImpl.print();
            }

            public Report(ReportImpl reportImpl) {
                this.reportImpl = reportImpl;
            }
        }

        // "Ось1" = PDF Конкретная реализация PDF печатной формы
        class PDFReport extends Report {

            public PDFReport(ReportImpl reportImpl) {
                super(reportImpl);
            }

            @Override
            public void printReport() {
                System.out.print("PDF created. "); // Формируем в нужном виде (собственно реализация PDF построения)
                reportImpl.print(); // Важно(!) имеем доступ к параметрам отчета в "лругих координатах"
            }
        }

        // "Ось1" = Doc  Конкретная реализация DOC печатной формы
        class DocReport extends Report {

            public DocReport(ReportImpl reportImpl) {
                super(reportImpl);
            }

            @Override
            public void printReport() {
                System.out.print("Doc created. "); // Формируем в нужном в