4,建造者模式

♀尐吖头ヾ 提交于 2020-04-06 11:53:28

一,什么是建造者模式

Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

二,例子

四个要素

产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。

抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。

具体建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。

导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

具体产品类House

/**
 * 
 * @类名称:House
 * @类描述:具体产品
 * @创建人:zender
 */
public class House {
    // 地板
    private String floor;
    // 墙
    private String wall;
    // 屋顶
    private String housetop;
 
    public String getFloor() {
        return floor;
    }
     // get/set忽略
}

抽象建造者Builder:

/**
 * 
 * @类名称:HouseBuilder
 * @类描述:抽象建造者Builder
 * @创建人:zender
 */
public interface HouseBuilder {
    //修地板
    public void makeFloor();
    //修墙
    public void makeWall();
    //修屋顶
    public void makeHousetop();
    public House getHouse();
}

具体建造者Builder:

/**
 * 
 * @类名称:GongyuBuilder
 * @类描述:具体建造者Builder
 * @创建人:zender
 */
public class GongyuBuilder implements HouseBuilder {
    House house = new House();
    
    public House getHouse() {
        return house;
    }
    public void makeFloor() {
        house.setFloor("公寓-->地板");
    }
    public void makeHousetop() {
        house.setHousetop("公寓-->房顶");
    }
    public void makeWall() {
        house.setWall("公寓-->墙");
    }
}

导演类Director:

/**
 * 
 * @类名称:HouseDirector
 * @类描述:导演类Director
 * @创建人:zender
 */
public class HouseDirector {
    public void makeHouse(HouseBuilder builder) {
        builder.makeFloor();
        builder.makeWall();
        builder.makeHousetop();
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        //由工程队来修房子
        HouseBuilder builder = new GongyuBuilder();
        //设计者来做设计
        HouseDirector director = new HouseDirector();
        director.makeHouse(builder);
        
        House house = builder.getHouse();
        System.out.println(house.getFloor());
        System.out.println(house.getWall());
        System.out.println(house.getHousetop());
    }
}

结果:

三、建造者模式应用场景

- 对象的创建

Builder模式是为对象的创建而设计的模式

- 创建的是一个复合对象

创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。

四,使用建造者模式的好处

1,使用建造者模式可以使客户端不必知道产品内部组成的细节。

2,具体的建造者类之间是相互独立的,对系统的扩展非常有利。

3,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!