设计模式之策略模式(实例+Demo)

马上要放清明小长假了,各位都想好去哪里玩了没?清明前的周日,整理下发型,梳理好心情,发个文章,再思考下清明去哪玩,哈哈哈。不多废话,切入正题: 你从本文主要能了解到如下几点:1. 为什么要写这篇文章?2. 什么是策略模式?3.设计原则 4. 策略模式的实现及实例。5. 策略模式的优缺点。6.其他1. 为什么要写这篇文章?简单来说四个字:记录分享。用来记录供自己快速...
摘要由CSDN通过智能技术生成

马上要放清明小长假了,各位都想好去哪里玩了没?清明前的周日,整理下发型,梳理好心情,发个文章,再思考下清明去哪玩,哈哈哈。

这里写图片描述

不多废话,切入正题:

你从本文主要能了解到如下几点: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
  • 42
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值