设计模式的学习,我参考了开涛的博客;里面的内容讲解得比较详细。记得最开始学习设计模式是大二,那时从简单的抽象工厂模式开始着手、但找不到感觉,而且在实际应用中也较少应用。后来、慢慢熟悉理解并应用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); }
这就是简单的解释器模式应用。在实际生成过程中、可能会比这个更复杂。
下面、我用例图来表示下之间的相互关系:
下面附源代码,供参考。
下一篇我准备讲中介者模式。