共计 1870 个字符,预计需要花费 5 分钟才能阅读完成。
建造者模式
建造者模式概述
建造者模式将一个简单对象的构建过程与他的示意拆散,使得同样的构建过程能够创立不同的示意,属于创立型设计模式。
对于用户而言,应用建造者模式只须要指定须要创立的类型就能够取得对象,创立过程及细节不须要理解。依据建造者模式的定义,能够简略的了解为两层含意。
(1)构建与示意拆散:构建代表对象创立,示意代表对象的行为办法,也就是将对象的创立与行为拆散(对应 Java 代码,其实就是使接口规定行为,办法,而后由具体的实现类进行构建)。(2)创立不同的示意:也就是具备同样的行为,然而却因为构建的行为程序不同或其余起因,能够创立出不同的示意。
建造者模式的利用场景
建造者模式在日常生活中是很常见的。比方咱们在买车的时候会有低配、标配和高配,也有可能会增配、减配。这个抉择的过程就是在使用创建者模式。
从定义上来看,建造者模式和工厂模式是十分类似的,具备创立与示意拆散的个性。建造者模式惟一区别在于:工厂模式是针对简单对象的创立。也就是说,如果创立简略对象,通常都是应用工厂模式进行创立;而如果创立简单对象,就能够思考应用建造者模式。
当创立的产品具备简单创立过程时,能够抽取出共性创立过程,而后交由具体实现类自定义创立过程,是的同样的创立行为能够产出不同的产品,拆散了创立与示意,使得创立产品的灵活性大大增加。建造者模式次要实用于以下场景:
(1)雷同的办法,不同的执行程序,产生的后果不同。
(2)多个部件或整机,都能够拆卸到一个对象中,然而产生的后果又不同。
(3)产品类非常复杂,或者产品类中不同的调用程序产生不同的作用。
(4)初始化一个对象特地简单,参数多,而且很多参数都具备默认值。
建造者模式的 UML 图
由上图能够看出,建造者模式次要包含四个角色:
(1)产品(Product):要创立的产品类对象。
(2)形象建造者(IBuilder):建造者的抽象类,标准产品对象的各个组成部分的创立,个别由子类实现具体的创立过程。
(3)建造者(ConcreteBuilder): 具体的 builder 类,依据不同的业务逻辑,具体化对象的各个组成部分的创立。
(4)调用者(Director)具体的建造者,来创建对象的各个局部,在指导者中不波及具体产品的信息,只负责保障对象各局部残缺创立或者按某种程序创立。在类图中,Client 相当于调用者角色。
package com.demo.prototype;
/**
* 建造者模式
*/
public class Builder {public static void main(String[] args) {IBuilder builder = new ConcreteBuilder();
System.out.println(builder.build());
}
static class ConcreteBuilder implements IBuilder{private Product product = new Product();
@Override
public Product build() {return product;}
}
/**
* 形象建造者
*/
interface IBuilder{Product build();
}
/**
* 产品类
*/
static class Product{
private String name;
public String getName() {return name;}
public void setName(String name) {this.name = name;}
@Override
public String toString() {
return "Product{" +
"name='" + name + '''+'}';
}
}
}
#### 建造者模式的扩大
建造者模式与工厂模式的区别:(1): 建造者模式更加重视发那个发的调用程序,工厂模式重视创建对象。(2):创建对象的力度不同,建造者模式创立简单对象,由各种简单对象的部件组成,工厂模式创立进去的对象都一样。(3):重视点不同,工厂模式只须要把对象创立进去就能够了,而建造模式不仅须要创建对象,还须要晓得对象由哪些部件组成。(4):建造者模式依据建造过程中的程序不同,最终的对象部件组成也不一样。建造者模式的长处:(1):封装性好,构建与示意拆散。(2):扩展性好,建造类之间独立,在肯定水平上解耦。(3):便于管制细节,建造者能够对创立过程逐渐细化,而不对其余模块产生任何影响。建造者模式的毛病:(1):须要对创立一个 IBuilder 对象。(2):如果产品外部发生变化,则建造者也要同步批改,前期保护老本比拟大。