Patrón de cadena de responsabilidad y patrón de decorador

1.6 Modelo de cadena de responsabilidad

Escenarios de uso: por ejemplo, para publicar artículos en el foro y subirlos al servidor, debemos realizar una desensibilización, verificar si hay código de hacker, etc., que necesita ser filtrado. Si los filtros están escritos en una sola pieza, no es conveniente expandirlos, por un lado, y el código está hinchado por un lado (puede ser que haya muchos códigos para cada filtro)

public static void main(String[] args) {
    Msg msg = new Msg();
    
    msg.setMsg("大家好,<script> , 欢迎来到我的网站,大家都是hapi");
    List<Filter> filters = new ArrayList<>();
    filters.add(new HTMLFilter());
    filters.add(new SensitiveFilter());
    
    // 责任链里面的所有方法都需要处理过滤操作
    for(Filter f : filters) {
        f.doFilter(msg);
    }
}

interface Filter{
    void doFilter(String msg);
}

class HTMLFilter inplaments Filter{
    void doFilter(String msg) {
        // TODO
    }
}

class SensitiveFilter inplaments Filter{
    void doFilter(String msg) {
        // TODO
    }
}

Finalmente logre este efecto: msg-> filter1-> filter2-> DB
cadena de responsabilidad final:

class FilterChain{
    List<Filter> filters = new ArrayList<>();
    
    // 增加链条
    public void add(Filter filter){
        filters.add(f);
    }
    
    // 进行链式过滤
    public void doFilter(Msg m){
        for(Filter f : filters) {
            f.doFilter(m);
        }
    }
}
  • Defina sus propios filtros diferentes y vincúlelos en filtros de cadena.

1.7 Patrón decorador-Decorador

1.7.1 Alternativas a los métodos tradicionales.

  • Si no comprende el patrón del decorador, debe agregar decoración a lo original, que es herencia intuitiva. Por ejemplo, los herederos estadounidenses, los estadounidenses negros heredan estadounidenses, etc. Un gran número de herederos producirá explosiones de clase.
  • El patrón decorador a menudo se usa en soluciones de interfaz gráfica, como agregar algo a un estilo, etc.

1.7.2 Solución de patrón de decorador

El patrón decorador es agregar decoraciones a las cosas originales, por ejemplo:

  1. Agregar propiedad Person a la clase PersonDecorator
Public class PerionDecorator {
    Persion p;
    public Person getPerson {
        p = new Person();
        // 增加装饰
        p.setColor();
        return p;
    }
}

Supongo que te gusta

Origin www.cnblogs.com/darope/p/12695256.html
Recomendado
Clasificación