设计模式之建造者模式

  1. 基本概念
    建造者模式将一个复杂对象的构建与它的表示分离,使得同样的过程可以创建不同的表示。
  2. 建造者模式内容
    建造者模式一般包含以下内容:
    AbstractBuilder:抽象接口,用于声明建造某种对象所需要的方法,需要创建哪些部分。
    ConcreteBuilder:具体建造者,实现抽象接口,具体实现创建各个部分的方法,并且提供创建完的对象实例。
    Director:调度器,用于确定建造对象时的具体步骤,指定需要创建哪些部分。
    Product:具体的产品对象,包含自己的各部分(即属性)

  3. 代码示例

/**
 * Person类,具有头部,身体,四肢
 * @author yjzhou
 * 2016.03.19
 */
public class Person {
    /**头部*/
    private String head;
    /**身体*/
    private String body;
    /**四肢*/
    private String limb;

    public Person() {
        // TODO Auto-generated constructor stub
    }

    public String getHead() {
        return head;
    }

    public void setHead(String head) {
        this.head = head;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getLimb() {
        return limb;
    }

    public void setLimb(String limb) {
        this.limb = limb;
    }

    @Override
    public String toString (){
        return "this person head="+head
                +",body="+body
                +",limb="+limb;
    }
}
/**
 * 抽象构建器,声明构建Person对象需要的组件
 * @author yjzhou
 * 2016.03.19
 */
public interface AbstractBuilder {
    public void buildHead();
    public void buildBody();
    public void buildLimb();
    public Person buildPerson();
}
/***
 * Man的构建器,实现抽象构建器
 * @author yjzhou
 * 2016.03.19
 */
public class ManBuilder implements AbstractBuilder{
    /**Person类对象*/
    private 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 buildLimb() {
        person.setLimb("man limb");     
    }

    @Override
    public Person buildPerson() {
        return person;  
    }
}
/**
 * 调度器,确定创造Person对象的具体步骤
 * @author yjzhou
 *
 */
public class Director {
    /***
     * 创建Person对象的具体方法和步骤
     * @return person对象
     */
    public Person constructPerson(AbstractBuilder builder){
        builder.buildHead();
        builder.buildBody();
        builder.buildLimb();
        Person person = builder.buildPerson();
        return person;
    }
}
/***
 * 测试建造者模式
 * @author yjzhou
 *
 */
public class BuilderTest {

    public static void main(String[] args) {
        ManBuilder builder = new ManBuilder();
        Director director = new Director();
        Person person = director.constructPerson(builder);
        System.out.println(person);
    }

}

总结

通过以上的代码可以知道,传递给调度器对象不同的建造者,就可以得到不同的Person对象,示例中创建的事Man类型的Person,若是想要获得Women类型的Person,只需要写一个Women类型的Builder实现AbstractBuilder,传递给调度器即可,获得一个Women类型的Person对象了。提高了程序的扩展性,不必修改原有的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值