详解JAVA面向对象的设计模式 (二)、策略模式
策略模式 Strategy
介绍
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
Intent
定义一系列算法,封装每个算法,并使它们可以互换。
策略模式可以让算法独立于使用它的客户端。
前言
本篇会以一个饲养员的饲养工作为例,一步步码到使用策略模式解决实际问题。
首先我们看看遇到类似如下的问题时,该怎么办。
有多种类别的多个宠物需要喂食。
只有一个人(对象)知道不同宠物应该根据它的体重喂多少食物。
你可以在这篇文章里找到最简洁的策略模式实现
一直膨胀的饲养员
最直接的实现方式,就是创建一个Feeder类(饲养员)。在里面实现一个Feed喂食方法,然后在喂食时,根据宠物种类和体重决定喂食量。
public class Feeder { public void feed(Cat cat) { System.out.println("我喂食了" + cat.getName() + " " + getCatFoodAmount(cat) + "斤食物"); } public Integer getCatFoodAmount(Cat cat) { Integer weight = cat.getWeight(); return weight/2; } // 输出结果 // 我喂食了Tom 4斤食物 public static void main(String[] args) { Cat tom = new Cat("Tom", 8); Feeder feeder = new Feeder(); feeder.feed(tom); } }
上面的代码很直接。但是这样做在拓展时就会出现问题了。如果饲养员以后要喂狗狗,要喂熊猫,要喂西几,要喂脑斧,就得一直往Feeder类中写入feed的重载方法和getXXXFoodWeight方法。饲养员类就逐渐变成了个胖子。太不优雅了。
那么如何解决饲养员日益膨胀问题
赞 (0)