往往大师级别的设计是简单的,易懂的,可扩展的,从不做作,整齐的代码让阅读的人感到很舒服。最近在看一个开源项目的源码,其中有好多的设计思想可以借鉴,相信这些优雅的代码也是在大量实践基础上,通过不断的重构而形成的。有一小段代码自认为写的不错,以下是源码:
EPAdministratorImpl类中:
java 代码
- private static ParseRuleSelector patternParseRule;
- private static ParseRuleSelector eqlParseRule;
- static
- {
- patternParseRule = new ParseRuleSelector()
- {
- public void invokeParseRule(EQLStatementParser parser) throws TokenStreamException, RecognitionException
- {
- parser.startPatternExpressionRule();
- }
- };
-
- eqlParseRule = new ParseRuleSelector()
- {
- public void invokeParseRule(EQLStatementParser parser) throws TokenStreamException, RecognitionException
- {
- parser.startEQLExpressionRule();
- }
- };
-
- }
这里用匿名内部类对接口ParseRuleSelector进行实现,并加到static块中,在LoadClass的时候,初始化成员变量patternParseRule和eqlParseRule,是策略模式的实现方,而对于这两个成员变量的使用仅仅在该类里的一个方法中:
java 代码
- AST ast = ParseHelper.parse(expression, patternParseRule);
在其他地方这两个实现是不可用的,达到了很好的封装,因为ParseRuleSelector的目的就是选择EQLStatementParser的执行策略,不带有具体的业务数据,因此做成静态变量,使得对于一个Class仅有一个实例,节省内存。
在ParseHelper中的方法
java 代码
- public static AST parse(String expression, ParseRuleSelector parseRuleSelector) throws EPException {
- EQLStatementLexer lexer = new EQLStatementLexer(new StringReader(expression));
- EQLStatementParser parser = new EQLStatementParser(lexer);
- parseRuleSelector.invokeParseRule(parser);
- }
调用接口,是面向接口编程,是策略模式的执行方,让具体的实现在EPAdministratorImpl中的匿名内部类完成。这样对于加入EQLStatementParser中的新方法,都可以在EPAdministratorImpl中对接口进行匿名实现,从而达到扩展的目的,并不需要改动ParseHelper。
分享到:
相关推荐
技术: 1. spring事件驱动(ApplicationEventPublisher) 2. 策略模式处理事件 目的: 1. 通过event,代码逻辑异步处理 2. 通过策略模式,构建具体监听实现 3. 解耦 4. 容错(降低代码块错误风险)
具体的场景在这个博客上,http://blog.csdn.net/zhylei/article/details/9042749,是现实中遇到的处理有确定方案和没有确定方案的场景问题,具体应用了设计模式中的“策略模式”
策略模式使用的主要OOP概念 最小抽象策略模式 添加更多的具体策略和具体上下文环境 使用字符串策略 小结 第Ⅴ部分 复合模式 第12章 模型-视图-控制器模式 什么是模型-视图-控制器(MVC)模式? MVC元素间的...
主要介绍了php设计模式之策略模式,结合具体应用案例形式详细分析了php策略模式的原理、定义、实现方法及项目应用案例与操作注意事项,需要的朋友可以参考下
17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 ...
本书利用大量浅显易懂的例子告诉你如何应用多种面向对象模式,并展示了这些模式在一些成熟的实际项目中的具体应用。 需要学习这些可重用的模式如何帮助你解决复杂的问题,如何组织面向对象代码,以及只改变一些小...
17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 ...
在高等教育事业的发展中,新型教学模式的研究和实践已经成为我国高等教育教学改革的热点。应用型本科人才培养模式改革探索是当前高等教育领域的热点问题之一。本文提出“3+1”人才培养模式,旨在解决传统教学模式...
整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域中具体应用产生的具体不同 的变化需求,而这些变化东西就是 J2EE 程序员所要做的。 由此可见,设计模式和 J2EE 在思想...
知识点详解:在项目管理中,项目建设单位是项目的实施主体,项目责任人是项目的直接责任人,项目实施机构是项目的执行机构。领导和管理机构是项目的管理机构,负责项目的实施和监督。 2. 投资概算编制:投资概算...
17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 ...
17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 ...
17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 ...
17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 ...
17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 ...
17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 ...
在目录中,第一章执行概要是企业创业的总体概述,涵盖了创意背景、公司简介、产品分析、市场分析、投资、财务和风险分析等方面的内容。这些内容都是企业创业的重要组成部分,每个部分都需要企业家和创业者认真考虑和...
信息化项目建设实施计划方案编写指南 本文档旨在为信息化项目建设实施计划方案的编写提供指南,...*应用推广:充分说明项目的推广应用围,使用人员培训计划,跨部门、跨地区项目须详细描述试点推广模式和推进方案。
也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中的数据字典信息 C#中利用GetOleDbSchemaTable获取数据库内表信息...