首页 > 其他分享 >【设计模式】责任链1-提出问题

【设计模式】责任链1-提出问题

时间:2023-03-19 11:32:57浏览次数:35  
标签:Main String 提出 MsgProcessor replace 责任 msg 设计模式 public


比方说我们做了一个BBS系统,每个人都可以在系统里发表自己的言论和信息。我们要对这些信息进行检查,看看有没有敏感要素和一些影响网站速度的脚本语言。如果不检查,网站可能会被监管部门查封。所以,在数据存入数据库的时候,要对数据进行一系列的检查。


我们创建一个Filter的工程,在cn.edu.hpu.responsiblilty包下创建一个名为Main的类:
直接假设你在网上发表一个信息:

package cn.edu.hpu.responsibility;


public class Main {
public static void main(String[] args) {
String msg="大家好:),<script>,敏感,和谐,我们要把设计模式学好";
}
}


我们要把刚刚msg里面的敏感信息和干扰脚本代码过滤掉,再新建一个类。


用来处理信息的类MsgProcessor:


package cn.edu.hpu.responsibility;

public class MsgProcessor {
private String msg;

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}


public String process(){
return "";
}
}

在Main类中这么使用它:


package cn.edu.hpu.responsibility;

public class Main {
public static void main(String[] args) {
String msg="大家好:),<script>,偷盗,抢劫,我们要把设计模式学好";
MsgProcessor mp=new MsgProcessor();
mp.setMsg(msg);
String result=mp.process();
System.out.println(result);
}
}


这个做法是“先写测试程序,在写实现”(极限编程XP里的一个理念)



下面我们来看当MsgProcessor接受到msg后如何处理:


我们先来处理带尖括号的信息:


package cn.edu.hpu.responsibility;

public class MsgProcessor {
private String msg;

public String getMsg() {
return msg;
}


public void setMsg(String msg) {
this.msg = msg;
}


public String process(){
//先处理带尖括号的信息
String r=msg.replace('<', '[')
.replace('>', ']');
return r;
}
}


Main测试结果:


大家好:),[script],偷盗,抢劫,我们要把设计模式学好




如果我们再把敏感字眼换掉或去掉呢?可以这么做:


public String process(){
//先处理带尖括号的信息
String r=msg.replace('<', '[')
.replace('>', ']');

//处理敏感字眼
r=r.replace("偷盗", "和谐")
.replace("抢劫", "帮助");
return r;
}

测试Main结果:


大家好:),[script],和谐,帮助,我们要把设计模式学好


关于敏感字眼的处理也有了。



接下来我们如果被要求处理各种符号、其它脚本语言等信息,我们要一点一点的往上面


加处理代码,会十分的被动和代码的不易拓展。



我们有没有方法把处理机制给封装起来呢?让我们往里面加一些对字符串的处理逻辑之后,


加的比较方便呢?


思考........


标签:Main,String,提出,MsgProcessor,replace,责任,msg,设计模式,public
From: https://blog.51cto.com/u_16012040/6131090

相关文章

  • Spring 用了哪些设计模式?说三种即可
    策略模式工厂方法模式Builder模式策略模式策略模式就是一个接口下有多个实现类,而每种实现类会处理某一种情况。比如我们在抽奖系统中,有多种奖励方式可供选......
  • Spring框架中使用了哪些设计模式及应用场景
    1、工厂模式在各种BeanFactory以及ApplicationContext创建中都有用到2、模板模式在各种BeanFactory以及ApplicationContext创建中都有用到3、代理模式SpringAOP......
  • 设计模式(二十四)----行为型模式之迭代器模式
    1概述定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。2结构迭代器模式主要包含以下角色:抽象聚合(Aggregate)角色:定义存储、添加、......
  • 设计模式之桥接模式
    前提:含抽象类、扩展接口、具体实现类、具体扩展类。使用组合的方式替代继承。(ps:最近想不到更新啥,就先更着以前呆的桥接模式) 区别:桥接模式与策略模式均采用......
  • 设计模式之一些其他知识
    1组合和继承有何区别?(暂时没想到更啥,先更着之前写的东西吧。。。)-继承:is-a关系。实现对父类的扩展,但是继承的--缺点:父类细节对子类可见;高耦合 -组合:ha......
  • 设计模式之状态模式
    前提:含环境类、状态接口、具体状态类。将每个状态实现为一个对象即行为。(ps:没想到更啥,先更着以前写的状态模式吧。。。。) 1状态接口:publicinterfac......
  • 设计模式之适配器模式
    前提:适配器模式有三种-类、对象、接口适配器。(暂时没想到更啥,先更着以前写的适配器模式吧。。。)使用场景:假设手上有一个ps2插头的设备,但主机对外是usb,这时候需要弄个......
  • 设计模式——享元模式
    个人理解:抽离公共方法所需的属性进行共享;不需要的字段抽离到外面进行管理。1、享元模式享元模式(FlyweightPattern)主要用于减少创建对象的数量,以减少内存占用和提高性能......
  • 设计模式5——模板方法模式
    1、定义模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。2、核心在抽象父类中封装子类的算法框架,它的init方法可作为一个算法的模板,指导子......
  • 设计模式(二十三)----行为型模式之中介者模式
    1概述一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下......