欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式:策略模式

程序员文章站 2022-05-05 13:28:15
...

策略模式定义:

策略模式是对算法的包装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。

 

白话解释:策略模式可以理解为按照不同的行为的表现形式不同,将行为和具体的事物分开,最终达到根据不同的对象具有不同的行为的结果。 

例如:这个也是我接下来的例子中会用到例子,我们都知道鸭子,可以分为很多的种类,北京鸭、玩具鸭等等....其中飞行的能力却各不相同,那我们的最终希望是啥?我们肯定是希望如果我给你的是玩具鸭你就告诉我他不能飞翔,给你个其他的鸭子你就给我一个正确的飞行能力的正确反馈。

 

如何实现:

接口设计的UML类图如下:

设计模式:策略模式

代码如下:

 飞行能力接口:DuckFlyBehavior 

public interface DuckFlyBehavior {
    void fly();
}

不同的实现:


public class BadAtFly implements DuckFlyBehavior{
    @Override
    public void fly() {
        System.out.println("i'm not at flying...");
    }
}
public class CanNotFly implements DuckFlyBehavior{
    @Override
    public void fly() {
        System.out.println("i can't fly ...");
    }
}

duck类:

public abstract class Duck {
    DuckFlyBehavior duckFlyBehavior;
    public abstract void disply();

    public void setDuckFlyBehavior(DuckFlyBehavior duckFlyBehavior){
        this.duckFlyBehavior=duckFlyBehavior;
    }
}

不同的duck:

public class PeKingDuck extends Duck {

    public  PeKingDuck(){
        this.duckFlyBehavior = new BadAtFly();
    }
    @Override
    public void disply() {
        System.out.println("i am peking duck");
    }

}
public class ToyDuck extends Duck{
    public ToyDuck(){
        this.duckFlyBehavior = new CanNotFly();
    }
    @Override
    public void disply() {
        System.out.println("i am toy duck");
    }
}

测试类:

public class TestStrategy {

    public static void main(String[] args) {
        ToyDuck toyDuck = new ToyDuck();
        toyDuck.disply();
        toyDuck.duckFlyBehavior.fly();
    }
}

测试结果:

i am toy duck
i can't fly ...

试想一下,我们不使用设计模式,我们写的代码会是怎么样的呢?