java设计模式建造_java设计模式之建造者模式

学习了设计模式,一直感觉有进步又没有进步,与同学、同事探讨了一下。变化不可能一会就可以的,需要努力坚持。不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好。还有几个设计模式一直没有写,原因之一是上面所说的,原因之二是觉的理解不够,不知道如何下笔。

建造者模式

建造者模式,顾名思义的就是类似建房子,有一个固定的流程。在大话设计模式中,作者举了一个例子大概意思是同一道菜在中国的每一个地方都有不同的味道(LZ印象最深的是鱼香肉丝,来北方最之后印象最深的是宫保鸡丁。哈哈),而肯德基的鸡腿、汉堡在每一个城市都是一样的味道。我觉的这一个例子可以清楚的认识到建造者模式有一个固定的建造过程。建造者模式实现了依赖倒转原则,抽象不应该依赖细节,细节应该依赖与抽象。建造者模式的定义是:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

建造者模式的角色定义,在建造者模式中存在以下4个角色:

1 builder:为创建一个产品对象的各个部件指定抽象接口。

2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。

3 Director:构造一个使用Builder接口的对象。

4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

建造者模式UML图

b40a8a40ce365658c850c4c6c2369869.png

从上图可以看出Builder是为创建一个Product对象的各个部件指定的抽象接口,Prodcut是具体的产品。Director是一个建造者,由它指挥使用BUilder。ConcreteBuilder是具体的建造,实现Builder接口的各个方法。

建造者模式代码

建造者模式我们就以建房子这一个工程为例子写程序吧。这一过程为打桩建立基础、砌墙、封顶。不管是普通房子也好,别墅也好都需要经历这一过程,符合我们的建设

具体的产品Product

packagecom.roc.build;/*** 具体的产品---房子

*@authorliaowp

**/

public classProduct {private String basic;//地基

private String wall;//墙

private String roofed;//楼顶

publicString getBasic() {returnbasic;

}public voidsetBasic(String basic) {this.basic =basic;

}publicString getWall() {returnwall;

}public voidsetWall(String wall) {this.wall =wall;

}publicString getRoofed() {returnroofed;

}public voidsetRoofed(String roofed) {this.roofed =roofed;

}

}

抽象建造

packagecom.roc.build;/*** 抽象建造

*@authorliaowp

**/

public interfaceBuilder {/*** 打基础*/

public voidbuildBasic();/*** 砌墙*/

public voidbuildWalls();/*** 封顶*/

public voidroofed();/*** 造房子

*@return

*/

publicProduct buildProduct();

}

具体的建造

packagecom.roc.build;/*** 具体的建造

*@authorliaowp

**/

public class ConcreteBuilder implementsBuilder{privateProduct product;publicConcreteBuilder(){

product=newProduct();

}

@Overridepublic voidbuildBasic() {

product.setBasic("打好基础");

}

@Overridepublic voidbuildWalls() {

product.setWall("砌墙");

}

@Overridepublic voidroofed() {

product.setRoofed("封顶大吉");

}

@OverridepublicProduct buildProduct() {returnproduct;

}

}

建造者

packagecom.roc.build;/*** 建造者

*@authorliaowp

**/

public classDirector {publicProduct constructProduct(ConcreteBuilder concreteBuilder){

concreteBuilder.buildBasic();

concreteBuilder.buildWalls();

concreteBuilder.roofed();returnconcreteBuilder.buildProduct();

}

}

测试类

packagecom.roc.build;/*** 建造者

*@authorliaowp

**/

public classDirector {publicProduct constructProduct(ConcreteBuilder concreteBuilder){

concreteBuilder.buildBasic();

concreteBuilder.buildWalls();

concreteBuilder.roofed();returnconcreteBuilder.buildProduct();

}

}

建造者模式适用场景

建造者模式是在当创建复杂对象的复杂算法一个独立与该对象的组成部分以及它们的装配方式时适用的模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值