策略模式

定义

策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户.

原则

  • 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起;
  • 针对接口编程,而不是针对实现编程."针对接口编程"真正的意思是"针对超类型编程",关键在于多态;
  • 针对超类型编程:"变量的声明类型应该是超类型,通常是一个抽象类或者是一个接口.如此,只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量.这也意味着声明类时不用理会以后执行时的真正对象类型!".
  • 多用组合,少用继承

a.多态例子

假设有一个抽象类Animal,有两个具体实现类(Dog与Cat)继承Animal.


策略模式_第1张图片
多态.png

做法如下:

  • 针对实现编程
//声明变量d为Dog类型(是Animal的具体实现),会造成我们必须针对具体实现编码
Dog d = new Dog();
d.wang();
  • 针对接口/超类型编程
//该对象是狗,但是现在利用animal进行多态的调用
Animal animal = new Dog();
animal.makeSound();
  • 更棒的是,子类实例化的动作不在需要在代码中硬编码,例如new Dog();,而是在运行时才指定具体实现的对象
//不知道实际的子类型是什么...只关心它知道如何正确的进行makeSound()的动作就够了
a = getAnimal();
a.makeSound();

b.策略设计模式

c.小游戏

策略模式_第2张图片
策略.png

你可能感兴趣的:(策略模式)