设计模式干学着难免有些枯燥,相比而言,王者荣耀就显得有意思多了。所以今天我们不谈设计模式,谈农药。
王者荣耀有很多英雄以及装备,不同的英雄还要搭配不同的装备,这个对新手显得不太友好。咱们作为一个老手,今天来帮帮忙。
实现
虽然游戏里角色众多,但大致可以分为射手,法师,坦克,战士,辅助这几类。我们为这几大类英雄定制一套通用的出装,来指导新手。
产品类
需求有了,根据描述,我们首先得有一个具体的产品类,也就是游戏的英雄角色。
1 | public class Hero { |
抽象建造者
抽象构造者用来规范产品的组建。
1 | public abstract class Builder { |
具体建造者
根据需求,首先实现射手类的具体建造者。具体建造者实现抽象类定义的所有方法,并返回一个组建好的对象。
1 | public class SheShouBuilder extend Build { |
同理,接着实现法师类的具体建造者。
1 | public class FaShiBuilder extend Build { |
最后时坦克类的具体建造者。
1 | public class TankeBuilder extend Build { |
导演类
导演类负责安排已有模块的组装顺序,并告诉建造者开始建造。
每种英雄角色的侧重点都不同,所以出装顺序很有讲究。
可以看出,这里射手需要输出,所以优先出攻击装;法师需要支援,所以优先出移速装;坦克需要抗伤,所以优先出防御装。
1 | public class Director { |
客户端调用
好了,建造者模式的四大类已经全部完工,接着我们就可以在客户端里进行非常舒服地调用了。
1 | Director director = new director(); |
输出结果如下:
1 | D/Chen: 射手类英雄通用出装如下: |
总结
真的只是王者荣耀的总结~不管你信不信,反正我信了。
优点
- 封装性:使用建造者模式可以使客户端不必知道产品内部组成的细节。
- 易扩展:建造者是独立的,对系统的扩展非常有利。
- 规避风险:建造的过程不会对其他模块产生影响。
使用场景
- 需要生产的产品对象有复杂的内部结构,这些产品对象具备共性。
- 需要隔离复杂对象的创建和使用。
- 产品类中不同的调用顺序会产生不同的效能。
建造者模式(也叫做生成器模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。