Context的executeStrategy方法会调用当前Strategy对象的execute方法来执行具体的策略。 Context的实现方式 Context的实现方式有很多种,具体的实现方式取决于具体的需求和设计模式。在上面的示例中,我们可以看到Context通过持有一个状态或者策略对象来实现。除此之外,Context还可以通过其他方式来实现,比如使用成员变量或者方法参数...
}// 测试publicclassStrategyPatternDemo{publicstaticvoidmain(String[] args){Contextcontext=newContext(newOperationAdd()); System.out.println("10 + 5 = "+ context.executeStrategy(10,5)); context =newContext(newOperationSubtract()); System.out.println("10 - 5 = "+ context.executeStrategy(10,...
publicclassMain{publicstaticvoidmain(String[]args){Contextcontext=newContext();context.setStrategy(newOperationAdd());System.out.println("10 + 5 = "+context.executeStrategy(10,5));context.setStrategy(newOperationSubtract());System.out.println("10 - 5 = "+context.executeStrategy(10,5));}} ...
非终结符表达式(Non-terminal Expression):实现抽象表达式接口,表示文法中的非终结符,通常由终结符和其他非终结符组合而成,需要进行进一步解释。 上下文(Context):包含解释器解释的全局信息,通常用于传递解释器之间的共享信息。 ▷工作流程: 定义文法规则:首先,需要定义一个语言的文法规则,包括终结符和非终结符。 创建...
Context: 环境类Strategy: 抽象策略类ConcreteStrategy: 具体策略类 16.状态模式 在很多情况下我们对象的行为依赖于它的一个或者多个变化的属性,这些可变的属性我们称之为状态,也就是说行为依赖状态,即当该对象因为在外部的互动而导致他的状态发生变化,从而它的行为也会做出相应的变化。对于这种情况,我们是不能用...
上下文(Context):上下文维护对策略对象的引用,通常具有一个方法用于接受或切换不同的策略。上下文将客户端请求委派给策略对象执行。 主要优点包括: 算法的独立性:每个具体策略类都封装了一个独立的算法,这使得算法可以独立于客户端代码进行修改和扩展。 避免条件语句:策略模式有助于消除大量的条件语句,提高了代码的可读...
状态模式的思想是将状态以及状态间的转换规则(状态机)和状态对应的特性行为封装成为一个对象,使用该对象装配环境类(context),以达到进行状态切换的时候能够自动变更context的某些行为(context的行为主要依靠状态的行为)。 实现:状态模式中一般存在三种角色:抽象状态接口,具体状态类和环境类(context)。 抽象状态接口:抽象接...
策略模式的思想是提取算法或者行为,对算法或者策略进行封装成类,并装配到一个环境类(context)上,使得环境类可以使用不同的算法或者策略来解决不同的问题。策略模式是一种行为型设计模式。 这种设计模式解决的是硬编码场景中的算法扩展问题。针对某一个场景,可能存在多个算法来进行处理。这多个算法,可能是写在一个工具...
23种设计模式(GOF23) 创建型模式: 单例模式、 工厂模式、抽象工厂模式、建造者模式、原型模式。 结构型模式: 适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式 行为型模式: 模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式, 访问...
角色●环境(Context)角色:持有一个Strategy的引用。 ●抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。 ●具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。 源代码 环境角色类 代码语言:javascript ...