网站首页 > java教程 正文
模式定义:
定义了算法族,分别封装起来,让他们之间可以相互替换,此模式的变化独立于算法的使用者。
举个例子:假如我们现在要开发一款类似与植物大战僵尸的游戏,游戏开始的时候比较简单,只有两种僵尸,一种是普通僵尸,一种是旗手僵尸;他们的外观一个是普通,一个是普通+旗子;移动方式和攻击方式是一样的。
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接口
- 上一篇: 「java设计模式」(7)——策略模式(案例解析)
- 下一篇: 设计模式系列—策略模式(策略模式实现)
猜你喜欢
- 2024-09-30 Java策略模式在动态数据验证中的应用
- 2024-09-30 《设计模式》之策略模式(策略设计模式详解)
- 2024-09-30 Spring 中策略模式的 2 个经典应用
- 2024-09-30 Java策略模式实现动态验证不同来源的数据
- 2024-09-30 策略模式介绍以及具体使用场景(策略模式的优点及适用环境)
- 2024-09-30 什么是策略模式(策略模式的意图是什么)
- 2024-09-30 设计模式系列—策略模式(策略模式实现)
- 2024-09-30 「java设计模式」(7)——策略模式(案例解析)
- 2024-09-30 使用 Java 的策略设计模式(在java中找一个应用策略模式的实例)
- 2024-09-30 Java设计模式之美「策略模式」(策略模式uml)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)