意图/目的/定义(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(),);@overridevoid display() {print('我是野鸭');}}/// 红头鸭class RedheadDuck extends Duck {RedheadDuck(): super(new FlyWithWings(),new Quack(),);@overridevoid display() {print('红头鸭');}}/// 橡皮鸭class RubberDuck extends Duck {RubberDuck(): super(new FlyNoWay(),new Squeak(),);@overridevoid 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原则
