设计模式(21)------策略模式
来源:互联网 发布:手机绿色上网软件 编辑:程序博客网 时间:2024/06/09 13:40
策略模式作用:
定义一个个算法,把这些算法封装起来,同时使这些算法可以相互替换。
应用场景:
(1)许多相关的类仅仅是行为有异,该模式提供一种用多个行为中的一个行为来配置一个类的方法。
(2)需要使用一个算法的不同变体。
(3)算法使用用户不应该知道的数据,使用该模式以避免暴露复杂的,与算法相关的数据结构。
参与对象:
(1)Strategy
定义所有支持的算法的公共接口。Context使用这个接口来调用ConcreteStrategy定义的算法。
(2)ConcreteStrategy
实现Strategy接口,实现某些具体的算法。
(3)Context
用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用,
可以定义一个接口让Strategy访问其数据。
eg:
Strategy
package com.lanhuigu.base.design.behavior.strategy;/** * Strategy: 定义所有支持的算法的公共接口。 * Context使用这个接口来调用ConcreteStrategy定义的算法 */public abstract class Strategy {public abstract void method();}
ConcreteStrategy
package com.lanhuigu.base.design.behavior.strategy;/** * ConcreteStrategy: 算法的实现,实现Strategy接口,实现某些具体的算法 */public class StrategyImplA extends Strategy {@Overridepublic void method() {// TODO Auto-generated method stubSystem.out.println("第一个实现类--A算法");}}
package com.lanhuigu.base.design.behavior.strategy;/** * ConcreteStrategy: 算法的实现,实现Strategy接口,实现某些具体的算法 */public class StrategyImplB extends Strategy {@Overridepublic void method() {// TODO Auto-generated method stubSystem.out.println("第二个实现类--B算法");}}
Context
package com.lanhuigu.base.design.behavior.strategy;/** * Context: 用一个ConcreteStrategy对象来配置。 * 维护一个对Strategy对象的引用,可以定义一个接口让Strategy访问其数据。 */public class Context {Strategy strategy;public Context(Strategy strategy) {// TODO Auto-generated constructor stubthis.strategy = strategy;}public void doMethod() {strategy.method();}}
Client
package com.lanhuigu.base.design.behavior.strategy;public class Test {public static void main(String[] args) {Context ctxA = new Context(new StrategyImplA());ctxA.doMethod();Context ctxB = new Context(new StrategyImplB());ctxB.doMethod();}}
运行结果:
0 0
- 设计模式(21)------策略模式
- 设计模式(21)-策略模式
- 设计模式(21)--策略模式
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式:2)策略设计模式
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- QVector、QList、QLinkedList 类 用法区别
- 设计模式(20)------状态模式
- ASCII码字符对照表
- 区别是什么
- java接口调用安全策略
- 设计模式(21)------策略模式
- k8s1.4 新特性
- 应用程序无法正常启动(0x000007b)的不常见的解决过程
- hdu 5540/Secrete Master Plan
- 1134: 整数去位 贪心
- 设计模式(22)------模板方法模式
- 集合_java集合框架
- 实现View 滑动的几种方法
- 设计模式(23)------访问者模式