往往大师级别的设计是简单的,易懂的,可扩展的,从不做作,整齐的代码让阅读的人感到很舒服。最近在看一个开源项目的源码,其中有好多的设计思想可以借鉴,相信这些优雅的代码也是在大量实践基础上,通过不断的重构而形成的。有一小段代码自认为写的不错,以下是源码:
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。
分享到:
相关推荐
例如,"策略模式在实际项目中的应用二"可能涉及到一个系统中对不同数据处理策略的灵活切换。在这个测试Demo中,我们可能有一个核心业务逻辑,它需要根据不同的条件或请求,采用不同的策略进行处理。这些策略可以是...
在这个名为"策略模式在实际项目中的应用一"的项目中,我们可能可以看到以下的结构: 1. `Context`角色:这个角色通常被称为上下文,它维持了一个对策略对象的引用,使用这个策略对象来执行特定的算法。在Java中,这...
技术: 1. spring事件驱动(ApplicationEventPublisher) 2. 策略模式处理事件 目的: 1. 通过event,代码逻辑异步处理 2. 通过策略模式,构建具体监听实现 3. 解耦 4. 容错(降低代码块错误风险)
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Android开发中,策略模式的应用可以帮助我们更好地实现灵活性和可扩展性,...在实际项目中,结合MVC、MVVM等架构模式,策略模式能更好地提升代码质量。
具体的场景在这个博客上,http://blog.csdn.net/zhylei/article/details/9042749,是现实中遇到的处理有确定方案和没有确定方案的场景问题,具体应用了设计模式中的“策略模式”
接下来,我们将深入探讨策略模式及其在DOTA中的具体应用。 策略模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以相互替换。每个算法都可以被视为一个策略,而策略之间是平等的。在DOTA中,每个...
策略模式是一种设计模式,主要应用于对象行为的设计,其核心思想是将不同的算法策略封装到独立的类中,这些类都实现一个公共的接口。...在实际项目中,我们应该善于利用策略模式来优化代码结构,提高代码质量。
在实际应用中,简单工厂模式常用于创建一组相关的或相互依赖的对象,而策略模式则适用于需要在运行时根据条件选择不同行为的情况,如在游戏开发中选择不同的AI策略,或者在财务系统中根据用户等级选择不同的折扣策略...
设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和...通过鸭子问题,可以让学习者更好地了解策略模式的概念和实现,从而更好地应用于实际项目中。
在实际应用中,策略模式常用于游戏规则、排序算法、支付方式等多种场景。例如,在电商系统中,不同的用户可能有不同的优惠策略,如满减、打折等,这时可以通过策略模式来实现,让系统根据用户类型动态选择合适的优惠...
本实战应用将探讨如何在Spring项目中有效地整合策略模式,以提高代码的灵活性和可维护性。 首先,策略模式的核心概念是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。在Spring中,我们可以利用...
在实际应用中,我们可能需要根据用户的选择或特定条件动态选择策略。Spring提供了`@Qualifier`注解或`@Resource`注解来指定特定的Bean,或者使用`ApplicationContext`在运行时获取Bean并设置策略。 此外,Spring ...
这个压缩包文件"StrategyMarket"可能包含了一些关于如何在市场策略应用中实现策略模式的示例代码。 策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。这些算法都遵循一个共同的...
通过这个案例,你可以看到策略模式如何在实际编程中应用,如何创建和使用策略对象,以及如何通过上下文来改变行为。这有助于深入理解策略模式,并能将其运用到自己的项目中,提高代码的灵活性和可维护性。
在这个项目中,可能包含了一个或多个工厂类,用于创建不同的对象,同时也可能有相应的策略模式实现,用于在运行时根据需求选择不同的策略。测试代码可以帮助我们理解这些模式如何在实际场景中工作,以及如何通过单元...
在实际应用中,策略模式常与工厂模式结合使用,由工厂类根据需求动态创建并返回策略对象。同时,策略模式也可以和其他设计模式如组合模式、装饰模式等结合,提供更复杂的行为控制。 通过阅读博文《设计模式之策略...
在博客中提到的链接(可能已失效)中,作者详细解释了如何在实际项目中应用策略模式,包括代码示例和使用场景分析。对于初学者来说,这是一个很好的资源,可以帮助理解策略模式的工作原理和应用场景。如果你在阅读...
在这个名为"java策略模式小例子"的项目中,我们可以预期看到一个简单的示例,演示了如何在Java中应用策略模式。`Strategy(Game)`可能包含了一些不同的策略类,每个类代表一种特定的游戏策略,以及一个上下文(Context...
在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 #### 核心概念 - **策略接口(Strategy Interface)**:定义了一组相关或相互排斥的操作。这些操作在不同的上下文中有...
在实际应用中,策略模式常常用于游戏AI、财务计算、排序算法等场景。例如,在游戏中,角色的行为可以由多种策略决定,如攻击、防御、逃跑等,每种行为都是一个策略类;在财务计算中,不同税率的计算策略可以封装为...