1、介绍
1、1 建造者模式定义
- 建造者模式也叫做生成器模式,将一个复杂对象的建造与他的表示分离,使得同样的构造过程可以创建不同的表示。
- 建造者模式类图
1、2 角色
-
建造者模式中的角色
角色 定义 Product产品类 通常是实现了模板方法模式。也就是模板方法的一般方法和模板方法 Builderc抽象建造者 规范产品的组建,一般由子类实现 ConcreteBuilder具体建造者 实现抽象方法的所有方法,并且返回一个组建好的对象 Director指挥类 负责安排已有模块的顺序,然后告诉builder开始建造。 -
通用代码
/** * 产品类 */ public class Product { public void doSomething(){ //独立业务逻辑 } } /** * 抽象建造者 */ public abstract class Builder { /** * 设置不同的部分,获得不同的产品 */ public abstract void setPart(); public abstract Product buildProduct(); } /** * 具体建造者 */ public class ConcreteBuilder extends Builder { private Product product; public ConcreteBuilder(Product product){ this.product = product; } @Override public void setPart() { /** * 产品类内的逻辑处理 */ } /** * 组件一个产品 * @return */ @Override public Product buildProduct() { return this.product; } } /** * 指挥类 */ public class Director { private ConcreteBuilder builder = new ConcreteBuilder(new Product()); public Product getProduct(){ builder.setPart(); return builder.buildProduct(); } }
1、3 应用
-
优缺点
优点 缺点 封装性:使用建造者模式可以使客户端不
必知道产品内部的组成细节只适用于有相同特点的产品,如果之间的差异很大,则不适用,适用范围受限制 建造者独立,便于扩展 产品的变更,多个建造者都需要修改 便于控制细节风险。可以对建造者过程逐步
不影响其他的模块. -
使用场景
- 相同的方法,不同的执行顺序,产生不同的事件结果,可以采用建造者模式
- 多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果不同时
- 产品类非常复杂,或者是产品类中的调用顺序不同产生不同的效果时
- 如果想把复杂对象的创建和使用分离开来,那么使用建造者模式
-
建造者模式和简单工厂模式
- 它们都属于创建型模式「都是创建产品的」
- 建造者模式关注的零件类型和装配顺序,工厂模式创建的对象都是一样的,创建出来就可以了。总结来说就是注重点不同。