浅谈设计模式:建造者模式(Builder Pattern)

热爱生活、享受娱乐、专注技术,欢迎关注QGer,我们一起见证成长!

什么是建造者模式?

官方解释: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

通俗解释:一个产品抽象成的类可能属性会很多并且这些属性很难在一个简单的(构造)方法中全部初始化完毕,或者说全部构建完毕,这个时候使用一个抽象构造器(Builder),将这类产品的构造属性抽象成几组构建方法,不同的建造者(构建器)可以有不同的组织构建实现,最终在一个流程总控的类(Director)中控制流程化调用Builder的构建方法,这样的创建型逻辑便为建造者模式。

为什么使用建造者模式?

如何使用建造者模式? 建造者模式的常用UML图如下:

各个组件的定义如下:

Director(导演类):内聚一个Builder接口对象,产品建造的流程总控,对建造者的各个实例步骤方法进行顺序调用,并且利用多态实现不同复杂对象的实例化。一般不与产品类发生直接依赖的关系,,仅依赖于抽象层次下的Builder接口。是与客户端(调用方)直接交互的组件。

适用范围:

应用例子: 就说说英雄联盟这个游戏吧,游戏的每一个召唤师英雄的属性都是极为复杂的,那么在此简化一下,我想要构建每一个英雄的q、w、e、r四个技能,其他暂时忽视,此时在builder可抽象四个构建这四个技能的方法,以及一个获取最终产品的方法,然后我们先实现builder接口定义一下寒冰射手的英雄Builder(果然对寒冰情有独钟),接着定义一个Director类,内聚一个Builder接口,定义一下construct方法,方法体内依次调用builder的四个技能构建接口,然后返回构建完召唤师英雄类。

{();();();();public abstract GameRole getRole();}{private GameRole hangBingRole;public HanBingBuilder() {this.hangBingRole = new GameRole();}() {hangBingRole.setqSkill(“冰霜射击”);}() {hangBingRole.setwSkill(“万箭齐发”);}() {hangBingRole.seteSkill(“鹰击长空”);}() {hangBingRole.setrSkill(“魔法水晶箭”);}@Overridepublic GameRole getRole() {return hangBingRole;}}{private String qSkill;private String wSkill;private String eSkill;private String rSkill;(String qSkill) {this.qSkill = qSkill;}(String wSkill) {this.wSkill = wSkill;}(String eSkill) {this.eSkill = eSkill;}(String rSkill) {this.rSkill = rSkill;}public String getqSkill() {return qSkill;}public String getwSkill() {return wSkill;}public String geteSkill() {return eSkill;}public String getrSkill() {return rSkill;}}{Builder roleBuilder = null;(Builder roleBuilder) {this.roleBuilder = roleBuilder;}public GameRole construct() {roleBuilder.buildQSkill();roleBuilder.buildWSkill();roleBuilder.buildESkill();roleBuilder.buildRSkill();return roleBuilder.getRole();}}{(String[] args){Builder hanBingBuilder = new HanBingBuilder();Director director = new Director();director.setRoleBuilder(hanBingBuilder);GameRole hanBingRole = director.construct();System.out.println(“q技能是:” + hanBingRole.getqSkill());}}

此后,要想新增一个新的召唤师英雄,比如光辉女郎,仅需实现Builder接口定义四个技能构建方法的实现即可,对于其他组件弱依赖,变更成本很低。

便是不再存在着任何我曾经对你有过的希望。

浅谈设计模式:建造者模式(Builder Pattern)

相关文章:

你感兴趣的文章:

标签云: