第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

JAVA設(shè)計(jì)模式之簡單粗暴學(xué)建造者模式

標(biāo)簽:
Java

文章由浅入深,先用简单例子说明建造者,然后分析模式的优缺点,最后结合优秀开源框架Mybatis,说明该模式的用处。

1、先定义一个机器人模型

复制代码

package com.jstao.model; public class Robot {     private String head;     private String body;     private String hand;     private String foot;     public String getHead() {         return head;     }     public void setHead(String head) {         this.head = head;     }     public String getBody() {         return body;     }     public void setBody(String body) {         this.body = body;     }     public String getHand() {         return hand;     }     public void setHand(String hand) {         this.hand = hand;     }     public String getFoot() {         return foot;     }     public void setFoot(String foot) {         this.foot = foot;     } }

复制代码

这就是机器人模型,有头,有身体,有手,有脚。机器人都是由这个模型出来的。

2、接下来定义一个造机器人的标准。一个把头、身体、手、脚造出来的标准。

复制代码

package com.jstao.service; import com.jstao.model.Robot; public interface IBuildRobot {     public void buildHead();     public void buildBody();     public void buildHand();     public void buildFoot();     public Robot createRobot (); }

复制代码

这样,一个建造机器人的标准就定义好了。依次创建各个部位,最后调用createRobot方法就可以返回一个我们想要的机器人。

3、现在机器人的模型和创建标准都有了,让我们来实现一个会跳舞的机器人。

复制代码

package com.jstao.service.impl; import com.jstao.model.Robot; import com.jstao.service.IBuildRobot; public class DanceRobotBuilder implements IBuildRobot {     Robot robot;     public DanceRobotBuilder(){         robot = new Robot ();     }     @Override     public void buildHead() {         robot.setHead("写入机械舞程序");            }     @Override     public void buildBody() {         robot.setBody("钛合金身体");     }     @Override     public void buildHand() {         robot.setHand("钛合金手");           }     @Override     public void buildFoot() {         robot.setFoot("钛合金脚");     }     @Override     public Robot createRobot () {         return robot;     } }

复制代码

这个会跳机械舞的机器实现了IBuildRobot造机器人标准的接口,最后提供了createRobot方法返回robot实体。

好的,其实到这里呢,我们已经完成了建造的过程。那就这么简单的建造过程,还搞了一个建造模式吗?非也。接下来,就是介绍建造者模式的精髓,那就是director。这个director呢,就是来执行我们刚才的造人动作的。没错,精髓就是我们刚才的造人动作。我们先看代码:

4、指挥官Director

复制代码

public class Director {     public Human createRobotByDirecotr(IBuildRobot ibr){         ibr.buildBody();         ibr.buildFoot();         ibr.buildHand();         ibr.buildHead();          return ibr.createRobot ();     } }

复制代码

建好了,这个Director类就跟个指挥官似,它有资源和工厂的。你跟它说要建造什么类型的机器人,只要传给它。它就给能你建造出来。

我们来看下它是怎么造出来的:

5、测试

复制代码

package com.jstao.main; import com.jstao.controller.Director; import com.jstao.model.Robot; import com.jstao.service.impl.DanceRobotBuilder; public class BuilderTest {     public static void main(String[] args){         Director director = new Director();         Robot robot = director.createRobotByDirecotr(new DanceRobotBuilder ());         System.out.println(robot.getHead());         System.out.println(robot.getBody());         System.out.println(robot.getHand());         System.out.println(robot.getFoot());         System.out.println("机器人创建成功,恭喜!");     }  }

复制代码

6、结果

现在我们想要个会唱歌的机器人,就可以像跳舞机器人那样建好类。交给Director,它就可以给你建出来了。

最后再来看下Builder模式的定义:“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。“好理解点了吧。

 7、总结

感受一下,建造者模式的好处有:

1、  易于拓展。想要建唱歌机器人只要单独将这个类像跳舞人那样建好,交给Director就可以了。无需修改原有代码。符合“开闭原则”。

2、  代码解耦,模块化,方便维护。产品本身与创建过程解耦,可以使用相同的创建过程得到不同的产品。

短板有:使用范围有限。建造者模式创造出来的产品,其组成部分基本相同。如果产品之间的差异较大,则不适用这个模式。

 8、开源框架Mybatis中建造者模式的应用

1、Mybatis中用到的建造者模式:

SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder等

2、举个我读Mybatis源码的例子:

XMLConfigBuilder读取配置文件构建出Configuration对象,然后SqlSessionFactoryBuilder使用Configuration对象作为参数,构建出SqlSessionFactory对象。

3、分析原因

这么做的原因是Mybatis的初始化工作较复杂,不是一个构造函数就能包括的。所以采用了分层构建方法。例如Mybatis中极其重要的Configuration对象,它庞大且复杂,初始化比较麻烦,所以使用专门的建造者XMLConfigBuilder进行构建。

作者:神仙果

原文出处:https://www.cnblogs.com/luohanguo/p/10455745.html  

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消