Java设计模式之建造者模式

将一个复杂对象的构造与表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式称之为建造者模式。

一般建造者模式由四个角色构成,Builder,创建产品各个部件的抽象接口;ConcreteBuilder,Builder的具体实现类,在此构建和装配产品的具体各个部件;Director,构建的使用Builder的对象,在此调用抽象接口及其方法;Product,产品超类及其具体实现类;

1.创建产品各个部件及产品的抽象接口

public interface PersonBuilder {

    void buildHead();
    void buildBody();
    void buildFoot();
    Person buildPerson();
}

2.抽象接口的具体实现类

public class MenBuilder implements PersonBuilder{

    Person person;
    
    public MenBuilder(){
        person = new Man();
    }
    
    @Override
    public void buildHead() {
        System.out.println("build man's head!");
        
    }

    @Override
    public void buildBody() {
        System.out.println("build man's body!");
        
    }

    @Override
    public void buildFoot() {
        System.out.println("build man's foot!");
        
    }

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

}

 

public class WomenBuilder implements PersonBuilder{

    Person person;
    
    public WomenBuilder(){
        person = new Woman();
    }
    
    @Override
    public void buildHead() {
        System.out.println("build women's head!");
        
    }

    @Override
    public void buildBody() {
        System.out.println("build women's body!");
        
    }

    @Override
    public void buildFoot() {
        System.out.println("build women's foot!");
        
    }

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

}

3.调用抽象接口的类

public class PersonDirector {

    public Person constructPerson(PersonBuilder pb){
        pb.buildHead();
        pb.buildBody();
        pb.buildFoot();
        return pb.buildPerson();
    }
}

4.产品的超类及其子类

public class Person implements Serializable{

    private static final long serialVersionUID = 1L;
    
    private String head;
    private String body;
    private String foot;
    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 getFoot() {
        return foot;
    }
    public void setFoot(String foot) {
        this.foot = foot;
    }
        
}

public class Man extends Person{

    public Man(){
        System.out.println("开始建造男人!");
    }
}

public class Woman extends Person{

    public Woman(){
        System.out.println("开始建造女人!");
    }
}
 

5.测试类

public class test {

    public static void main(String[] args) {
        PersonDirector pd = new PersonDirector();
        Person men = pd.constructPerson(new MenBuilder());
        Person women = pd.constructPerson(new WomenBuilder());
    }
}

6.输出结果

开始建造男人!
build man's head!
build man's body!
build man's foot!
开始建造女人!
build women's head!
build women's body!
build women's foot!

建造者模式中构建过程与产品本身分离,具体产品构造者相互独立,差异产品之间具有较多的共同属性,如果差异增大,则建造者模式不再适合!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值