[size=large]
设计模式的学习,我参考了开涛的博客;里面的内容讲解得比较详细。记得最开始学习设计模式是大二,那时从简单的抽象工厂模式开始着手、但找不到感觉,而且在实际应用中也较少应用。后来、慢慢熟悉理解并应用java的各种基础知识后,对设计模式的应用便有了简单的了解,学起来也变得容易理解了。所以、学习设计模式前,对java的抽象类和接口及重写重载的定义和区别要有充分的理解。
设计模式的意义:也就是设计模式的六大原则。目的就是降低依赖、降低耦合。
开闭原则:扩展开放、修改关闭。
里氏代换原则:任何基类出现的地方、子类一定可以出现。
依赖倒转原则:针对接口编程、依赖抽象而不依赖具体。
接口隔离原则:使用多个接口要比使用单个接口要好。
迪米特法则(最少知道原则):一个实体尽量少与其他实体之间发生相互最用。
合成复用原则:尽量使用合成或聚合的方式、而不是继承;这个我目前不是很理解。
设计模式从大类可以分为三大块:创建型模式、结构型模式、行为型模式。
创建型模式较为简单、含有五个:单例模式、抽象工厂模式、工厂方法模式、建造者模式、原型模式。
结构型模式有七个:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
剩下的行为型模式有11个:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解析器模式。
今天、我就从解析器模式开始,用做各种各样的解析器的解析。
常见的应用场景有数据的计算。当我们计算多目运算时,就可以套用;一般应用较多的在编译器及正则表达式等解析器中。
比如数据计算:9+2-8
我们就可以用解析器模式来进行运算。
1、先写一个接口、用来定义运算方法:
[/size]
[size=large]
2、然后写实体类,定义属性作为运算的数据;并生成get和set方法。
[/size]
[size=large]
3、运算方法的具体实现,通过实现Expression接口。
[/size]
[size=large]
这里只写了加法和减法;根据需要、还可以添加乘除等其他运算方法。
5、最后来调用:
[/size]
这就是简单的解释器模式应用。在实际生成过程中、可能会比这个更复杂。
下面、我用例图来表示下之间的相互关系:
[img]http://dl2.iteye.com/upload/attachment/0110/5199/002b96aa-33d7-322b-8d55-e9853757d530.jpg[/img]
下面附源代码,供参考。
下一篇我准备讲中介者模式。
设计模式的学习,我参考了开涛的博客;里面的内容讲解得比较详细。记得最开始学习设计模式是大二,那时从简单的抽象工厂模式开始着手、但找不到感觉,而且在实际应用中也较少应用。后来、慢慢熟悉理解并应用java的各种基础知识后,对设计模式的应用便有了简单的了解,学起来也变得容易理解了。所以、学习设计模式前,对java的抽象类和接口及重写重载的定义和区别要有充分的理解。
设计模式的意义:也就是设计模式的六大原则。目的就是降低依赖、降低耦合。
开闭原则:扩展开放、修改关闭。
里氏代换原则:任何基类出现的地方、子类一定可以出现。
依赖倒转原则:针对接口编程、依赖抽象而不依赖具体。
接口隔离原则:使用多个接口要比使用单个接口要好。
迪米特法则(最少知道原则):一个实体尽量少与其他实体之间发生相互最用。
合成复用原则:尽量使用合成或聚合的方式、而不是继承;这个我目前不是很理解。
设计模式从大类可以分为三大块:创建型模式、结构型模式、行为型模式。
创建型模式较为简单、含有五个:单例模式、抽象工厂模式、工厂方法模式、建造者模式、原型模式。
结构型模式有七个:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
剩下的行为型模式有11个:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解析器模式。
今天、我就从解析器模式开始,用做各种各样的解析器的解析。
常见的应用场景有数据的计算。当我们计算多目运算时,就可以套用;一般应用较多的在编译器及正则表达式等解析器中。
比如数据计算:9+2-8
我们就可以用解析器模式来进行运算。
1、先写一个接口、用来定义运算方法:
[/size]
package com.pingan.mobile;
public interface Expression {
public int enterpret(Context context);
}
[size=large]
2、然后写实体类,定义属性作为运算的数据;并生成get和set方法。
[/size]
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;
}
[size=large]
3、运算方法的具体实现,通过实现Expression接口。
[/size]
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();
}
}
[size=large]
这里只写了加法和减法;根据需要、还可以添加乘除等其他运算方法。
5、最后来调用:
[/size]
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);
}
这就是简单的解释器模式应用。在实际生成过程中、可能会比这个更复杂。
下面、我用例图来表示下之间的相互关系:
[img]http://dl2.iteye.com/upload/attachment/0110/5199/002b96aa-33d7-322b-8d55-e9853757d530.jpg[/img]
下面附源代码,供参考。
下一篇我准备讲中介者模式。