文章目录
0 设计模式
不了解设计模式的小伙伴可以通过这篇文章了解一下什么是设计模式
https://blog.csdn.net/qq_42874315/article/details/120006447
1 解释器模式
解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。
2 实现思路
我们将创建一个接口 Expression 和实现了 Expression 接口的实体类。
定义作为上下文中主要解释器的 TerminalExpression 类。
其他的类 OrExpression、AndExpression 用于创建组合式表达式。
测试类中使用 Expression 类创建规则和演示表达式的解析。
3 需要的类
-
表达式接口
-
接口的实现类
存储表达式数据的实现类
判断每个规则之间关系的(判断多个上方实现类的关系)
-
测试类
测试类中使用规则类去判断存储数据的实现类
具体的规则
4 具体实现
4.1 Expression(表达式接口)
/**
* @Author ChenJiahao(五条)
* @Date 2021/8/27 14:42
*/
public interface Expression {
boolean interpret(String context);
}
4.2 接口实现类
4.2.1 TerminalExpression(存储数据)
/**
* @Author ChenJiahao(五条)
* @Date 2021/8/27 16:36
*/
public class TerminalExpression implements Expression{
private String data;
public TerminalExpression(String data) {
this.data = data;
}
@Override
public boolean interpret(String context) {
if (context.contains(data)){
return true;
}
return false;
}
}
4.2.2 判断规则之间关系
AndExpression
/**
* @Author ChenJiahao(五条)
* @Date 2021/8/27 16:52
*/
public class AndExpression implements Expression{
private Expression expr1 = null;
private Expression expr2 = null;
public AndExpression(Expression expr1, Expression expr2) {
this.expr1 = expr1;
this.expr2 = expr2;
}
@Override
public boolean interpret(String context) {
return expr1.interpret(context) && expr2.interpret(context);
}
}
OrExpression
/**
* @Author ChenJiahao(五条)
* @Date 2021/8/27 16:51
*/
public class OrExpression implements Expression{
private Expression expr1 = null;
private Expression expr2 = null;
public OrExpression(Expression expr1, Expression expr2) {
this.expr1 = expr1;
this.expr2 = expr2;
}
@Override
public boolean interpret(String context) {
return expr1.interpret(context) || expr2.interpret(context);
}
}
4.3 测试类
/**
* @Author ChenJiahao(五条)
* @Date 2021/8/27 16:53
*/
public class Test {
// 规则:Robert或John是男性
public static Expression getMaleExpression(){
Expression robert = new TerminalExpression("Robert");
Expression john = new TerminalExpression("John");
return new OrExpression(robert,john);
}
// 规则:Julie是一个已婚的女性
public static Expression getMarriedWomenExpression(){
Expression julie = new TerminalExpression("Julie");
Expression married = new TerminalExpression("Married");
return new AndExpression(julie,married);
}
public static void main(String[] args) {
Expression isMale = getMaleExpression();
Expression isMarriedWomen = getMarriedWomenExpression();
System.out.println("John or Robert is male? " + isMale.interpret("John"));
System.out.println("Julia is a married women? " + isMarriedWomen.interpret("Married Julie"));
}
}
5 思维导图
6 示例源码地址
https://github.com/ChenJiahao0205/design-pattern/tree/master
最后
我是通过马士兵老师的视频和菜鸟教程学习的,部分内容可能会有雷同
想阅读更多设计模式相关文章,欢迎到我的专栏【设计模式学习笔记】、【设计模式】中去查看
在23篇设计模式文章发布完成之后,我会公开完整的思维导图,点关注,不迷路
感谢大家看到这里,文章如有不足,欢迎大家指出;彦祖点个赞吧彦祖点个赞吧彦祖点个赞吧,欢迎关注程序员五条!