当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
18 Star 81 Fork 26

ryanpenn / dart_in_action
暂停

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
35_design_pattern_strategy.dart 1.53 KB
一键复制 编辑 原始数据 按行查看 历史
ryanpenn 提交于 2019-03-27 10:55 . dart programming
/**
策略模式(Strategy Pattern)
意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
*/
main(List<String> args) {
Context context = new Context(new OperationAdd());
print("10 + 5 = ${context.executeStrategy(10, 5)}");
context = new Context(new OperationSubstract());
print("10 - 5 = ${context.executeStrategy(10, 5)}");
context = new Context(new OperationMultiply());
print("10 * 5 = ${context.executeStrategy(10, 5)}");
}
//////////////////////////////////////////////////////////////////
///
/// 创建一个接口
///
abstract class Strategy {
int doOperation(int num1, int num2);
}
///
/// 创建实现接口的实体类
///
class OperationAdd implements Strategy {
@override
int doOperation(int num1, int num2) {
return num1 + num2;
}
}
class OperationSubstract implements Strategy {
@override
int doOperation(int num1, int num2) {
return num1 - num2;
}
}
class OperationMultiply implements Strategy {
@override
int doOperation(int num1, int num2) {
return num1 * num2;
}
}
///
/// 创建 Context 类
///
class Context {
Strategy _strategy;
Context(this._strategy);
int executeStrategy(int num1, int num2) {
return _strategy.doOperation(num1, num2);
}
}
Dart
1
https://gitee.com/ryanpenn/dart_in_action.git
git@gitee.com:ryanpenn/dart_in_action.git
ryanpenn
dart_in_action
dart_in_action
master

搜索帮助