Los patrones de comportamiento de diseño: Modo Plantilla

modo de plantilla se usa comúnmente como un patrón de diseño del comportamiento, la idea principal es definir un código de proceso esqueleto en la plantilla, y algunos de los métodos utilizados en el código esqueleto no implementa estos métodos que dejan a las subclases de lograr. Si tenemos un escenario de desarrollo de negocios, nuestras necesidades de sistemas de negocio a consultas de los distintos informe de crédito los canales de crédito, el contenido de cada salida del actuador no es lo mismo, sino que se divide en tres pasos para establecer una conexión, el acceso al contenido de la memoria original, el análisis sintáctico la presentación de informes y el almacenamiento. De esta manera, se define una clase de plantilla:

public abstract class AbstractReportTemplate {    protected Logger logger = LoggerFactory.getLogger(getClass());    public final void doTask(){        doConnect();        getReport();        parseRepot();    }    /**     * 建立连接     */    public abstract void doConnect();    /**     * 获取报告     */    public abstract void getReport();    /**     * 解析报告并落库     */    public abstract void parseRepot();}

Si ahora queremos atracar Un agencias de crédito, que en tanto que heredamos esta clase de plantilla, para lograr lo anterior métodos abstractos puede, tarea de flujo sin cambios.

public class AReport extends AbstractReportTemplate {    public void doConnect() {        logger.info("do connect");    }    public void getReport() {        logger.info("get report");    }    public void parseRepot() {        logger.info("parseReport");    }}

Método de llamada:

public static void main(String[] args){        AbstractReportTemplate aReport = new AReport();        aReport.doTask();    }

Visible, el modo de plantilla muy sencillo de implementar. Ahora voy a introducir varias patrón de plantilla en el código fuente.

1.jdk la clase InputStream es una clase de plantilla, que define el método de lectura abstracto

public int read(byte b[], int off, int len) throws IOException {        if (b == null) {            throw new NullPointerException();        } else if (off < 0 || len < 0 || len > b.length - off) {            throw new IndexOutOfBoundsException();        } else if (len == 0) {            return 0;        }        int c = read();        if (c == -1) {            return -1;        }        b[off] = (byte)c;        int i = 1;        try {            for (; i < len ; i++) {                c = read();                if (c == -1) {                    break;                }                b[off + i] = (byte)c;            }        } catch (IOException ee) {        }        return i;    }        public abstract int read() throws IOException;

Hay muchos clase de implementación, como se muestra a continuación:

Aquí está el ByteArrayInputStream de:

public synchronized int read() {        return (pos < count) ? (buf[pos++] & 0xff) : -1;    }

La fuente de datos se utiliza para inicializar 2.jdbc AbstractDataSourceInitializer

@PostConstruct  protected void initialize() {    if (!isEnabled()) {      return;    }    ResourceDatabasePopulator populator = new ResourceDatabasePopulator();    String schemaLocation = getSchemaLocation();    if (schemaLocation.contains(PLATFORM_PLACEHOLDER)) {      String platform = getDatabaseName();      schemaLocation = schemaLocation.replace(PLATFORM_PLACEHOLDER, platform);    }    populator.addScript(this.resourceLoader.getResource(schemaLocation));    populator.setContinueOnError(true);    customize(populator);    DatabasePopulatorUtils.execute(populator, this.dataSource);  }    protected abstract DataSourceInitializationMode getMode();  protected abstract String getSchemaLocation();

La realización BatchDataSourceInitializer

@Override  protected DataSourceInitializationMode getMode() {    return this.properties.getInitializeSchema();  }  @Override  protected String getSchemaLocation() {    return this.properties.getSchema();  }

Texto Fuente: https: //github.com/jinjunzhu/design-pattern.git

Microcanal número público, atención de bienvenida, aprender a crecer juntos

Publicado 33 artículos originales · ganado elogios 2 · Vistas a 40000 +

Supongo que te gusta

Origin blog.csdn.net/zjj2006/article/details/104968457
Recomendado
Clasificación