Шаблон дизайна шаблона в JDK, не удалось найти метод, определяющий набор методов, которые должны быть выполнены в порядке

Я читаю о Template design pattern, Согласно моему текущему пониманию, шаблон проектирования шаблона может использоваться, когда у нас есть алгоритм с определенным набором процессов (методов), которые должны быть выполнены по порядку. Основные игроки

1.Abstract Template class предоставление template method определение процессов (методов) и порядка исполнения. Обычно этот метод делается окончательным, так как его поведение не изменяется. Немногие из процессов (методов), упомянутых в методе шаблона, обеспечиваются реализацией по умолчанию, а другие, в зависимости от конкретных классов, расширяющих абстрактные типы шаблонных классов, оставляются как абстрактные.

2.Concrete classes extending the Template method, Они переопределяют методы по умолчанию, если это необходимо, и предоставляют реализацию для абстрактных методов, определенных в классе Abstract Template.

Я пытался найти его реализацию в JDK, я посмотрел на java.io классы после прочтения, что эти классы реализуют этот шаблон. Мне не удалось найти какой-либо метод, определяющий набор процессов (методов) и порядок выполнения.

Пожалуйста, предоставьте ваши ценные материалы.

2 ответа

Решение

Простой пример java.io.OutputStream,

Метод шаблона
public void write(byte b[], int off, int len),

Вызывает абстрактный метод
public abstract void write(int b),
который должен быть реализован подклассом OutputStream,

В этом случае инвариантная часть шаблона является основной обработкой ошибок, общей для каждого OutputStream в то время как вариантная часть шаблона представляет собой фактическое написание, специфичное для каждой конкретной реализации.

Ваше понимание шаблона верно; однако, это не должно быть настолько сложным. По сути, любой конкретный метод, который вызывает абстрактный метод в том же классе, является шаблонным методом.

Чтобы быть более конкретным:

Неабстрактные методы, вызывающие абстрактные методы внутри их реализации, можно отнести к категории шаблонных методов.

Template_method определяет программный каркас алгоритма в операции, откладывая некоторые шаги до подклассов. Если вы определите завершенную операцию как абстрактный метод, подклассы будут иметь полный контроль над изменением структуры алгоритма, и, следовательно, абстрактные методы не классифицируются как методы Template.

например, класс чтения в IO.

 public int read() throws IOException {
        char cb[] = new char[1];
        if (read(cb, 0, 1) == -1) // this is an abstract method
            return -1;
        else
            return cb[0];
    }

Вот

abstract public int read(char cbuf[], int off, int len) throws IOException; это абстрактный метод.

Реализацию этого метода можно найти в BufferedReader

public int read(char cbuf[], int off, int len) throws IOException {

}
Другие вопросы по тегам