专业的JAVA编程教程与资源

网站首页 > java教程 正文

快速带你彻底弄懂23种设计模式-策略模式

temp10 2024-09-30 00:30:56 java教程 82 ℃ 0 评论

模式定义:

定义了算法族,分别封装起来,让他们之间可以相互替换,此模式的变化独立于算法的使用者。

快速带你彻底弄懂23种设计模式-策略模式


举个例子:假如我们现在要开发一款类似与植物大战僵尸的游戏,游戏开始的时候比较简单,只有两种僵尸,一种是普通僵尸,一种是旗手僵尸;他们的外观一个是普通,一个是普通+旗子;移动方式和攻击方式是一样的。

1.先定义两个攻击和移动的接口

interface Attackable {
    void attack();
}

interface Moveable {
    void move();
}

2.定义一个抽象的僵尸类

//2.定义一个抽象的僵尸类
abstract class Zombie {
    Attackable attackable;
    Moveable moveable;

    abstract void display();

    abstract void attack();

    abstract void move();

    public Zombie(Attackable attackable, Moveable moveable) {
        this.attackable = attackable;
        this.moveable = moveable;
    }

    public Attackable getAttackable() {
        return attackable;
    }

    public void setAttackable(Attackable attackable) {
        this.attackable = attackable;
    }

    public Moveable getMoveable() {
        return moveable;
    }

    public void setMoveable(Moveable moveable) {
        this.moveable = moveable;
    }
}

3.具体僵尸类实现僵尸抽象类

//3.具体僵尸类实现僵尸抽象类
class NormalZombie extends Zombie {

    public NormalZombie() {
        super(new StepByStepZombieAttack(),new StepByStepZombieMove() );
    }

    public NormalZombie(Attackable attackable, Moveable moveable) {
        super(attackable, moveable);
    }

    @Override
    void display() {
        System.out.println(" 我是普通僵尸 ");
    }

    @Override
    void attack() {
        attackable.attack();
    }

    @Override
    void move() {
        moveable.move();
    }
}

4.特定的僵尸实现move和attack

//4.特定的僵尸实现move和attack
class StepByStepZombieMove implements Moveable {

    @Override
    public void move() {
        System.out.println(" 一步一步移动... ");
    }
}

class StepByStepZombieAttack implements Attackable {


    @Override
    public void attack() {
        System.out.println(" 咬... ");
    }
}

在主函数中调用:

public class StrategyTest {

    public static void main(String[] args) {
        Zombie normalZombie = new NormalZombie();
        normalZombie.display();
        normalZombie.move();
        normalZombie.attack();
    }
}

运行结果:


5.当我们想添加另外一种类型的僵尸的时候,我们只需要继承Zombie类即可;如果想要改变僵尸的attack或者move,只需要重新实现Attackable或Moveable接口,然后直接在主函数中调用即可。


以上对功能的修改或者拓展并没有修改以前的代码,只是传入了一个特定的实现方式(实现算法)来完成功能。


JDK源码中的应用:

Arrays.sort();

InstantiationStrategy接口

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表