建造模式

概述

       建造模式可以将一个产品内部表象与产品生成过程分割开,从而可以使一个建造过程生成具有不同内部表象的产品对象。

       内部表象:一个产品常有不同的组成成分作为产品的零件,零件可能是对象,也可能不是对象,他们通常叫做产品的内部表象。

       不同产品有不同的内部表象,也就是不同的零件,使用建造模式可以使客户端不需要知道所生产产品对象有哪些零件,是怎么建造的,及怎么组成产品。

          所以我们就希望能够像使用汽车一样使用复杂的对象:直接告诉你我需要的对象名或者对象类型,你返回一个完成的对象实例给我。建造者返回给客户一个完整的的产品对象,而客户端无须关心该对象所包含的额属性和组建方式,这就是建造者模式的设计动机。

       建造者模式构建复杂对象就像造汽车一样,是一个一个组件一个一个步骤创建出来的,它允许用户通过制定的对象类型和内容来创建他们,但是用户并不需要知道这个复杂对象是如何构建的,它只需要明白通过这样做我可以得到一个完整的复杂对象实例。

       

   抽象建造者Builder:给顶一个接口,规范产品对象的各个成分建造。有两种方法1,产品各个成分构造过程  buildPartyA,有多少个零件就有多少个方法  2  返回结果方法

    具体建造者concreteBuilder:抽象建造者的实现。

Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
   Product:产品角色。一个具体的产品对象。

       导演者角色和客户端打交到,导演者将客户端创建产品的请求划分为对各个零件建造的请求,将这些请求委派给具体建造者角色,建造者角色是做具体建造工作,却不 为客户端所知,

     一般来说,每个产品类就有过一个相应的具体建造者类,这些产品应当有一样数目的零件,而一个零件有一个建造方法。

class Porduct{}
abstract class Builder{
    public abstract void buildPart1();
    public abstract void buildPart2();
    public abstract Porduct returnProduct();
}

class ConcreteBuilder extends Builder{

    private Porduct product = new Porduct();
    @Override
    public void buildPart1() {
    }
    @Override
    public void buildPart2() {    
    }
    @Override
    public Porduct returnProduct() {
        return product;
    }
}

class Driector{
    private Builder b = new ConcreteBuilder();
    public void construct(){
        b.buildPart1();
        b.buildPart2();
        b.returnProduct();
    }
}
View Code

JavaMeal

使用场景

           1  产品对象有复杂的内部结构

           2  对象属性相互依赖,如果一个属性必须在另一个属性被赋值后赋值。模式可以实行一种分步骤经行的建造过程。

           3  即使属性间无依赖,但属性赋值前不能使用。

原文地址:https://www.cnblogs.com/whesuanfa/p/7382047.html