建造者模式(生成器模式)

一,定义

建造者模式:也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

二,结构

这里写图片描述
Builder:为创建一个Product对象的各个部件指定抽象接口
ConcreteBuilder:具体建造者,实现Builder接口,构造和装备各个部件,
Product:具体的产品角色
Director:指挥者,可根据用户需求构建对象,她是构建一个使用Builder接口的对象。

三,示例

public abstract class PersonBuilder {
    //画一个人: 头 身体 左手 右手 左腿 右腿
    //建造人的过程是一样的,为了避免建造过程的马虎,我们需要先把过程固定
    public abstract void buildHead();
    public abstract void buildBody();
    public abstract void buildArmLeft();
    public abstract void buildArmRight();
    public abstract void buildLegLeft();
    public abstract void buildLegRight();
}

public class ThinPerson extends PersonBuilder {
    @Override
    public void buildHead() {
        System.out.println("画一个人头(瘦)");
    }

    @Override
    public void buildBody() {
        System.out.println("画一个身体(瘦)");
    }

    @Override
    public void buildArmLeft() {
        System.out.println("画一个左胳膊(瘦)");
    }

    @Override
    public void buildArmRight() {
        System.out.println("画一个右胳膊(瘦)");
    }

    @Override
    public void buildLegLeft() {
        System.out.println("画一个左腿(瘦)");
    }

    @Override
    public void buildLegRight() {
        System.out.println("画一个右腿(瘦)");
    }
}


public class PersonDirector {//指挥者
    private PersonBuilder builder;
    public PersonDirector(PersonBuilder builder){
        this.builder = builder;
    }

    public void creatPerson(){
        builder.buildHead();
        builder.buildBody();
        builder.buildArmLeft();
        builder.buildArmRight();
        builder.buildLegLeft();
        builder.buildLegRight();
    }
}

//test main
//建造者模式
public static void builderModel(){
   /构建一个瘦子
//   ThinPerson person = new ThinPerson();
     //构建一个胖子
     FatPerson person = new FatPerson();
     PersonDirector director = new PersonDirector(person);
     director.creatPerson();
 }

四,总结

优点:

  • 1,使用生成器模式可以使客户端不必知道产品内部组成的细节。
  • 2,具体的建造者类之间是相互独立的,对系统的扩展非常有利。
  • 3,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

    应用场景:

  • 1,主要用于创建一些复杂的对象,这些对象内部构建的构建顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。每一个内部成分本身可以是对象,也可以使一个对象的一个组成部分。

  • 2,需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程。
  • 3,在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到

参考:《大话设计模式》阿木侠 Java知音

示例代码:https://github.com/wangxp423/ExerciseDesignmodel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值