建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
建造者的应用场景:
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
适合于一个具有较多属性的产品的创建过程。
正常的建造者模式应该有以下几个角色:
1.指挥者。 2.产品。3.工人。4.抽象
建造者模式的优点:
1.产品的建造和表示分离,实现了解耦,使用建造者模式可以使客户端不必知道产品组成细节。
2.将复杂产品的创建步骤分解再不同的方法中,使得创建过程更加清晰。
3.具体的建造者类之间是相互独立的,这有利于系统的扩展,增加新的具体。建造者无需修改原有类库的代码,符合开闭原则。
缺点:
1.建造者模式所创建的产品,一般具有较多的共同点,其组成部分相似,如果产品差异过大,则不适合使用建造者模式。所以使用范围收到限制。
2.如果产品内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得庞大。
常规建造者模式:
抽象类:
指挥:
工人:
测试类:
打印结果:
以上即是常规的建造者模式。
但是建造者模式,怎么建造应该让用户决定。总不能我去饭店让服务员帮我点菜,对吧,所以我们可以使用内部类的方式。
产品:
工人:
建造者,也就是抽象类
这次没有指挥了,因为用户即是指挥。
测试类:
打印结果:
如果想吃点别的:
可以在原来的基础上任意组合,如果不组合,即是默认套餐。
打印结果:
通过内部类的方式实现零件的无序装配构造,这种方式更加灵活,更符合定义,内部有复杂对象的默认实现,使用时可以根据用户需求自由定义更改内容,并且无需改变具体的构造方式,就生长处不同的复杂产品。