HeadFirst设计模式之策略模式

最近看完了《HeadFirst设计模式》这本书,想趁着这个机会写点东西总结总结,因此准备开始从今天开始将各种设计模式捋一遍,记录下来为有需要的同学当做参考。
闲话少叙,今天首先来说一下策略模式。首先给出策略模式的定义:
**策略模式定义了算法蔟,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。**
假设你想开发一个模拟鸭子的游戏,其中有各式各样的鸭子,鸭子拥有各种行为,因此你设计一个鸭子的超类,然后各种鸭子继承此超类。
public abstract class Duck {
   
    abstract public void quak(); //这些方法为鸭子的各种行为,包括游泳、呱呱叫等
    abstract public void swim();
    abstract public void display();
}

class MallardDuck extends Duck{
   
    void display(){
      //....实现  该鸭子为绿头鸭,展示起来头为绿色的
     }
}

class RedHeadDuck extends Duck{
   
    void display(){
      //....实现  该鸭子是红头的,展示起来为红色
     }
}

现在你的鸭子功能模拟器的功能增加了,现在需要鸭子会飞,因此你可能会想到在抽象基类加一个fly()方法。

public abstract class Duck {
   
    abstract public void quak(); //这些方法为鸭子的各种行为,包括游泳、呱呱叫等
    abstract public void swim();
    abstract public void display();
    abstract public void fly(); //新增飞翔行为
}

此时抽象基类继承的问题就暴露出来了,因为各个鸭子都继承了基类的抽象方法,假设现在有一只橡皮鸭子也继承了该基类,如下所示。

/**
 *各个子类都要实现抽象基类中的抽象方法,表示为自己本身的实现。
 */
class RubberDuck extends Duck{
    
    void display(){
   };
    void swim(){
   };
    void quak(){
   }

你可能感兴趣的:(设计模式,策略模式,java,设计模式)