Pull to refresh

Comments 6

Разве для Java существует реализация "Паблика Морозова"?

В классе HTTPHC4Impl есть защищённый метод sample:


//Пакет
package org.apache.jmeter.protocol.http.sampler;
...
//Открытый класс
public class HTTPHC4Impl extends HTTPHCAbstractImpl {
...
    //Закрытый метод
    @Override
    protected HTTPSampleResult sample(URL url, String method,
              boolean areFollowingRedirect, int frameDepth) {

https://github.com/apache/jmeter/blob/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java#L326
А также ряд других методов, которые разработчики защитили.


Вызовем этот код в другом классе:
https://github.com/pflb/Jmeter.Plugin.TailSampler/blob/master/ru.pflb.jmeter.samplers.TailSampler/src/ru/pflb/jmeter/samplers/wrapper/WrapperHTTPHC4Impl.java#L19


  1. Создать класс-наследник
    //Другой пакет
    package ru.pflb.jmeter.samplers.wrapper;
    ...
    //Открытый класс-наследник
    public class WrapperHTTPHC4Impl extends HTTPHC4Impl implements ITailHTTPImpl{
  2. В классе-наследнике сделать метод sample публичным:
    //Открытый метод-обёртка для вызова закрытого метода
    @Override
    public HTTPSampleResult sampleTail(URL url, String method, boolean areFollowingRedirect, int frameDepth) {
        return super.sample(url, method, areFollowingRedirect, frameDepth);
    }

Теперь можно вызывать protected метод класса из пакета org.apache.jmeter.protocol.http.sampler в классе из пакета ru.pflb.jmeter.samplers.wrapper. Так как класс WrapperHTTPHC4Impl лишь делает закрытые методы другого класса открытыми, описал подход, как применение паттерна "Паблик Морозов".


Конечно, раскрываются не все методы. А лишь часть. И вызывается метод открытого класса, что упрощает реализацию. Не знаю как бы поступил, если ты класс HTTPHC4Impl не был публичным.

Ну так ведь вы создаете новый объект-наследник, а не дергаете методы существующего. Это нормальное расширение, а не Паблик Морозов.


Только я бы не стал такое расширение объявлять как public.

Спасибо, Павел. Убрал из текста статьи упоминание антипаттерна. Учту позже рекомендацию по отказу от public.

Sign up to leave a comment.

Articles