如不雅我们须要添加一个过滤的萌芽(sql中有敏感字的就直接返回null,而不萌芽数据库),只须要可以添加一个FilterQuery装潢者即可:
- public class FilterQuery implements Query {
- private Query query;
- private List words = new ArrayList<>();
- public FilterQuery(Query query) {
- this.query = query;
- words.add("fuck");
- words.add("sex");
- }
- @Override
- public Result query(String sql) {
- for(String word : words) {
- if(sql.contains(word)) return null;
- }
- return query.query(sql);
- }
- }
- Query filterQuery = new FilterQuery(simpleQuery);
- System.out.println(filterQuery.query("select * from t_student where name = 'fuck'")); // null
- System.out.println(filterQuery.query("select * from t_student where name = 'format'")); // Result(obj=java.lang.Object@1b4fb997, sql=select * from t_student where name = 'format')
代劳模式
代劳模式的感化是应用一个代劳类来代替本来类进行操作。比较常见的就是aop中就是应用代劳模式完成事务的处理。
代劳模式分静态代劳和动态代劳,静态代劳的道理就是对目标对象进行封装,最后调用目标对象的办法即可。
动态代劳跟静态代劳的差别就是动态代劳中的代劳类是法度榜样运行的时刻生成的。Spring中对于接口的代劳应用jdk内置的Proxy和InvocationHandler实现,对于类的代劳应用cglib完成。
外不雅模式
以1个UserService为例,应用jdk自带的代劳模式完成计算办法调用时光的需求:
- // UserService接口
- public interface IUserService {
- void printAll();
- }
- // UserService实现类
- class UserService implements IUserService {
- @Override
- public void printAll() {
- System.out.println("print all users");
- }
- }
- // InvocationHandler策略,这里打印了办法调用前后的时光
推荐阅读
自负年夜 Google 的人工智能 AlphaGO 成为围棋界的百胜将近开端,AI(Artificial Intelligence,人工智能)这两个英文字,刹那间成为科技业最热点的关键字之一。而就在2017岁首?年代,早在>>>详细阅读
本文标题:记录自己理解的一些设计模式
地址:http://www.17bianji.com/lsqh/34663.html
1/2 1