设计模式----解释器模式


设计模式的学习,我参考了开涛的博客;里面的内容讲解得比较详细。记得最开始学习设计模式是大二,那时从简单的抽象工厂模式开始着手、但找不到感觉,而且在实际应用中也较少应用。后来、慢慢熟悉理解并应用java的各种基础知识后,对设计模式的应用便有了简单的了解,学起来也变得容易理解了。所以、学习设计模式前,对java的抽象类和接口及重写重载的定义和区别要有充分的理解。

设计模式的意义:也就是设计模式的六大原则。目的就是降低依赖、降低耦合。
开闭原则:扩展开放、修改关闭。
里氏代换原则:任何基类出现的地方、子类一定可以出现。
依赖倒转原则:针对接口编程、依赖抽象而不依赖具体。
接口隔离原则:使用多个接口要比使用单个接口要好。
迪米特法则(最少知道原则):一个实体尽量少与其他实体之间发生相互最用。
合成复用原则:尽量使用合成或聚合的方式、而不是继承;这个我目前不是很理解。

设计模式从大类可以分为三大块:创建型模式、结构型模式、行为型模式。

创建型模式较为简单、含有五个:单例模式、抽象工厂模式、工厂方法模式、建造者模式、原型模式。

结构型模式有七个:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

剩下的行为型模式有11个:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解析器模式。


今天、我就从解析器模式开始,用做各种各样的解析器的解析。

常见的应用场景有数据的计算。当我们计算多目运算时,就可以套用;一般应用较多的在编译器及正则表达式等解析器中。

比如数据计算:9+2-8
我们就可以用解析器模式来进行运算。

1、先写一个接口、用来定义运算方法:



package com.pingan.mobile;
public interface Expression {
	public int enterpret(Context context);
}



2、然后写实体类,定义属性作为运算的数据;并生成get和set方法。



public class Context {
	private int num1;
	private int num2;
public Context(int i, int j) {
		this.num1 = i;
		this.num2 = j;
	}
	public int getNum1() {
		return num1;
	}
	public void setNum1(int num1) {
		this.num1 = num1;
	}
	public int getNum2() {
		return num2;
	}
	public void setNum2(int num2) {
		this.num2 = num2;
	}




3、运算方法的具体实现,通过实现Expression接口。


public class Minus implements Expression {
	@Override
	public int enterpret(Context context) {
		return context.getNum1()-context.getNum2();
	}
}
public class Plus implements Expression{
	@Override
	public int enterpret(Context context) {
		return context.getNum1()+context.getNum2();
	}
}






这里只写了加法和减法;根据需要、还可以添加乘除等其他运算方法。
5、最后来调用:




public static void main(String[] args) {
		int result = new Plus().enterpret(new Context(9,2));
		result = new Minus().enterpret(new Context(result,8));
		System.out.println("9+2-8="+result);
	}



这就是简单的解释器模式应用。在实际生成过程中、可能会比这个更复杂。
下面、我用例图来表示下之间的相互关系:



下面附源代码,供参考。

下一篇我准备讲中介者模式。

猜你喜欢

转载自glc.iteye.com/blog/2230737
今日推荐