意图/目的/定义(intent)
(简短的描述该模式的作用。)
策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
动机(motivation)
适用性(applicability)
结构(structure)
参与者(participants)
(参与者描述在此设计中所涉及到的类和对象在模式中的责任和角色。)
协作(collaborations)
实现/范例代码(implementation/sample code)
(实现提供了你在实现该模式时需要使用的技巧,以及你应该小心面对的问题。)
(范例代码提供代码的片段,可能对你的实现有多帮助。)
模拟鸭子类型实现代码
/// 飞行行为超类
abstract class FlyBehavior {
void fly();
}
// 翅膀飞行
class FlyWithWings extends FlyBehavior {
void fly() {
print('使用翅膀飞行');
}
}
/// 不会飞行
class FlyNoWay extends FlyBehavior {
void fly() {
print('不会飞');
}
}
/// 叫声行为类
abstract class QuackBehavior {
void quack();
}
/// 呱呱叫
class Quack extends QuackBehavior {
void quack() {
print('呱呱叫');
}
}
/// 吱吱叫
class Squeak extends QuackBehavior {
void quack() {
print('吱吱叫');
}
}
/// 不会叫
class MuteQuack extends QuackBehavior {
void quack() {
print('不会叫');
}
}
/// 鸭子类
abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
// 构造函数
Duck(this.flyBehavior, this.quackBehavior);
// Duck(fb, qb) {
// this.flyBehavior = fb;
// this.quackBehavior = qb;
// }
// 外观
void display();
// 飞行
void performFly() {
flyBehavior.fly();
}
// 叫声
void performQuack() {
quackBehavior.quack();
}
void setFly(FlyBehavior fb) {
this.flyBehavior = fb;
}
void setQuack(QuackBehavior qb) {
this.quackBehavior = qb;
}
// 游泳
void swim() {
print('游泳');
}
}
/// 野鸭
class MallardDuck extends Duck {
MallardDuck()
: super(
new FlyWithWings(),
new Quack(),
);
@override
void display() {
print('我是野鸭');
}
}
/// 红头鸭
class RedheadDuck extends Duck {
RedheadDuck()
: super(
new FlyWithWings(),
new Quack(),
);
@override
void display() {
print('红头鸭');
}
}
/// 橡皮鸭
class RubberDuck extends Duck {
RubberDuck()
: super(
new FlyNoWay(),
new Squeak(),
);
@override
void display() {
print('橡皮鸭');
}
}
/// 测试
void main() {
MallardDuck mallardDuck = new MallardDuck();
RedheadDuck redheadDuck = new RedheadDuck();
RubberDuck rubberDuck = new RubberDuck();
mallardDuck.display();
mallardDuck.swim();
mallardDuck.performFly();
mallardDuck.performQuack();
print('\n');
redheadDuck.display();
redheadDuck.swim();
redheadDuck.performFly();
redheadDuck.performQuack();
print('\n');
rubberDuck.display();
rubberDuck.swim();
rubberDuck.performFly();
rubberDuck.performQuack();
print('\n');
// 动态设置鸭子行为
print('动态设置鸭子行为后:');
mallardDuck.setFly(new FlyNoWay());
mallardDuck.setQuack(new MuteQuack());
mallardDuck.display();
mallardDuck.swim();
mallardDuck.performFly();
mallardDuck.performQuack();
}
已知应用(known uses)
相关模式(related patterns)
(相关模式描述了此模式和其他模式之间的关系。)
OO知识
OO基础
- 抽象
- 封装
- 多态
- 继承
OO原则