Java设计模式5:建造者模式

简介

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式和工厂模式都是为了创建产品,区别是工厂模式关注的是创建固定产品对象过程,而建造者模式关注的是按需求“组装”产品对象,但两者可以结合使用。

建造者模式四个角色

  1. 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个部件。
  2. 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
  3. 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
  4. 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息

实现

// 定义个产品类(Product),比如一个动漫小人的组成。
class Person {
    private String head;
    private String body;
    private String foot;

    // setter && getter
}

// 然后是抽象建造者接口类(Builder)
interface PersonBuilder {
    void buildHead();

    void buildBody();

    void buildFoot();

    Person buildPerson();
}

// 具体建造者(ConcreteBuilder),如何建造一个 Man
class ManBuilder implements PersonBuilder {
    Person person;

    public ManBuilder() {
        person = new Person();
    }

    @Override
    public void buildHead() {
        person.setHead("Man head");
    }

    @Override
    public void buildBody() {
        person.setBody("Man body");
    }

    @Override
    public void buildFoot() {
        person.setFoot("Man foot");
    }

    @Override
    public Person buildPerson() {
        return person;
    }
}

//具体建造者,建个 Woman
class WomanBuilder implements PersonBuilder {
    Person person;

    public WomanBuilder() {
        person = new Person();
    }

    @Override
    public void buildHead() {
        person.setHead("Woman head");
    }

    @Override
    public void buildBody() {
        person.setBody("Woman body");
    }

    @Override
    public void buildFoot() {
        person.setFoot("Woman foot");
    }

    @Override
    public Person buildPerson() {
        return person;
    }
}

// 导演类(Director), 根据需求组装的产品对象
class PersonDirector {
    public Person constructPerson(PersonBuilder pb) {
        pb.buildHead();
        pb.buildBody();
        pb.buildFoot();
        return pb.buildPerson();
    }
}

//客户端类
class Client {
    public static void main(String[] args) {
        PersonDirector pd = new PersonDirector();
        //男人
        Person person1 = pd.constructPerson(new ManBuilder());
        System.out.println(person1.getBody());
        System.out.println(person1.getFoot());
        System.out.println(person1.getHead());
        System.out.println();
        //女人
        Person person2 = pd.constructPerson(new WomanBuilder());
        System.out.println(person2.getBody());
        System.out.println(person2.getFoot());
        System.out.println(person2.getHead());
    }
}
/**
 * Man body
 * Man foot
 * Man head
 * 
 * Woman body
 * Woman foot
 * Woman head
 */

建造者模式可用于多属性对象构建。

参考来源
https://www.jianshu.com/p/dbd3aed9da71
http://c.biancheng.net/view/1354.html



、﹗∕
— 〇 -
╱︱ ヽ
但行好事、莫问前程!
>.freerme、我是lilee[https://blog.csdn.net/freerme]
_________________ *_*______
____ ____ ____
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值