马上要放清明小长假了,各位都想好去哪里玩了没?清明前的周日,整理下发型,梳理好心情,发个文章,再思考下清明去哪玩,哈哈哈。
不多废话,切入正题:
你从本文主要能了解到如下几点:1. 为什么要写这篇文章?2. 什么是策略模式?3.设计原则 4. 策略模式的实现及实例。5. 策略模式的优缺点。6.其他
1. 为什么要写这篇文章?
简单来说四个字:记录分享。用来记录供自己快速回顾,分享所学,供他人学习点评参考。
2. 什么是策略模式?
这个在文章末尾会给出解释,看耐心看完实例,相信你再看到定义会有更深刻的印象。
3. 设计原则:
设计原则有很多,这里直说策略模式中使用到的,参看实例思考哪些地方有用到下面的设计模式:
1. 封装变化(找出应用中可能需要变化之处,把它们独立出来,不要和哪些不需要变化的代码混在一起。)
2. 针对接口,超类编程,而不是针对实现编程。
3. 多用组合,少用继承。
4. 策略模式的实现及实例:
假设我们现在正在开发一款类似植物大战僵尸的游戏产品,产品经理告诉我们说:所有僵尸的必要条件是可以动,可以攻击,外观上可以区分就可以了。
这没问题,写一个抽象类Character,然后让所有角色(僵尸)继承这个类就可以了。So Easy.
抽象类
public abstract class Character {
void move(){
System.err.println("move");
}
void attack(){
System.err.println("attack");
}
abstract void display();
}
public class RedHeadZombie extends Character {
//红头僵尸
@Override
void display() {
System.err.println("My head is Red");
}
}
绿头僵尸:
public class GreenHeadZombie extends Character {
@Override
void display() {
System.err.println("My head is Green");
}
}
写完了,问题解决,正准备看看新闻资讯的时候,产品经理走过来对我说,我们需要给我们每个僵尸设置一个前进速度,而且速度要有区别,不能所有僵尸都一样的。好吧,设置速度嘛,也简单,我在抽象类里面添加一个speed的方法,让红头僵尸和绿头僵尸都分别实现这个方法。也不难,分分种搞定。
public abstract class Character {
//抽象类
……
abstract void speed();
}
public class GreenHeadZombie extends Character {
//绿头僵尸
……
@Override
void speed() {
System.err.println("speed is 1.0");
}
}
public class RedHeadZombie extends Character {
//红头僵尸
……
@Override
void speed() {
System.err.println("speed is 3.0");
}
}
好吧,该有的速度也有了,提交代码,这下满足你了吧,产品经理这时走过来告诉你,僵尸的攻击方式不能一样的,你怎么让所有僵尸的攻击方式都一样了,这肯定不行的。好像有点道理的样子,那我就改咯。我重写所有的attack方法不就行了。
public cla