内容简介:以前在用框架的时候发现创建一个对象要连着.出很多方法,最后居然返回了我要的对象,不明觉厉,居然是建造者模式。其实建造者没那么神奇,类似于建房子,将房子这个对象和建造的过程分离,然后我们在建造的过程中执行一步步的步骤,最后一步把建好的房子返回给我。工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。使用场景:
以前在用框架的时候发现创建一个对象要连着.出很多方法,最后居然返回了我要的对象,不明觉厉,居然是建造者模式。其实建造者没那么神奇,类似于建房子,将房子这个对象和建造的过程分离,然后我们在建造的过程中执行一步步的步骤,最后一步把建好的房子返回给我。 建造者模式的定义:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的 设计模式 被称为建造者模式。
工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。
使用场景:
1、需要生成的对象具有复杂的内部结构。
2、需要生成的对象内部属性本身相互依赖。
与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。
UML表示
1、Builder:为创建一个产品对象的各个部件指定抽象接口
2、ConcreteBuilder:实现Builder的接口,构造和装配该产品的各个组件,并提供创建该产品的一个接口
3、Director:构造一个使用Builder接口的对象。
4、Product:表示被构造的复杂对象
建造者模式UML类图
从上图可以看出Builder是为创建一个Product对象的各个部件指定的抽象接口,Product是具体的产品,Director是一个建造者,由他指挥使用Builder,ConcreteBuilder是具体的建造,实现Builder接口的各个方法。
建造者的静态内部类模式
下面以建房子为例使用静态内部类的方式建一个房子
public class House { /** * 房子的地基 */ private String basic; /** * 房子的墙 */ private String wall; /** * 房子的屋顶 */ private String roof; public House(HouseBuilder houseBuilder) { this.basic = houseBuilder.basic; this.wall = houseBuilder.wall; this.roof = houseBuilder.roof; } @Override public String toString() { return "House{" + "basic='" + basic + '\'' + ", wall='" + wall + '\'' + ", roof='" + roof + '\'' + '}'; } public static class HouseBuilder { private String basic; private String wall; private String roof; /** * 打地基 * @param basic * @return */ public HouseBuilder buildBasic(String basic) { this.basic = basic; return this; } /** * 砌墙 * @param wall * @return */ public HouseBuilder buildWall(String wall) { this.wall = wall; return this; } /** * 建楼顶 * @param roof * @return */ public HouseBuilder buildRoof(String roof) { this.roof = roof; return this; } /** * 建造房子 * @return */ public House build() { return new House(this); } } } 复制代码
本例中房子有地基,墙,屋顶三个属性,而建房子就是组装这三个部件,组成一个房子,也就是三个步骤:打地基,砌墙和建屋顶,然后在HouseBuilder中要提供一个对外的接口,将建好的House交出去,就是build()方法。
测试类
public static void main(String [] args) { House house = new House.HouseBuilder() .buildBasic("地基要稳固") .buildWall("墙要刷的很白") .buildRoof("楼顶要结实") .build(); System.out.println(house.toString()); } 复制代码
运行结果:
在测试类中我们按部就班的一步步建好了房子,最后通过build()方法拿到了我们想要的房子,这种静态内部类的方式代码简洁,写起来也很顺手。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Art of Computer Programming, Volume 2
Knuth, Donald E. / Addison-Wesley Professional / 1997-11-04 / USD 79.99
Finally, after a wait of more than thirty-five years, the first part of Volume 4 is at last ready for publication. Check out the boxed set that brings together Volumes 1 - 4A in one elegant case, and ......一起来看看 《The Art of Computer Programming, Volume 2》 这本书的介绍吧!