ABAP与设计模式之策略模式
2018-07-12 本文已影响5人
46b61a5f089d
首先介绍策略模式的基本内容
1. 意图:
定义一系列算法,把他们一个个的封装起来,并且使他们可以互相替换.本模式可以使得算法可以独立于使用他的客户而变化.
2. 结构:

3. 适用性:
1).许多相关的类仅仅是行为有异.
2).需要使用一个算法的不同变体.
3).一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现.
4. 参与者:
1).Strategy
定义所支持的算法的公共接口.context使用这个接口来调用某个concrete strategy所定义的算法.
2).ConcreteStrategy
以strategy接口实现具体的算法
3).context
用一个concretestrategy对象来配置
维护一个strategy对象的引用
可定义一个接口来让strategy访问它的数据
5. 效果
1).相关算法系列
2).一个替代继承的方法
3).消除一系列条件语句
Note:
对于效果,我想在以后的例子中就会有所体现,现在只是基本的定义以及结构,所以看上去有些晦涩难懂,不过不要着急,慢慢的就能理解了.
策略模式的例子:
UML图:

实现:
1. 定义flybehavior接口

2. 定义fly的行为算法


1. 定义quackbehavior接口

2. 定义quack的行为算法



3. 定义抽象类duck,包含两个接口的引用

[图片上传失败...(image-5b7de1-1531353552173)]
1. 定义duck子类
绿头鸭子


橡皮鸭子


测试结果:
