将复杂对象的构建和表示分类,隐藏了复杂对象的构建过程,动态创建具有复合属性的对象。
优点:
具体的建造者之间互相独立,利于系统扩展,不影响其他模块
客户端不必知道内部组成细节
缺点:
建造的产品有较多共同点,组成部分相似
使用场景
隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果
多个部件都可以装配到一个对象中,但产生的运行结果不相同
产品类非常复杂或者产品类因为调用顺序不同而产生不同作用
初始化一个对象时,参数过多,或者很多参数具有默认值
Builder模式不适合创建差异性很大的产品类
产品内部变化复杂,会导致需要定义很多具体建造者类实现变化,增加项目中类的数量,增加系统的理解难度和运行成本
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
在不改变原有类和使用继承的情况下,动态扩展
优点:
装饰类和被装饰类可以独立发展,而不会相互耦合。它有效地把类的核心职责和装饰功能分开了
装饰模式是继承关系的一个替代方案
装饰模式可以动态地扩展一个实现类的功能
缺点:
多层装饰比较复杂,
场景
需要扩展一个类的功能时
需要动态地给一个对象增加功能,并可以动态地撤销时
需要为一批的兄弟类进行改装或加装功能时